<?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>CGFBApp</name>
	<version>1.0.1</version>
  <mincmsversion>1.9.1</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgdG9vbHMgKHZpYSBhbiBBUEkgYW5kIHZhcmlvdXMgc21hcnR5IHBsdWdpbnMpIHRvIGFsbG93IGVhc2lseSBpbnRlZ3JhdGluZyBmYWNlYm9vayBpbnRvIHlvdXIgYXBwbGljYXRpb24gdXNpbmcgc21hcnR5IGxvZ2ljLCBvciBidWlsZGluZyBhIHNpbXBsZSBmYWNlYm9vayBhcHBsaWNhdGlvbiB1c2luZyBzaW1wbGUgc21hcnR5IHBsdWdpbnMgb3IgdXNlciBkZWZpbmVkIHRhZ3MuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGJ1aWxkaW5nIEUtY29tbWVyY2UsIHRvdXJpc20sIGV2ZW50IG9yIHNvY2lhbCB3ZWJzaXRlcy48L3A+CjxoMz5GZWF0dXJlczwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNtYXJ0eSB1dGlsaXRpZXMgZm9yIGludGVncmF0aW5nIEZhY2Vib29rIGludG8geW91ciB3ZWJzaXRlLCBhbmQgc29tZSBzbWFydHkgdXRpbGl0aWVzIGFuZCBhIHNpbXBsZSBBUEkgZm9yIGJ1aWxkaW5nIGZhY2Vib29rIGFwcGxpY2F0aW9ucy4gSW5jbHVkaW5nOjxici8+CiA8dWw+CiA8bGk+SW5pdGlhbGl6aW5nIHRoZSBGYWNlYm9vayBKYXZhc2NyaXB0IEFQSSAoc3luY2hyb25vdXNseSBvciBhc3luY2hvcm5vdXNseSk8L2xpPgogPGxpPkRpc3BsYXkgYSBib3ggYWxsb3dpbmcgdXNlcnMgdG8gY29tbWVudCBvbiBhbnkgb2JlY3Qgd2l0aGluIHlvdXIgd2Vic2l0ZSAobm8gRmFjZWJvb2sgQVBQSUQgUmVxdWlyZWQpCiA8bGk+RGlzcGxheSBhIEZhY2Vib29rIExpa2UgQnV0dG9uIGZvciBhbnkgaXRlbTwvbGk+CiA8bGk+Q3JlYXRlIGEgV2FsbCBQb3N0IGZvciB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyLjwvbGk+CiA8bGk+Q3JlYXRlIGEgU3RhdHVzIHBvc3QgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIuPC9saT4KIDxsaT5EaXNwbGF5IGFuIGludml0ZSBmb3JtIHRvIGludml0ZSB1c2VycyB0byB5b3VyIHdlYnNpdGU8L2xpPgogPGxpPgogPC91bD4KPC9wPjxici8+CjxwPllvdSBoYXZlIGFjY2VzcyB0byBudW1lcm91cyBzbWFydHkgdXRpbGl0aWVzIGZvciBjcmVhdGluZyB2YXJpb3VzIE9wZW5HcmFwaCBPYmplY3RzOgogPHVsPgogPGxpPlNldCB0aGUgT3BlbkdyYXBoIFVSTDwvbGk+CiA8bGk+U2V0IHRoZSBPcGVuR3JhcGggVGl0bGU8L2xpPgogPGxpPlNldCB0aGUgT3BlbkdyYXBoIE9iamVjdCBUeXBlPC9saT4KIDxsaT5TZXQgdGhlIE9wZW5HcmFwaCBJbWFnZSBBdHRyaWJ1dGU8L2xpPgogPGxpPlNldCB0aGUgT3BlbkdyYXBoIFRpdGxlIEF0dHJpYnV0ZTwvbGk+CiA8bGk+U2V0IHRoZSBPcGVuR3JhcGggU2l0ZW5hbWUgQXR0cmlidXRlPC9saT4KIDxsaT5TZXQgdGhlIE9wZW5HcmFwaCBEZXNjcmlwdGlvbiBBdHRyaWJ1dGU8L2xpPgogPGxpPlNldCB0aGUgT3BlbkdyYXBoIGFkbWlucyBhdHRyaWJ1dGUuPC9saT4KIDwvdWw+CjwvcD48YnIvPgo8cD5Zb3UgaGF2ZSBhY2Nlc3MgdG8gbnVtZXJvdXMgc21hcnR5IHV0aWxpdGllcyBmb3IgYnVpbGRpbmcgYSBGYWNlYm9vayBBcHBsaWNhdGlvbiBvbiBhIHBhZ2Ugb2YgeW91ciB3ZWJzaXRlOgogPHVsPgogPGxpPkluaXRpYWxpemluZyB0aGUgRmFjZWJvb2sgSmF2YXNjcmlwdCBBUEkgKHN5bmNocm9ub3VzbHkgb3IgYXN5bmNob3Jub3VzbHkpPC9saT4KIDxsaT5FbnRlcmluZyB5b3VyIEZhY2Vib29rIEFwcGxpY2F0aW9uIElELCBhbmQgQXBwIFNlY3JldDwvbGk+CiA8bGk+U2VsZWN0aW5nIHdoaWNoIEZhY2Vib29rIHBlcm1pc3Npb25zIHlvdXIgQXBwIFJlcXVpcmVzIChpZiBhbnkpPC9saT4KIDxsaT5EaXNwbGF5aW5nIGEgbG9naW4gYnV0dG9uIGFsbG93aW5nIHVzZXJzIHRvIGxvZ2luIHRvIHlvdXIgYXBwIG9yIHdlYnNpdGUgdXNpbmcgdGhlaXIgRmFjZWJvb2sgY3JlZGVudGlhbHM8L2xpPgogPGxpPkRpc3BsYXlpbmcgYSBsb2dvdXQgYnV0dG9uIGFsbG93aW5nIHVzZXJzIHRvIGxvZ291dCBmcm9tIHlvdXIgYXBwbGljYXRpb24uPC9saT4KIDxsaT5Jbml0aWFsaXppbmcgdGhlIEZhY2Vib29rIEphdmFzY3JpcHQgQVBJIChzeW5jaHJvbm91c2x5IG9yIGFzeW5jaG9ybm91c2x5KTwvbGk+CiA8bGk+Q2FsbGluZyBhbnkgZnVuY3Rpb24gaW4gdGhlIEZhY2Vib29rIEdyYXBoIEFQSTwvbGk+CiA8bGk+UmV0cmlldmUgYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIgdGhhdCBoZSBoYXMgYXV0aG9yaXplZCB0byBzaGFyZSB3aXRoIHlvdTwvbGk+CiA8bGk+UmV0cmlldmUgRmFjZWJvb2sgVUlEIGZvciB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyLjwvbGk+CiA8bGk+U2VuZCBhIFBPU1QgY29tbWFuZCB0byB0aGUgRmFjZWJvb2sgR1JBUEggQVBJPC9saT4KIDwvdWw+CjwvcD48YnIvPgo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIGxpbWl0ZWQgc21hcnR5IHV0aWxpdGllcyBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBkYXRhIGZvciBjcmVhdGluZyBzaW1wbGUgYXBwbGljYXRpb25zOgogPHVsPgogICA8bGk+UmV0cmlldmUgYXBwbGljYXRpb24gc3BlY2lmaWMgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gdGhlIEZhY2Vib29rIHVzZXIuPC9saT4KICAgPGxpPlN0b3JlIGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZSBGYWNlYm9vayB1c2VyIHRvIHRoZSBkYXRhYmFzZS48L2xpPgogICA8bGk+RXJhc2UgdXNlciByZWxhdGVkIGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uLjwvbGk+CiAgIDxsaT5SZXRyaWV2ZSBhIGxpc3Qgb2YgdGhlIHVzZXJzIGZyaWVuZHMgdGhhdCBhcmUgYWxzbyB1c2luZyB0aGUgYXBwbGljYXRpb24uPC9saT4KIDwvdWw+CjwvcD48YnIvPgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciIHN0eWxlPSJjb2xvcjpibGFjaztwYWRkaW5nOjVweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JvcmRlcjoycHggZG90dGVkIG9yYW5nZSI+CiAgPHA+VGhpcyBtb2R1bGUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIGxlYXJuaW5nIHRoZSBGYWNlYm9vayBBUElTIGZvciB3cml0aW5nIGFwcGxpY2F0aW9ucyB3aXRoIEZhY2Vib29rLiAgSXQgcHJvdmlkZXMgc29tZSB3cmFwcGVycyBhbmQgY29udmVuaWVuY2VzIGZvciBzbWFydHkgZm9yIHJldHJpZXZpbmcgZGF0YSBmcm9tIGFuZCBzdWJtaXR0aW5nIGRhdGEgdG8gRmFjZWJvb2suPC9wPgogIDxwPjxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47Ij5QbGVhc2U8L3NwYW4+IHJlYWQgdGhlIGZhY2Vib29rIGFwcGxpY2F0aW9uIHR1dG9yaWFscyBhbmQgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24uPC9wPgo8L2Rpdj4KPGgzPkhvdyBkbyBJIHVzZSBpdDwvaDM+CjxwPlRoZXJlIGFyZSB0d28gcHJpbWFyeSB3YXlzIHRvIHVzZSB0aGlzIG1vZHVsZS4gIEZpcnN0LCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgdG8gYWRkIHNvY2lhbCBhdHRyaWJ1dGVzIHRvIHlvdXIgZXhpc3RpbmcgQ01TTVMgV2Vic2l0ZS4gIFNlY29uZGx5IHlvdSBjYW4gdXNlIHRoaXMgbW9kdWxlIHRvIHF1ZXJ5IGRhdGEgZnJvbSBhbmQgc3VibWl0IGluZm9ybWF0aW9uIHRvIEZhY2Vib29rLiAgQWRkaXRpb25hbGx5IHNvbWUgcGx1Z2lucyBhcmUgcHJvdmlkZWQgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgYXBwIHNwZWNpZmljIGluZm9ybWF0aW9uIGZvciBhIGZhY2Vib29rIHVzZXIuPC9wPgo8aDQ+PHU+RmFjZWJvb2sgU29jaWFsIFBsdWdpbnM6PC91PjwvaDQ+CiAgIDxwPlRoZSBmb2xsb3dpbmcgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHNtYXJ0eSBmdW5jdGlvbnMgdG8gYWxsb3cgaW50ZWdyYXRpbmcgRmFjZWJvb2sgaW50byB5b3VyIHdlYnNpdGUuICBTZWUgdGhlICZxdW90O1NtYXJ0eSBGdW5jdGlvbnMmcXVvdDsgc2VjdGlvbiBiZWxvdyBmb3IgYSBkZXRhaWxlZCByZWZlcmVuY2Ugb2YgZWFjaCBwbHVnaW4uIEZvciBhIHJlZmVyZW5jZSB5b3Ugc2hvdWxkIHJlYWQgdGhpcyBwYWdlIGFib3V0IDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS9wbHVnaW5zIj5GYWNlYm9vayBTb2NpYWwgUGx1Z2luczwvYT48L3A+Cjx1bD4KIDxsaT48Y29kZT57Y2dmYl9saWtlfTwvY29kZT4gV2lsbCBkaXNwbGF5IGEgRmFjZWJvb2sgbGlrZSBidXR0b24gdG8gYWxsb3cgdXNlcnMgdG8gJnF1b3Q7TGlrZSZxdW90OyBUaGUgY3VycmVudCBQYWdlLjxici8+PHU+Tm90ZTo8L3U+IHlvdSBzaG91bGQgdHVybiB5b3J1IHdlYiBwYWdlcyBhbmQgb3RoZXIgaXRlbXMgaW50byAmcXVvdDtHcmFwaCBPYmplY3RzJnF1b3Q7IGZvciBvcHRpbWFsIGJlaGF2aW91ci48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX2NvbW1lbnRzfTwvY29kZT4gV2lsbCBkaXNwbGF5IGEgZm9ybSBhbGxvd2luZyB1c2VycyB0byBhZGQgYSBjb21tZW50IHRvIHRoZSBjdXJyZW50IHBhZ2UsIG9yIGFuIGl0ZW0gb24gdGhlIHBhZ2UsIGFuZCB0byB2aWV3IHRoZSBjb21tZW50cyBvZiBvdGhlcnMuPC9saT4KPC91bD48YnIvPgogPHA+VGhlIHNpbXBsZXN0IHdheSB0byBhZGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byB5b3VyIHNpdGUgaXMganVzdCB0byBhZGQgPGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfaW5pdH17Y2dmYl9saWtlfTwvY29kZT4gaW50byB0aGUgcGFnZSB0ZW1wbGF0ZSBvZiB5b3VyIHNpdGUuICBOb3cgYW55IHBhZ2UgdGhhdCB1c2VzIHRoaXMgcGFnZSB0ZW1wbGF0ZSB3aWxsIGhhdmUgYSBmYWNlYm9vayAmcXVvdDtMaWtlJnF1b3Q7IGJ1dHRvbiBhdHRhY2hlZCB0byBpdC4gIFlvdSBkbyBub3QgbmVlZCB0byBjcmVhdGUgYSBmYWNlYm9vayBhcHBsaWNhdGlvbiB0byB1c2UgdGhpcyBmdW5jdGlvbi48L3A+CjxwPlRoZSBuZXh0IG1vc3QgY29tbW9uIHdheSB0byBhZGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byB5b3VyIHNpdGUgaXMgdG8gYWxsb3cgdmlzaXRvcnMgdG8gZW50ZXIgY29tbWVudHMuICBZb3UgY2FuIGRvIHRoaXMgYnkgYWRkaW5nIHRoZSA8Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9pbml0fXtjZ2ZiX2NvbW1lbnRzfTwvY29kZT4gdGFnIGludG8geW91ciBwYWdlIHRlbXBsYXRlLjwvcD4KIDxwPkFkZGluZyBhICZxdW90O2xpa2UmcXVvdDsgYnV0dG9uIGJlc2lkZSBlYWNoIGVudHJ5IG9uIHlvdXIgUHJvZHVjdCBzdW1tYXJ5IHZpZXdzIHlvdSBjYW4gc2ltcGx5IHBhc3MgdGhlIGRldGFpbCB1cmwgdmFsdWUgZm9yIGVhY2ggcHJvZHVjdCBkaXNwbGF5ZWQgaW4gdGhlIHN1bW1hcnkgdmlldyBhcyB0aGUgPGVtPmhyZWY8L2VtPiBwYXJhbWV0ZXIgdG8gdGhlIHtjZ2ZiX2xpa2V9IHRhZy4gIGkuZTo8YnIvPgogPHByZT57Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fTxici8+eyogeW91ciBvdGhlciBzdW1tYXJ5IHRlbXBsYXRlIHN0dWZmICp9PGJyLz48c3BhbiBzdHlsZT0iY29sb3I6IGdyZWVuOyI+e2NnZmJfbGlrZSBocmVmPSRlbnRyeS0+ZGV0YWlsX3VybH08L3NwYW4+PGJyLz57L2ZvcmVhY2h9PC9wcmU+CiA8cD4KCjxici8+PGg0Pjx1PkludGVncmF0aW5nIHdpdGggT3BlbkdyYXBoOjwvdT48L2g0Pgo8cD5JbnRlZ3JhdGluZyB3aXRoIE9wZW5HcmFwaCB3aWxsIGFsbG93IGZhY2Vib29rIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoYXQgdHlwZSBvZiBkYXRhIGlzIG9uIHRoZSBwYWdlIChhIHZpZGVvLCBpbWFnZSwgcGVyc29uYWwgaW5mb3JtYXRpb24sIGNvbXBhbnkgaW5mb3JtYXRpb24sIGV0YykuICBJdCBpcyBhZHZpc2VkIHRoYXQgeW91IGludGVncmF0ZSB3aXRoIE9wZW5HcmFwaCBhcyBtdWNoIGFzIHBvc3NpYmxlIGZvciBtYXhpbXVtIGVmZmVjdGl2ZW5lc3MsIGFuZCBmb3Igdmlld2luZyBpbmZvcm1hdGlvbiBhYm91dCBmYWNlYm9vayAmcXVvdDtpbnNpZ2h0cyZxdW90Oy48L3A+CiAgIDxwPlJlZmVyZW5jZTogPGEgaHJlZj0iaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL2RvY3Mvb3BlbmdyYXBoIj5UaGUgT3BlbiBHcmFwaCBQcm90b2NvbDwvYT48L3A+Cjx1bD4KPGxpPjxjb2RlPntjZ2ZiX29nX3ZhbHVlfTwvY29kZT4gSXMgdXNlZCB0byBjcmVhdGUgYSBzaW1wbGUgbmFtZS92YWx1ZSBwYWlyIGZvciB5b3VyIE9wZW5HcmFwaCBPYmplY3QuPC9saT4KPGxpPjxjb2RlPntjZ2ZiX29nX3RpdGxlfTwvY29kZT4gSXMgdXNlZCB0byBzZXQgdGhlICZxdW90O29nOnRpdGxlJnF1b3Q7IGF0dHJpYnV0ZS48L2xpPgo8bGk+PGNvZGU+e2NnZmJfb2dfdHlwZX08L2NvZGU+IElzIHVzZWQgdG8gc2V0IHRoZSAmcXVvdDtvZzp0eXBlJnF1b3Q7IGF0dHJpYnV0ZS48L2xpPgo8bGk+PGNvZGU+e2NnZmJfb2dfaW1hZ2V9PC9jb2RlPiBJcyB1c2VkIHRvIHNlIHRoZSAmcXVvdDtvZzppbWFnZSZxdW90OyBhdHRyaWJ1dGUuPC9saT4KPGxpPjxjb2RlPntjZ2ZiX29nX3NpdGVuYW1lfTwvY29kZT4gSXMgdXNlZCB0byBzZXQgdGhlICZxdW90O29nOnNpdGVuYW1lJnF1b3Q7IGF0dHJpYnV0ZS48L2xpPgo8bGk+PGNvZGU+e2NnZmJfb2dfYWRtaW5zfTwvY29kZT4gSXMgdXNlZCB0byBzZXQgdGhlICZxdW90O2ZiOmFkbWlucyZxdW90OyBhdHRyaWJ1dGUuPC9saT4KPGxpPjxjb2RlPntjZ2ZiX29nX21ldGF9PC9jb2RlPiBHYXRoZXJzIGFsbCB0aGUgb3BlbmdyYXBoIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGJlZW4gc2V0LCBhbmQgYXBwbGllcyBzb21lIGludGVsaWdlbnQgZGVmYXVsdHMgdG8gdGhvc2UgdGhhdCBoYXZlIG5vdCBiZWVuIHNldCwgYW5kIG91dHB1dHMgdGhlIGFwcHJvcHJpYXRlIG1ldGEgdGFncy48L2xpPgo8L3VsPjxici8+CjxwPlRoZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncmFwaHByb3RvY29sLm9yZyI+T3BlbiBHcmFwaCBQcm90b2NvbDwvYT4gZXNzZW50aWFsbHkgYWxsb3dzIHlvdSB0byBkZXNjcmliZSByZWFsIHdvcmxkIG9iamVjdHMgdXNpbmcgbWV0YSB0YWdzIGFuZCBIVE1MIGNvbnRlbnQuICBXaGVuIHRoZSBPcGVuIEdyYXBoIFByb3RvY29sIEZhY2Vib29rIHdpbGwgZXNzZW50aWFsbHkgdHJlYXQgeW91ciB3ZWIgcGFnZSBhcyBhICZxdW90O0ZhY2Vib29rIFBhZ2UmcXVvdDsgYW5kIHRoZSBzdHJ1Y3R1cmVkIGRhdGEgeW91IHByb3ZpZGUgZGVmaW5lcyBob3cgeW91ciBwYWdlIHdpbGwgYmUgcHJlc2VudGVkIHRvIGZhY2Vib29rLjwvcD4KPHA+SW1wbGVtZW50aW5nIHRoZSBPcGVuIEdyYXBoIFByb3RvY29sIGluIHlvdXIgcGFnZSBpcyA8ZW0+dXN1YWxseTwvZW0+IGFzIHNpbXBsZSBhcyBhZGRpbmcge2NnZmJfb2dfbWV0YX0gaW50byB0aGUgaGVhZCBzZWN0aW9uIG9mIHlvdXIgcGFnZSB0ZW1wbGF0ZSwgYW5kIHRoZW4gYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSBhdHRyaWJ1dGVzIHRvIGRlc2NyaWJlIHlvdXIgb2JqZWN0IGluIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGUgdGVtcGxhdGUsIEdDQiBvciBwYWdlIGNvbnRlbnQgYmxvY2suICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgd2lsbCBjcmVhdGUgb3BlbmdyYXBoIG9iamVjdHMgb24gZWFjaCBwcm9kdWN0IGRldGFpbCBwYWdlLjwvcD4KPHVsPgo8bGk+MS4gIEVuc3VyZSB0aGF0ICZxdW90O3Byb2Nlc3Nfd2hvbGVfdGVtcGxhdGUmcXVvdDsgaXMgc2V0IHRvICZxdW90O2ZhbHNlJnF1b3Q7IGluIHlvdXIgY29uZmlnLnBocDwvbGk+CjxsaT4yLiAgQWRkIHRoZSB7Y2dmZ19vZ19tZXRhfSB0YWcgc29tZXdoZXJlIGluIHRoZSAmbHQ7aGVhZCZndDsgc2VjdGlvbiBvZiB5b3VyIHBhZ2UgdGVtcGxhdGUuICBPcHRpb25hbGx5LCB5b3UgbWF5IGFkZCBpdCBpbiB0aGUgJnF1b3Q7UGFnZSBTcGVjaWZpYyBNZXRhZGF0YSZxdW90OyBzZWN0aW9uIG9mIHRoZSBwYWdlIHRoYXQgeW91IHVzZSBmb3IgYSBQcm9kdWN0cyBEZXRhaWwgVmlldy48L2xpPgo8bGk+My4gIEluIHRoZSBkZWZhdWx0IFByb2R1Y3RzIGRldGFpbCB0ZW1wbGF0ZSBhZGQgdGhlIGZvbGxvd2luZyBsaW5lczoKPGJyLz4KPHByZT48c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW47Ij57Y2dmYl9vZ190aXRsZSB0aXRsZT0kZW50cnktPnByb2R1Y3RfbmFtZX08YnIvPntjZ2ZiX29nX3R5cGUgdHlwZT0ncHJvZHVjdCd9PC9zcGFuPjwvcHJlPgo8L3ByZT4KPC9saT4KPC91bD4KPGJyLz48cD5PbmNlIHlvdSBicm93c2UgdG8gYSBkZXRhaWwgdmlldyBvZiBhIHByb2R1Y3QsIGFuZCB2aWV3IHRoZSBzb3VyY2UsIHlvdSBzaG91bGQgbm93IHNlZSB0aGUgT3BlbiBHcmFwaCBtZXRhIHRhZ3MgaW4gdGhlIHBhZ2UgaGVhZGVyLiAgTm93IHdoZW4gY29tYmluZWQgd2l0aCBhIGxpa2UgYnV0dG9uIGFzIGRlc2NyaWJlZCBhYm92ZSwgeW91ciB3ZWJzaXRlIGludGVncmF0aW9uIGlzIG5lYXJseSBkb25lLjwvcD4KCjxici8+PGg0Pjx1PlNpbXBsZSBGYWNlYm9vayBBcHBsaWNhdGlvbnM6PC91PjwvaDQ+Cjx1bD4KIDxsaT48Y29kZT57Y2dmYl9pbml0fTwvY29kZT4gV2lsbCBvdXRwdXQgdGhlIGphdmFzY3JpcHQgdG8gaW5pdGlhbGl6ZSB0aGUgRmFjZWJvb2sgSmF2YXNjcmlwdCBBUEkuPC9saT4KIDxsaT48Y29kZT57Y2dmYl9sb2dpbn08L2NvZGU+IFdpbGwgZGlzcGxheSBhIEZhY2Vib29rIGxvZ2luIGJ1dHRvbi48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX2xvZ291dH08L2NvZGU+IFdpbGwgZGlzcGxheSBhIEZhY2Vib29rIGxvZ291dCBidXR0b24uPC9saT4KIDxsaT48Y29kZT57Y2dmYl91aWR9PC9jb2RlPiBXaWxsIGRpc3BsYXkgdGhlIHVzZXJzIEZhY2Vib29rIFVzZXIgSUQuPC9saT4KIDxsaT48Y29kZT57Y2dmYl9pbnZpdGV9PC9jb2RlPiBXaWxsIGRpc3BsYXkgYW4gYWR2YW5jZWQgZm9ybSBhbGxvd2luZyB5b3VyIHVzZXJzIHRvIGludml0ZSB0aGVpciBmcmllbmRzIHRvIHlvdXIgYXBwbGljYXRpb24uPC9saT4KIDxsaT48Y29kZT57Y2dmYl9tZX08L2NvZGU+IFdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgRmFjZWJvb2sgVXNlciB0aGF0IGhlIGhhcyBhbGxvd2VkIHlvdSB0byBzZWUuPC9saT4KIDxsaT48Y29kZT57Y2dmYl9hcGl9PC9jb2RlPiBDYW4gbWFrZSBhbnkgcmVxdWVzdCB0byB0aGUgamF2YXNjcmlwdCBHUkFQSCBBUEkuPC9saT4KIDxsaT48Y29kZT57Y2dmYl9hcHB9PC9jb2RlPiBXaWxsIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGZhY2Vib29rIGFwcGxpY2F0aW9uLjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJfc2VuZH08L2NvZGU+IENhbiBzZW5kIGEgY29tbWFuZCB0byB0aGUgRmFjZWJvb2sgR3JhcGggQVBJIHZpYSBQT1NULjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJfd2FsbHBvc3R9PC9jb2RlPiBVc2VzIHRoZSBGYWNlYm9vayBSRVNUIEFQSSB0byBjcmVhdGUgYSB3YWxsIHBvc3QgZm9yIHRoZSBjdXJyZW50IEZhY2Vib29rIFVzZXIuPC9saT4KIDxsaT48Y29kZT57Y2dmYl9zdGF0dXN9PC9jb2RlPiBVc2VzIHRoZSBGYWNlYm9vayBSRVNUIEFQSSB0byBjcmVhdGUgYSBzdGF0dXMgcG9zdCBmb3IgdGhlIGN1cnJlbnQgRmFjZWJvb2sgVXNlci48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX2ZxbH08L2NvZGU+IFVzaW5nIHRoZSBGYWNlYm9vayBSRVNUIEFQSSBzZW5kIHRvIHNlbmQgYW4gRlFMIHF1ZXJ5LjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJfZnFsX211bHRpfTwvY29kZT4gVXNpbmcgdGhlIEZhY2Vib29rIFJFU1QgQVBJIHNlbmQgdG8gbXVsdGlwbGUgRlFMIHF1ZXJpZXMgaW4gYSBzaW5nbGUgcmVxdWVzdCA8ZW0+KGJlY2F1c2UgRlFMIGRvZXMgbm90IHN1cHBvcnQgam9pbnMpPC9lbT4uPC9saT4KIDxsaT48Y29kZT57Y2dmYnVzZXJkYXRhX2dldH08L2NvZGU+IFdpbGwgcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIHlvdSBoYXZlIHN0b3JlZCBhYm91dCB0aGlzIHVzZXIgZnJvbSB0aGUgZGF0YWJhc2UuPC9saT4KIDxsaT48Y29kZT57Y2dmYnVzZXJkYXRhX3NldH08L2NvZGU+IFdpbGwgc3RvcmUgc2VsZWN0ZWQgaW5mb3JtYXRpb24gZm9yIHRoaXMgZmFjZWJvb2sgdXNlciBpbnRvIHRoZSBkYXRhYmFzZS48L2xpPgogPGxpPjxjb2RlPntjZ2ZidXNlcmRhdGFfZXJhc2V9PC9jb2RlPiBXaWxsIGVyYXNlIGEgcG9ydGlvbiBvZiB0aGUgZ2F0aGVyZWQgaW5mb3JtYXRpb24gZm9yIHRoaXMgZmFjZWJvb2sgdXNlciBmcm9tIHRoZSBkYXRhYmFzZS48L2xpPgogPGxpPjxjb2RlPntjZ2ZidXNlcmRhdGFfZXJhc2V1c2VyfTwvY29kZT4gV2lsbCBlcmFzZSBhbGwgaW5mb3JtYXRpb24gZm9yIHRoaXMgZmFjZWJvb2sgdXNlciBmcm9tIHRoZSBkYXRhYmFzZS48L2xpPgogPGxpPjxjb2RlPntjZ2ZidXNlcmRhdGFfYXBwZnJpZW5kc308L2NvZGU+IFdpbGwgcmV0cmlldmUgYSBsaXN0IG9mIHRoZSB1c2VycyBmcmllbmRzIHRoYXQgYWxzbyBoYXZlIGluZm9ybWF0aW9uIGluIHRoZSBkYXRhYmFzZS48L2xpPgo8L3VsPjxici8+CiA8cD5DcmVhdGluZyBhIGZhY2Vib29rIGFwcGxpY2F0aW9uIGludm9sdmVzIG51bWVyb3VzIHN0ZXBzOjwvcD4KPHVsPgogPGxpPjEuICBDcmVhdGUgYSBDTVNNUyBwYWdlIHRlbXBsYXRlIHRoYXQgZGlzcGxheXMgY29ycmVjdGx5IGluIGEgd2lkdGggZm8gNzYwIHBpeGVscy4gIChGb3IgZnV0dXJlIHJlZmVyZW5jZSBJIHdpbGwgcmVmZXIgdG8gdGhpcyB0ZW1wbGF0ZSBhcyB0aGUgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+ZmJfY2FudmFzPC9zcGFuPiB0ZW1wbGF0ZS4pPC9saT4KIDxsaT4yLiAgQ3JlYXRlIGEgbmV3IHBhZ2UgaW4geW91ciBDTVNNUyBwYWdlIGhpZXJhcmNoeSB0aGF0IHVzZXMgdGhlIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPmZiX2NhbnZhczwvc3Bhbj4gdGVtcGxhdGUuICBGb3IgcmVmZXJlbmNlIHB1cnBvc2VzIGxldHMgY2FsbCB0aGlzIHRoZSA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5teV9hcHA8L3NwYW4+IHBhZ2UuPC9saT4KIDxsaT4zLiAgUmVnaXN0ZXJpbmcgYSBmYWNlYm9vayBhcHBsaWNhdGlvbiBhdDogPGEgaHJlZj0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vZGV2ZWxvcGVycy9jcmVhdGVhcHAucGhwIj5odHRwOi8vd3d3LmZhY2Vib29rLmNvbS9kZXZlbG9wZXJzL2NyZWF0ZWFwcC5waHA8L2E+PC9saT4KIDxsaT40LiAgU2V0dGluZyB1cCB5b3VyIGZhY2Vib29rIGFwcGxpY2F0aW9uIGZvciBjb21wYXRpYmlsaXR5LCBhbmQgZWFzeSBpbnRlZ3JhdGlvbiB3aXRoIENNU01TLiAgSSB3aWxsIG5vdCBnbyB0aHJvdWdoIHRoZSBkZXRhaWwgb2YgYWxsIG9mIHRoZSBzZXR0aW5ncyB5b3Ugc2hvdWxkIGNoYW5nZS4gIEhvd2V2ZXIgeW91IHNob3VsZCBnaXZlIHlvdXIgY2FudmFzIHBhZ2UgYSBuYW1lLCBhbmQgc3BlY2lmeSB0aGUgZnVsbCB1cmwgdG8gdGhlIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPm15X2FwcDwvc3Bhbj4gcGFnZSB0aGF0IHdpbGwgcmVwcmVzZW50IHlvdXIgY2FudmFzIHBhZ2UuICBZb3UgYWxzbyBzaG91bGQgc3BlY2lmeSB0aGUgJnF1b3Q7Q2FudmFzIFR5cGUmcXVvdDsgYXMgJnF1b3Q7SWZyYW1lJnF1b3Q7PGJyLz48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEl0IGFwcGVhcnMgdGhhdCBmYWNlYm9vayByZXF1aXJlcyBhICZxdW90O2ZvbGRlciZxdW90OyBiZSBzcGVjaWZpZWQgZm9yIHRoZSBDYW52YXMgVVJMLCB5b3UgbWF5IGhhdmUgdG8gZWRpdCB5b3VyIHNldHRpbmdzIGluIHRoZSBjb25maWcucGhwIGZpbGUgKGkuZSBlbmFibGUgcHJldHR5IHVybHMsIGFuZCByZW1vdmUgYSBwYWdlIGV4dGVuc2lvbikgZm9yIGZhY2Vib29rIHRvIGJlIGhhcHB5LjwvbGk+CiA8bGk+NS4gIEluIHRoZSAmcXVvdDtDYWxndXlzIEZhY2Vib29rIFRvb2xraXQmcXVvdDsgYWRtaW4gcGFuZWwgZmlsbCBpbiB0aGUgJnF1b3Q7QXBwbGljYXRpb24gSUQmcXVvdDsgYW5kIHRoZSAmcXVvdDtBcHAgU2VjcmV0JnF1b3Q7IGFzIHNwZWNpZmllZCBieSBmYWNlYm9vay4gIFlvdSBzaG91bGQgYWxzbyBzZWxlY3QgdGhlIHBlcm1pc3Npb25zIHRoYXQgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG5lZWQgYXMgZGVmaW5lZCA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9hdXRoZW50aWNhdGlvbi9wZXJtaXNzaW9ucyI+aGVyZTwvYT4uPGJyLz48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEl0IGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgcGVybWlzc2lvbnMgeW91IHNlbGVjdCB0byBhcyBsaXR0bGUgYXMgcG9zc2libGUgaW4gb3JkZXIgdG8gZ2V0IHdpZGVyIGFjY2VwdGFuY2UgZm9yIHlvdXIgYXBwbGljYXRpb24uPC9saT4KIDxsaT42LiAgV2hlbiBlZGl0aW5nIHlvdXIgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+ZmJfY2FudmFzPC9zcGFuPiBwYWdlIHRlbXBsYXRlLCBhZGQgdGhlIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2luaXR9PC9zcGFuPiB0YWcgZGlyZWN0bHkgYWZ0ZXIgdGhlIG9wZW5pbmcgJmx0O2JvZHkmZ3Q7IHRhZy4gICBZb3UgbWF5IGFsc28gYWRkIHRoZSA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9sb2dpbn08L3NwYW4+IHRhZyBpbnRvIGFuIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgdGhlIHRlbXBsYXRlIChpbiB0aGUgaGVhZGVyIGJhciBvciBhIHNpZGViYXIgZXRjKS4gIFRoaXMgd2lsbCBib3RoIGluaXRpYWxpemUgdGhlIEZhY2Vib29rIEFQSSBhbmQgcHJvdmlkZSBhIGxvZ2luIGJ1dHRvbi4gIFdoZW4gdmlzaXRvcnMgY2xpY2sgb24gdGhlIGxvZ2luIGJ1dHRvbiB0aGV5IHdpbGwgYmUgYXNrZWQgdG8gYXBwcm92ZSB0aGUgcGVybWlzc2lvbnMgeW91IGhhdmUgcmVxdWVzdGVkLjwvbGk+CiA8bGk+Ny4gIE5vdyB3ZSBhcmUgcmVhZHkgdG8gc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb25hbGl0eSBmb3Igb3VyIGZhY2Vib29rIGFwcGxpY2F0aW9uLiAgWW91IHdpbGwgdXNlIGEgY29tYmluYXRpb24gb2Ygc21hcnR5IGxvZ2ljLCB0aGUgcGx1Z2lucyBwcm92aWRlZCBiZWxvdywgYW5kIHlvdXIgb3duIGNvZGUsIG9yIG90aGVyIG1vZHVsZXMgdG8gYnVpbGQgeW91ciBhcHBsaWNhdGlvbi4gQSBzbWFsbCBleGFtcGxlIGFwcGxpY2F0aW9uIGlzIGJlbG93LjwvbGk+CjwvdWw+PGJyLz4KCjxoMz5TYW1wbGUgQXBwbGljYXRpb246PC9oMz4KPHA+VGhlIHNhbXBsZSBhcHBsaWNhdGlvbiBpbGx1c3RyYXRlZCBiZWxvdyBuZWVkcyB0aGUgcHVibGlzaF9zdHJlYW0sdXNlcl9sb2NhdGlvbiwgYW5kIGZyaWVuZHNfbG9jYXRpb24gcGVybWlzc2lvbnMuICBZb3UgY2FuIHNlbGVjdCB0aGVzZSBpbiB0aGUgYWRtaW5pc3RyYXRpb24gcGFuZWwgZm9yIHRoZSBtb2R1bGUuICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gcmVnaXN0YXIgYSBmYWNlYm9vayBhcHBsaWNhdGlvbiBhbmQgZmlsbCBpbiB5b3VyIGFwcGxpY2F0aW9uIGlkLCBhbmQgYXBwIHNlY3JldCBpbnRvIHRoZSBhZG1pbiBwYW5lbC48L3A+CjxwcmU+CjxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2luaXR9PC9zcGFuPnsqIGluaXRpYWxpemUgZmFjZWJvb2sgamF2YXNjcmlwdCBTREsgKn0KPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfbG9naW59PC9zcGFuPnsqIHByb3ZpZGUgYSBsb2dpbiBidXR0b24gdG8gZmFjZWJvb2sgKn0gPGJyLz4KPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfdWlkIGFzc2lnbj0nZmJfdWlkJ308L3NwYW4+eyogZ2V0IHRoZSBmYWNlYm9vayB1c2VyIGlkICp9CntpZiAkZmJfdWlkfQogIHsqIHVzZXIgaXMgbG9nZ2VkIGluICp9CgogIHsqIGdldCBoaXMgb3IgaGVyIGZyaWVuZHMgZnJpZW5kcyBsaXN0ICp9CiAgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfYXBpIGNhbGw9Jy9tZS9mcmllbmRzJyBhc3NpZ249J2ZyaWVuZHMnfTwvc3Bhbj4KCiAgeyogY3JlYXRlIGFuIEZRTCBxdWVyeSAqfQogIHtjYXB0dXJlIGFzc2lnbj0mcXVvdDtmcWwmcXVvdDt9c2VsZWN0IG5hbWUsIGJpcnRoZGF5X2RhdGUsIGN1cnJlbnRfbG9jYXRpb24sIHNleCwgcGljX3NxdWFyZSBmcm9tIHVzZXIgd2hlcmUgdWlkIElOIChTRUxFQ1QgdWlkMiBGUk9NIGZyaWVuZCBXSEVSRSB1aWQxPXskbWUuaWR9KXsvY2FwdHVyZX0KCiAgeyogZXhlY3V0ZSBhbiBGUUwgcXVlcnkgKn0KICA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9mcWwgZnFsPSRmcWwgYXNzaWduPSdyZXMnfTwvc3Bhbj4KCiAgeyogcHJvY2VzcyB0aGUgcmVzdWx0cyBmcm9tIHRoZSBxdWVyeSAqfQogIHtpZiBpc19hcnJheSgkcmVzKX0KICAgICB7YXNzaWduIHZhcj0mcXVvdDtudW1fcG9pbnRzJnF1b3Q7IHZhbHVlPTB9CiAgICAgICAKICAgICB7KiBmb3IgZWFjaCBmcmllbmQgKn0KICAgICB7Zm9yZWFjaCBmcm9tPSRyZXMgaXRlbT0mcXVvdDtmcmllbmQmcXVvdDt9CgogICAgIHsqIGlmIHdlIGhhdmUgYSBsb2NhdGlvbiAqfQogICAgIHtpZiBpc3NldCgkZnJpZW5kLmN1cnJlbnRfbG9jYXRpb24pfQoKICAgICAgICB7KiBidWlsZCBhIGxvY2F0aW9uIHN0cmluZyAqfQogICAgICAgIHthc3NpZ24gdmFyPSZxdW90O251bV9wb2ludHMmcXVvdDsgdmFsdWU9ImAkbnVtX3BvaW50cysxYCJ9CiAgICAgICAge2NhcHR1cmUgYXNzaWduPSZxdW90O2xvYyZxdW90O317c3RyaXB9CiAgICAgICAgICAge2lmICRmcmllbmQuY3VycmVudF9sb2NhdGlvbi5jb3VudHJ5ID09ICZxdW90O0NhbmFkYSZxdW90OyBvciAkZnJpZW5kLmN1cnJlbnRfbG9jYXRpb24uY291bnRyeSA9PSAmcXVvdDtVbml0ZWQgU3RhdGVzJnF1b3Q7fQogICAgICAgICAgICAgICB7JGZyaWVuZC5jdXJyZW50X2xvY2F0aW9uLmNpdHl9LCB7JGZyaWVuZC5jdXJyZW50X2xvY2F0aW9uLnN0YXRlfSB7JGZyaWVuZC5jdXJyZW50X2xvY2F0aW9uLmNvdW50cnl9CiAgICAgICAgICAge2Vsc2V9CiAgICAgICAgICAgICAgIHskZnJpZW5kLmN1cnJlbnRfbG9jYXRpb24uY2l0eX0geyRmcmllbmQuY3VycmVudF9sb2NhdGlvbi5jb3VudHJ5fQogICAgICAgICAgIHsvaWZ9CiAgICAgICAgey9zdHJpcH17L2NhcHR1cmV9CgogICAgICAgIHsqIGFkZCBhIHBvaW50IHRvIG91ciBtYXAgKn0KICAgICAgICB7Y2dnbV9hZGRfZHlucG9pbnQgbmFtZT0kZnJpZW5kLm5hbWUgYWRkcmVzcz0kbG9jIGRlc2M9JGZyaWVuZC5zZXh9CiAgICAgey9pZn0KICB7L2ZvcmVhY2h9CgogIHtpZiAkbnVtX3BvaW50cyBndCAwfQogICAgIHsqIGRpc3BsYXkgdGhlIG1hcCAqfQogICAgIHtDR0dvb2dsZU1hcHN9CiAgey9pZn0KCiAgey9pZn0Key9pZn08L3ByZT4KCjxoMz5TbWFydHkgRnVuY3Rpb24gUmVmZXJlbmNlOjwvaDM+Cjx1bD4KIDxsaT5Tb2NpYWwgUGx1Z2luczoKIDx1bD4KIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9saWtlIFtwYXJhbXNdXTwvY29kZT4KIDxwPkNyZWF0ZSBhICZxdW90O0xpa2UmcXVvdDsgQnV0dG9uIGZvciBhIFVSTC48YnIvPlBhcmFtZXRlcnM6CiAgIDx1bD4KICAgPGxpPmhyZWYgLSAoc3RyaW5nKSBUaGUgVVJMIHRvIGFsbG93IHBlb3BsZSB0byBsaWtlLiAgKGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgcGFnZSBVUkwuKTwvbGk+CiAgIDxsaT5sYXlvdXQgLSAoc3RyaW5nKSBUaGUgbGF5b3V0IG9mIGJ1dHRvbi4gIFBvc3NpYmxlIHZhbHVlcyBhcmUgc3RhbmRhcmQsYnV0dG9uX2NvdW50LGJveF9jb3VudC48L2xpPgogICA8bGk+c2hvd19mYWNlcyAtIChib29sZWFuKSBXZXRoZXIgdG8gc2hvdyBmYWNlcyBvZiB0aGUgb3RoZXJzIHRoYXQgaGF2ZSBsaWtlZCB0aGUgaXRlbS48L2xpPgogICA8bGk+YWN0aW9uIC0gKHN0cmluZykgVGhlIGJlYXZpb3VyIG9mIHRoZSBidXR0b24sIFBvc3NpYmxlIHZhbHVlcyBhcmUgbGlrZSxyZWNvbW1lbmQuPC9saT4KICAgPGxpPndpZHRoIC0gKGludCkgVGhlIHdpZHRoIG9mIHRoZSBsaWtlIGJ1dHRvbiBpbiBwaXhlbHMuPC9saT4KICAgPGxpPmZvbnQgLSAoc3RyaW5nKSBUaGUgc3RyaW5nIHRvIHVzZSBmb3IgdGhlIGZvcm0gb3IgZGlzcGxheS4gIFZhbHVlcyBhcmUgYXJpYWwsbHVjaWRlIGdyYW5kZSxzZWdvZSB1bCx0YWhvbWEsdmVyZGFuYTwvbGk+CiAgIDxsaT5jb2xvcnNjaGVtZSAtIChzdHJpbmcpIFRoZSBjb2xvciBzY2hlbWUgZm9yIHRoZSBmb3JtLiAgVmFsdWVzIGFyZSBsaWdodCxkYXJrPC9saT4KICAgPGxpPnJlZiAtIChzdHJpbmcpIEFuIG9wdGlvbmFsIHJlZmVyZW5jZSB2YWx1ZSB0byB1c2UgZm9yIHN0YXRpc3RpY3MgcHVycG9zZXMuPC9saT4KICAgPGxpPmFzc2lnbiAtIChzdHJpbmcpICBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICA8L3VsPgogICA8L3A+PGJyLz4KIDwvbGk+ICAgICAgCgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2NvbW1lbnRzIFtwYXJhbXNdfTwvY29kZT4KIDxwPkNyZWF0ZSBhIGZvcm0gYWxsb3dpbmcgZmFjZWJvb2sgdXNlcnMgdG8gbGVhdmUgY29tbWVudHMgb24gYSBwYWdlLCBvciBvbiBhbiBpdGVtLjxici8+UGFyYW1ldGVyczoKIDx1bD4KICAgPGxpPnVuaXF1ZWlkIC0gKHN0cmluZykgQSB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UgdG8gaWRlbnRpZnkgdGhlIGl0ZW0gdGhhdCBpcyBiZWluZyBjb21tZW50ZWQgb24uIChkZWZhdWx0IGlzIGEgaGFzaCBvZiB0aGUgY3VycmVudCBwYWdlIHVybCkuPC9saT4KICAgPGxpPndpZHRoIC0gKGludCkgVGhlIG1heGltdW0gd2lkdGggb2YgdGhlIGZvcm0gaW4gcGl4ZWxzLiAoZGVmYXVsdCBpcyA0MjUpPC9saT4KICAgPGxpPm5jb21tZW50cyAtIChpbnQpIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb21tZW50cyB0byBkaXNwbGF5IGF0IG9uZSB0aW1lLiAgKGRlZmF1bHQgaXMgMTApPC9saT4KICAgPGxpPnB1Ymxpc2ggLSAoYm9vbGVhbikgV2V0aGVyIHRoZSAmcXVvdDtwdWJsaWMgY29tbWVudCZxdW90OyBjaGVja2JveCBzaG91bGQgYmUgZGlzcGxheWVkLjwvbGk+CiAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDwvbGk+Cgo8L3VsPgo8L2xpPgoKPGxpPk9wZW5HcmFwaCBQbHVnaW5zOgo8dWw+CiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX29nX3ZhbHVlIG5hbWU9Jmx0O3N0cmluZyZndDsgdmFsdWU9Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogIDxwPkNyZWF0ZSBhIG5hbWUvdmFsdWUgcGFpciB0byBvdXRwdXQgd2l0aCBpbmZvcm1hdGlvbiBmb3IgdGhlIE9wZW5HcmFwaCBBUEkuICBUaGVzZSBuYW1lL3ZhbHVlIHBhaXJzIHdpbGwgYmUgY29sbGVjdGVkIGFuZCBvdXRwdXQgd2l0aCB0aGUge2NnZmJfb2dfbWV0YX0gdGFnLiAgSWYgdGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBzZXQsIHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBvdmVyd3JpdGUgaXRzIHZhbHVlLiBUaGlzIHRhZyBpcyBub3JtYWxseSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGJvZHkgb2YgYSBwYWdlIHRlbXBsYXRlICh1c2luZyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBjb25kaXRpb25zIGluIENNU01TKS48YnIvPlBhcmFtZXRlcnM6CiAgIDx1bD4KICAgICAgPGxpPm5hbWUgLSAoc3RyaW5nKSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuPC9saT4KICAgICAgPGxpPnZhbHVlIC0gKHN0cmluZykgVGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS48L2xpPgogICA8L3VsPgogIDwvcD48YnIvPgogIDwvbGk+CgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9vZ190aXRsZSB0aXRsZT0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiAgPHA+U2V0IHRoZSBvZzp0aXRsZSBhdHRyaWJ1dGUsIHRoaXMgcGx1Z2luIGlzIGVzc2VudGlhbGx5IGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiB0aGUge2NnZmJfb2dfdmFsdWV9IHBsdWdpbi48YnIvPlBhcmFtZXRlcnM6CiAgPHVsPgogIDxsaT50aXRsZSAtIChzdHJpbmcpIFRoZSB0aXRsZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGRlc2NyaWJlZC48L2xpPgogIDwvdWw+CiAgPC9wPjxici8+CiAgPC9saT4KCiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX29nX3R5cGUgdHlwZT0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiAgPHA+U2V0IHRoZSBvZzp0eXBlIGF0dHJpYnV0ZSwgdGhpcyBwbHVnaW4gaXMgZXNzZW50aWFsbHkgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIHRoZSB7Y2dmYl9vZ192YWx1ZX0gcGx1Z2luLjxici8+UGFyYW1ldGVyczoKICA8dWw+CiAgPGxpPnR5cGUgLSAoc3RyaW5nKSBUaGUgb2JqZWN0IHR5cGUuICBPbmUgb2Y6IGFjdGl2aXR5LCBzcG9ydCwgYmFyLCBjb21wYW55LCBjYWZlLCBob3RlbCwgcmVzdGFyYXVudCwgY2F1c2UsIHNwb3J0c19sZWFndWUsIHNwb3J0c190ZWFtLCBiYW5kLCBnb3Zlcm5tZW50LCBub25fcHJvZml0LCBzY2hvb2wsIHVuaXZlcnNpdHksIGFjdG9yLCBhdGhsZXRlLCBhdXRob3IsIGRpcmVjdG9yLCBtdXNpY2lhbiwgcG9saXRpY2lhbiwgcHVibGljX2ZpZ3VyZSwgY2l0eSwgY291bnRyeSwgbGFuZG1hcmssIHN0YXRlX3Byb3ZpbmNlLCBhbGJ1bSwgZHJpbmssIGZvb2QsIGdhbWUsIHByb2R1Y3QsIHNvbmcsIG1vdmllLCB0dl9zaG93LCBibG9nLCB3ZWJzaXRlLCBhcnRpY2xlPC9saT4KICA8L3VsPgogIDwvcD48YnIvPgogIDwvbGk+CgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9vZ191cmwgdXJsPSZsdDtzdHJpbmcmZ3Q7fTwvY29kZT4KICA8cD5TZXQgdGhlIGNhbm9uaWNhbCB1cmwgdG8gdGhlIG9iamVjdCAob2c6dXJsKS4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyB0aGUgY3VycmVudCBwYWdlIHVybC48L3A+CiAgPHVsPgogIDxsaT51cmwgLSAoc3RyaW5nKSBUaGUgY2Fub25pY2FsIFVSTCB0byB0aGUgb2JqZWN0LjwvbGk+CiAgPC91bD4KICA8L3A+PGJyLz4KICA8L2xpPgoKICA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfb2dfaW1hZ2UgaW1hZ2U9Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogIDxwPlNldCB0aGUgdXJsIG9mIGFuIGltYWdlIHdoaWNoIHNob3VsZCByZXByZXNlbnQgdGhlIG9iamVjdCBpbiB0aGUgZ3JhcGguPC9wPgogIDx1bD4KICA8bGk+aW1hZ2UgLSAoc3RyaW5nKSBBIFVSTCB0byBhbiBpbWFnZSAoSlBHLFBORywgYW5kIEdJRiBhcmUgc3VwcG9ydGVkKQogIDwvdWw+CiAgPC9wPjxici8+CiAgPC9saT4KCiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX29nX3NpdGVuYW1lIHNpdGVuYW1lPSZsdDtzdHJpbmcmZ3Q7fTwvY29kZT4KICA8cD5TZXQgYSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciB5b3VyIHdlYnNpdGUuICAgaS5lOiAmcXVvdDtGcmVkcyBQcm9kdWN0cyZxdW90Oy4gIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCBmb3IgdGhpcyBwcm9wZXJ0eSB0aGUgY3VycmVudCB3ZWIgc2l0ZSBuYW1lIHdpbGwgYmUgdXNlZC4uCiAgPHVsPgogIDxsaT5zaXRlbmFtZSAtIChzdHJpbmcpIFRoZSBTaXRlIG5hbWUuPC9saT4KICA8L3VsPgogIDwvcD48YnIvPgogIDwvbGk+CgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9vZ19kZXNjIGRlc2M9Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogIDxwPihvZzpkZXNjcmlwdGlvbikgU2V0IGEgYnJpZWYgZGVzY3JpcHRpb24gZm9yIHRoZSBvYmplY3QuICBPbmUgb3IgdHdvIHNlbnRlbmNlcy4KICA8dWw+CiAgPGxpPmRlc2MgLSAoc3RyaW5nKSBUaGUgRGVzY3JpcHRpb24uCiAgPC91bD4KICA8L3A+PGJyLz4KICA8L2xpPgoKICA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfb2dfYWRtaW5zIGFkbWlucz0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiAgPHA+KGZiOmFkbWlucykgU2V0IHRoZSBsaXN0IG9mIGZhY2Vib29rIGFkbWlucyBmb3IgdGhpcyBvYmplY3QuCiAgPHVsPgogIDxsaT5hZG1pbnMgLSAoc3RyaW5nKSBBIGNvbW1hIHNhcGFyYXRlZCBsaXN0IG9mIGZhY2Vib29rIHVzZXIgaWRzIG9yIGEgIEZhY2Vib29rIFBsYXRmb3JtIGFwcGxpY2F0aW9uIGlkLgogIDwvdWw+CiAgPC9wPjxici8+CiAgPC9saT4KCiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX21ldGEgW3BhcmFtc119PC9jb2RlPgogIDxwPlRoaXMgcGx1Z2luIHdpbGwgZ2F0aGVyIGFsbCBvZiB0aGUgcHJlc2V0IE9wZW5HcmFwaCB2YXJpYWJsZXMsIGFwcGx5IHNvbWUgaW50ZWxsaWdlbnQgZGVmYXVsdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMgbm90IHNwZWNpZmllZCwgYW5kIGdlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSBtZXRhIHRhZ3MuICBUaGlzIHBsdWdpbiBpcyB0eXBpY2FsbHkgY2FsbGVkIHdpdGhpbiB0aGUgaGVhZCBzZWN0aW9uIG9mIHRoZSBwYWdlIHRlbXBsYXRlLiAgVGhlIG90aGVyIGNnZmJfb2cqIHBsdWdpbnMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgcGFnZSB0ZW1wbGF0ZSAod2l0aGVyIHdpdGhpbiB0aGUgcGFnZSB0ZW1wbGF0ZSBpdHNlbGYsIG9yIGluc2lkZSBvZiBhIGNvbnRlbnQgYmxvY2ssIG9yIGV2ZW4gaW5zaWRlIG9mIGEgR0NCIG9yIG1vZHVsZSB0ZW1wbGF0ZS4gIFRoZW4gYmVjYXVzZSAoYnkgZGVmYXVsdCkgcHJvY2Vzc193aG9sZV90ZW1wbGF0ZSBpcyBGQUxTRSBpbiB0aGUgY29uZmlnLnBocCBmaWxlIG9mIENNU01TIHRoaXMgZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIEFGVEVSIHRoZSBib2R5IG9mIHRoZSB0ZW1wbGF0ZS48YnIvPlBhcmFtZXRlcnM6CiAgPHVsPgogIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSBBIHNtYXJ0eSB2YXJpYWJsZSBuYW1lIHRvIGFzc2lnbiB0aGUgb3V0cHV0IHRvLgogIDwvdWw+CiAgPC9wPjxici8+CiAgPC9saT4KCjwvdWw+CjwvbGk+Cgo8bGk+QXBwbGljYXRpb24gQnVpbGRpbmcgUGx1Z2luczoKPHVsPgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2luaXQgW3BhcmFtc119PC9jb2RlPgogICA8cD5Jbml0aWFsaXplcyB0aGUgRmFjZWJvb2sgSmF2YXNjcmlwdCBBUEk8YnIvPgogICAgICAgUGFyYW1ldGVyczoKICAgICAgIDx1bD4KICAgICAgIDxsaT5hc3luYyAtIChib29sZWFuKSBFbmFibGUgQXN5bmNocm9ub3VzIEFQSSBJbml0aWFsaXphdGlvbiAoZGVmYXVsdCA9IGZhbHNlKTwvbGk+CiAgICAgICA8bGk+YXNzaWduIC0gKHN0cmluZykgIEFzc2lnbiB0aGUgb3V0cHV0IHRvIGEgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgICA8L3VsPgogICA8L3A+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX3VpZH08L2NvZGU+CiA8cD5SZXR1cm4gdGhlIFVJRCAgb2YgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gRmFjZWJvb2sgVXNlci48YnIvPlBhcmFtZXRlcnM6CiA8dWw+CiAgICA8bGk+YXNzaWduIC0gKHN0cmluZykgIEFzc2lnbiB0aGUgb3V0cHV0IHRvIGEgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiA8L3VsPgogPC9wPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9tZSBhc3NpZ249Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogPHA+UmV0dXJuIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgZmFjZWJvb2sgdXNlciBoYXMgc2hhcmVkIHdpdGggdGhlIGFwcGxpY2F0aW9uLjxici8+UGFyYW1ldGVyczoKIDx1bD4KICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDxwcmU+RXhhbXBsZTogPGNvZGU+e2NnZmJfbWUgYXNzaWduPSZxdW90O21lJnF1b3Q7fXskbWV8QHByaW50X3J9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9hcGkgY2FsbD0mbHQ7c3RyaW5nJmd0OyBhc3NpZ249Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogPHA+UGVyZm9ybSBhIEdFVCByZXF1ZXN0IHRvIHRoZSBGYWNlYm9vayBHcmFwaCBBUEksIGFuZCBhc3NpZ24gdGhlIHJlc3VsdHMgdG8gYSBzbWFydHkgdmFyaWFibGUuPGJyLz5QYXJhbWV0ZXJzOgogPHVsPgogICAgPGxpPmNhbGwgLSAoc3RyaW5nKSAgVGhlIGZhY2Vib29rIEdSQVBIIEFQSSBtZXRob2QgdG8gY2FsbC48L2xpPgogICAgPGxpPmFzc2lnbiAtIChzdHJpbmcpICBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYl9hcGkgY2FsbD0mcXVvdDsvbWUvZnJpZW5kcyZxdW90OyBhc3NpZ249JnF1b3Q7ZnJpZW5kcyZxdW90O317JGZyaWVuZHN8QHByaW50X3J9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9zZW5kIHVybD0mbHQ7c3RyaW5nJmd0OyBhc3NpZ249Jmx0O3N0cmluZyZndDsgLi4ufTwvY29kZT4KIDxwPlBlcmZvcm1hIFBPU1QgcmVxdWVzdCB0byB0aGUgRmFjZWJvb2sgR3JhcGggQVBJIHRvIENyZWF0ZSBhIG5ldyByZWNvcmQgKGV2ZW50LCBsaWtlLCBpbWFnZSwgZXRjKSB3aXRoaW4gRmFjZWJvb2suPHU+Tm90ZTo8L3U+IHRoaXMgaXMgYSBub24tc3RhbmRhcmQgc21hcnR5IHBsdWdpbiBhcyBpdCBpcyBub3QgYSBkaXNwbGF5IGxldmVsIGVsZW1lbnQsIGluc3RlYWQgaXQgbWF5IG5vdCByZXR1cm4gYW55IG91dHB1dCBhdCBhbGwuICBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBjb25kaXRpb25hbHMgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IHVzZXIgYWN0aW9ucy48YnIvPlBhcmFtZXRlcnM6CiA8dWw+CiAgICA8bGk+dXJpIC0gKHN0cmluZykgIFRoZSBHcmFwaCBBUEkgdG8gcHV0IHRvLi48L2xpPgogICAgPGxpPmFzc2lnbiAtIChzdHJpbmcpICBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgPGxpPjxlbT5PdGhlciBQYXJhbWV0ZXJzPC9saT4gLSAobWl4ZWQpIFNwZWNpZnkgdGhlIGRhdGEgdG8gc2VuZCB0byB0aGUgZmFjZWJvb2sgZ3JhcGggQVBJLgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOjxici8+PGNvZGU+e2lmIGlzc2V0KCRzbWFydHkuZ2V0LnRlbGxfbXlfZnJpZW5kcyl9PGJyLz57Y2dmYl9hcGkgY2FsbD0mcXVvdDsvbWUvZnJpZW5kcyZxdW90OyBhc3NpZ249JnF1b3Q7ZnJpZW5kcyZxdW90O308YnIvPntmb3JlYWNoIGZyb209JGZyaWVuZHMgaXRlbT0mcXVvdDtmcmllbmQmcXVvdDt9PGJyLz57Y2FwdHVyZSBhc3NpZ249dXJpfXskZnJpZW5kfS9saW5rc3svY2FwdHVyZX08YnIvPjxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47Ij57Y2dmYl9zZW5kIHVyaT0kdXJpIGxpbms9JnF1b3Q7aHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZyZxdW90OyBtZXNzYWdlPSZxdW90O0NoZWNrIG91dCB0aGlzIGF3YXJkIHdpbm5pbmcgQ01TIFBhY2thZ2UmcXVvdDt9PC9zcGFuPjxici8+ey9mb3JlYWNofTxici8+ey9pZn08L2NvZGU+PC9wcmU+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX3dhbGxwb3N0IG1zZz0mbHQ7c3RyaW5nJmd0OyBuYW1lPSZsdDtzdHJpbmcmZ3Q7IGhyZWY9Jmx0O3N0cmluZyZndDsgLi4ufTwvY29kZT4KIDxwPkNyZWF0ZSBhIHdhbGwgcG9zdCBvbiBhIHVzZXJzIHdhbGwuIEFsbG93cyB1cCB0byA1IGltYWdlcywgYWRkaXRpb25hbCBsaW5rcywgYW5kIGFsbG93cyBhc3NvY2lhdGluZyBkYXRhIHdpdGggdGhlIHdhbGwgcG9zdCBmb3IgdHJhY2tpbmcgcHVycG9zZXMuICBXYWxsIHBvc3RzIGFsbG93IGZvciBhIHNpbmdsZSAmcXVvdDthdHRhY2htZW50JnF1b3Q7IHdpdGggYW4gaW1hZ2UsIGEgdmlkZW8sIGV0Yy4gYW5kIHVwIHRvIDUgaW1hZ2VzIHdpdGggYXNzb2NpYXRlZCBVUkxTLjxici8+UGFyYW1ldGVyczoKIDx1bD4KICAgIDxsaT50byAtIChzdHJpbmcpIFRoZSBGYWNlYm9vayBVSUQgdG8gc2VuZCB0aGUgd2FsbCBwb3N0IHRvLiAgKGRlZmF1bHQgaXMgJnF1b3Q7bWUmcXVvdDspPC9saT4KICAgIDxsaT5tc2cgLSAoc3RyaW5nKSBUaGUgbWVzc2FnZSB0byBzZW5kIChrZWVwIGl0IHRvIDE0MCBjaGFyYWN0ZXJzIG9yIGxlc3MpPC9saT4KICAgIDxsaT5uYW1lIC0gKHN0cmluZykgVGhlIG5hbWUgb2YgYXR0YWNobWVudC48L2xpPiAgCiAgICA8bGk+aHJlZiAtIChzdHJpbmcpIEEgVVJMIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBhdHRhY2htZW50PC9saT4KICAgIDxsaT5jYXB0aW9uIC0gKHN0cmluZykgQSBjYXB0aW9uIGZvciB0aGUgYXR0YWNobWVudDwvbGk+CiAgICA8bGk+ZGVzY3JpcHRpb24gLSAoc3RyaW5nKSBBIGRlc2NyaXB0aW9uIGZvciB0aGUgYXR0YWNobWVudC48L2xpPgogICAgPGxpPnhpZCAtIChzdHJpbmcpIGNvbW1lbnRzIHhpZDwvbGk+CiAgICA8bGk+aW1hZ2VzIC0gKHN0cmluZykgaGFzaCBvZiBzcmM9aHJlZiBwYWlycyBwcm92aWRpbmcgdXAgdG8gNSBpbWFnZXMgZm9yIHRoZSBwb3N0IGF0dGFjaG1lbnQuCiAgICA8bGk+aW1hZ2UxIHRocm91Z2ggaW1hZ2U1IC0gKHN0cmluZykgYSBzdHJpbmcgb2YgdGhlIGZvcm1hdCBzcmM6OjpocmVmIGRlc2NyaWJpbmcgYW4gaW1hZ2UgZm9yIHRoZSBhdHRhY2htZW50LjwvbGk+CiAgICA8bGk+cHJvcDEgdGhyb3VnaCBwcm9wNSAtIChzdHJpbmcpIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBuYW1lLHZhbHVlLGFuZCBocmVmIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBvcHRpb25zL3Byb3BlcnRpZXMgZm9yIHRoZSBib3R0b20gb2YgdGhlIHdhbGwgcG9zdC4KICAgIDxsaT5kYXRhMSB0aHJvdWdoIGRhdGE1IC0gKHN0cmluZykgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIG5hbWUvdmFsdWUgcGFpcnMgdXNlZCB0byBhc3NvY2lhdGUgZGF0YSB3aXRoIHRoZSBwb3N0LgogICAgPGxpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYl93YWxscG9zdCB0bz1tZSBtc2c9JnF1b3Q7VGhpcyBpcyBhIFRlc3QmcXVvdDsgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7fTwvY29kZT48L3ByZT48YnIvPgogPC9saT4KCiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfc3RhdHVzIHRvPSZsdDtzdHJpbmcmZ3Q7IG1zZz0mbHQ7c3RyaW5nJmd0OyAuLi59PC9jb2RlPgogPHA+Q3JlYXRlIGEgc3RhdHVzIHBvc3Qgb24gYSB1c2VycyBmZWVkLiBBbGxvd3MgZm9yIGEgbGluaywgYSBwaWN0dXJlLCBhIG5hbWUsIGEgY2FwdGlvbiwgYW5kIGEgZGVzY3JpcHRpb24uIEFzIHdlbGwgYXMgZm9yIHVwIHRvIDMgYWRkaXRpb25hbCBhY3Rpb25zLiAgVGhpcyBtZXRob2QgdXNlcyB0aGUgRmFjZWJvb2sgR1JBUEggQVBJLjxici8+UGFyYW1ldGVyczoKIDx1bD4KICAgIDxsaT50byAtIChzdHJpbmcpIFRoZSBGYWNlYm9vayBVSUQgdG8gc2VuZCB0aGUgd2FsbCBwb3N0IHRvLiAgKGRlZmF1bHQgaXMgJnF1b3Q7bWUmcXVvdDspPC9saT4KICAgIDxsaT5tc2cgLSAoc3RyaW5nKSBUaGUgbWVzc2FnZSB0byBzZW5kIChrZWVwIGl0IHRvIDE0MCBjaGFyYWN0ZXJzIG9yIGxlc3MpPC9saT4KICAgIDxsaT5saW5rIC0gKHN0cmluZykgQSBVUkwgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBwb3N0LjwvbGk+CiAgICA8bGk+cGljdHVyZSAtIChzdHJpbmcpIGEgVVJMIHRvIGEgcGljdHVyZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHBvc3QuPC9saT4KICAgIDxsaT5jYXB0aW9uIC0gKHN0cmluZykgQSBjYXB0aW9uIGZvciB0aGUgcGljdHVyZS48L2xpPgogICAgPGxpPmRlc2NyaXB0aW9uIC0gKHN0cmluZykgQSBkZXNjcmlwdGlvbiBmb3IgdGhlIHBpY3R1cmUuLjwvbGk+CiAgICA8bGk+YWN0aW9ucyAtIChtaXhlZCkgRWl0aGVyIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBrZXkgdmFsdWUgcGFpcnMsIG9yIGEgaGFzaCBvZiBrZXkvdmFsdWUgcGFpcnMgc3BlY2lmeWluZyBidXR0b24gbmFtZXMgYW5kIFVSTFMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHBvc3QuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDxwcmU+RXhhbXBsZTogPGNvZGU+e2NnZmJfc3RhdHVzIHRvPSZxdW90O21lJnF1b3Q7ICBtc2c9JnF1b3Q7SSByZWFsbHkgbGlrZSB0aGlzIGFwcCZxdW90Ozxici8+YWN0aW9ucz0mcXVvdDtWaWV3IHN0b3JlPWh0dHA6Ly93d3cubXlzaXRlLmNvbS9zdG9yZSxWaWV3IEV2ZW50cz1odHRwOi8vd3d3Lm15c2l0ZS5jb20vZXZlbnRzJnF1b3Q7fTwvY29kZT48L3ByZT48YnIvPgogPC9saT4KCiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfaW52aXRlIC4uLn08L2NvZGU+CiA8cD5DcmVhdGUgYSBmb3JtIHRvIGludml0ZSB5b3VyIHVzZXJzIGZhY2Vib29rIGZyaWVuZHMsIGFuZCBvdGhlcnMgdG8gdXNlIHlvdXIgZmFjZWJvb2sgYXBwbGljYXRpb24uICBUaGlzIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZmFjZWJvb2sgc29jaWFsIHBsdWdpbiBmb3IgaW52aXRpbmcgcGVvcGxlLiAgVGhpcyBwbHVnaW4gdXNlcyB0aGUgZGVmYXVsdCBpbnZpdGUgdGVtcGxhdGUgYXMgc3BlY2lmaWVkIGluIHRoaXMgbW9kdWxlcyBhZG1pbiBwYW5lbCB1bmxlc3MgYSBkaWZmZXJlbnQgdGVtcGxhdGUgaXMgc3BlY2lmaWVkLjxici8+UGFyYW1ldGVyczoKIDx1bD4KICAgIDxsaT5kZXN0X3VybCAtIChzdHJpbmcpIFRoZSB1cmwgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgdGhlIGZvcm0gaGFzIGJlZW4gc3VibWl0dGVkLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBVUkwgd2lsbCBiZSB1c2VkLjwvbGk+CiAgICA8bGk+YXBwX25hbWUgLSAoc3RyaW5nKSBUaGUgbmFtZSBvZiB5b3VyIGFwcGxpY2F0aW9uLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgc2l0ZSBuYW1lIHdpbGwgYmUgdXNlZC48L2xpPgogICAgPGxpPmV4Y2x1ZGVfaWRzIC0gKHN0cmluZykgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGZhY2Vib29rIFVJRHMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgZnJpZW5kcyB0byBpbnZpdGUgbGlzdC48L2xpPgogICAgPGxpPmNvbnRlbnQgLSAoc3RyaW5nKSBBbiBpbnN0cnVjdGlvbmFsIG1lc3NhZ2UgdG8gZGlzcGxheSB0byB1c2VycyBhdCB0aGUgdG9wIG9mIHRoZSBmb3JtLjwvbGk+CiAgICA8bGk+Ym9yZGVyIC0gKGJvb2xlYW4pIFNob3VsZCB0aGUgZm9ybSBoYXZlIGEgYm9yZGVyLjwvbGk+CiAgICA8bGk+ZW1haWxfaW52aXRlIC0gKGJvb2xlYW4pIEVuYWJsZSBhbiBlbWFpbCBpbnZpdGUgc2VjdGlvbiB0byB0aGUgZm9ybS48L2xpPgogICAgPGxpPmVtYWlsX2ludml0ZSAtIChib29sZWFuKSBFbmFibGUgdGhlIGVtYWlsIGNvbnRhY3QgaW1wb3J0ZXIuPC9saT4KICAgIDxsaT5jb25kZW5zZWQgLSAoYm9vbGVhbikgZW5hYmxlIHRoZSBjb25kZW5zZWQgZm9ybS48L2xpPgogICAgPGxpPmNvbHMgLSAoaW50KSBlaXRoZXIgMiwzLCBvciA1IC0gdGhlIG51bWJlciBvZiBjb2x1bW5zIHRvIGRpc3BsYXkgYnkgZGVmYXVsdCwgdGhpcyBpbmZsdWVuY2VzIHRoZSBzaXplIG9mIHRoZSBmb3JtLjwvbGk+CiAgICA8bGk+bWF4IC0gKGludCkgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZyaWVuZHMgdG8gaW52aXRlIGF0IG9uZSB0aW1lLiAgKG1pbiAxLCBtYXggMzUpPC9saT4KICAgIDxsaT5ieXBhc3MgLSAoc3RyaW5nKSBUaGUgVmVyc2lvbiBvZiB0aGUgJnF1b3Q7YnlwYXNzJnF1b3Q7IGJ1dHRvbiBvbiB0aGUgZm9ybS4gb3B0aW9ucyBhcmUgc3RlcCxza2lwLG9yIGNhbmNlbC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgc2tpcC4KICAgIDxsaT50ZW1wbGF0ZSAtIChzdHJpbmcpIFRoZSBuYW1lIG9mIGEgbm9uLWRlZmF1bHQgaW52aXRlIGZvcm0gdGVtcGxhdGUgdG8gdXNlLjwvbGk+CiAgICA8bGk+YXNzaWduIC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDxwcmU+RXhhbXBsZTogPGNvZGU+e2NnZmJfaW52aXRlIGNvbnRlbnQ9JnF1b3Q7SW52aXRlIHlvdXIgZnJpZW5kcyB0byB1c2UgdGhpcyBmdW5reSBhcHAmcXVvdDt9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9mcWwgZnFsPSZsdDtzdHJpbmcmZ3Q7IGFzc2lnbj0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiA8cD5TZW5kIGFuIEZRTCBSZXF1ZXN0IHRvIEZhY2Vib29rLjwvcD4KIDx1bD4KICAgIDxsaT5mcWwgLSAoc3RyaW5nIC0gcmVxdWlyZWQpICBUaGUgZmFjZWJvb2sgRlFMIHJlcXVlc3Qgc3RyaW5nPC9saT4KICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDxwcmU+RXhhbXBsZTogPGNvZGU+e2NnZmJfZnFsIGZxbD09JnF1b3Q7U0VMRUNUIG5hbWUgRlJPTSB1c2VyIFdIRVJFIHVpZCA9IG1lKCkmcXVvdDsgYXNzaWduPSZxdW90O215X25hbWUmcXVvdDt9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9mcWxfbXVsdGkgLi4ufTwvY29kZT4KIDxwPlNlbmQgdXAgdG8gNSBGUUwgcXVlcmllcyBGYWNlYm9vayBpbiBhIHNpbmdsZSByZXF1ZXN0LjwvcD4KIDx1bD4KICAgIDxsaT5xdWVyeTEgdGhyb3VnaCBxdWVyeTUgLSAoc3RyaW5nIC0gcmVxdWlyZWQpICBUaGUgZmFjZWJvb2sgRlFMIHJlcXVlc3Qgc3RyaW5nczwvbGk+CiAgICA8bGk+YXNzaWduIC0gKHN0cmluZykgIEFzc2lnbiB0aGUgb3V0cHV0IHRvIGEgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiA8L3VsPgogPC9wPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYnVzZXJkYXRhX2dldCB1aWQ9Jmx0O3N0cmluZyZndDsgYXNzaWduPSZsdDtzdHJpbmcmZ3Q7fTwvY29kZT4KIDxwPlJldHJpZXZlIHRoZSBkYXRhIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmllZCAgdXNlciBmcm9tIHRoZSBkYXRhYmFzZS48L3A+CiA8cD48c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPk5vdGU6PC9zcGFuPiBUaGlzIGNvZGUgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuPC9wPgogPHVsPgogICAgPGxpPnVpZCAtIChzdHJpbmcpICBUaGUgZmFjZWJvb2sgVXNlciBJRDwvbGk+CiAgICA8bGk+YXNzaWduIC0gKHN0cmluZykgIEFzc2lnbiB0aGUgb3V0cHV0IHRvIGEgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiA8L3VsPgogPC9wPjxici8+CiA8cHJlPkV4YW1wbGU6IDxjb2RlPntjZ2ZidXNlcmRhdGFfZ2V0IHVpZD0kZmJfdWlkIGFzc2lnbj0mcXVvdDtteWRhdGEmcXVvdDt9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYnVzZXJkYXRhX3NldCB1aWQ9Jmx0O3N0cmluZyZndDsgIGtleT0mbHQ7c3RyaW5nJmd0OyAgdmFsPW1peGVkfTwvY29kZT4KIDxwPlN0b3JlIHNvbWUgZGF0YSBpbiB0aGUgdXNlciBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgZmFjZWJvb2sgdXNlci4gIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhZHZhbmNlZCBoaWVyYXJjaGljYWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggZGF0YSBmb3IgYSB1c2VyLjwvcD4KIDxwPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Tm90ZTo8L3NwYW4+IFRoaXMgY29kZSBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC48L3A+CiA8dWw+CiAgICA8bGk+dWlkIC0gKHN0cmluZykgIFRoZSBmYWNlYm9vayBVc2VyIElEPC9saT4KICAgIDxsaT5rZXkgLSAoc3RyaW5nKSAgQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgaGllcmFyY2hpY2FsIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhIGluLiAgSGllcmFyY2h5IGxldmVscyBhcmUgc2VwYXJhdGVkIHdpdGggYSAuLjwvbGk+CiAgICA8bGk+dmFsIC0gKG1peGVkKSBUaGUgZGF0YSB0byBzdG9yZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYnVzZXJkYXRhX3NldCB1aWQ9JGZiX3VpZCBhc3NpZ249J3Njb3Jlcy5sYXN0c2NvcmUnIHZhbD01fTwvY29kZT48YnIvPgogICAgICBFeGFtcGxlOiA8Y29kZT57Y2dmYnVzZXJkYXRhX3NldCB1aWQ9JGZiX3VpZCBhc3NpZ249J3Njb3Jlcy5udW1nYW1lcycgdmFsPSZxdW90OyRteWRhdGEuc2NvcmVzLm51bWdhbWVzKzEmcXVvdDt9PC9jb2RlPgogPC9wcmU+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZidXNlcmRhdGFfZXJhc2UgdWlkPSZsdDtzdHJpbmcmZ3Q7ICBrZXk9Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogPHA+RXJhc2UgYSBwb3J0aW9uIG9mIHRoZSBkYXRhIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSBmb3IgdGhlIHNwZWNpZmllZCBmYWNlYm9vayB1c2VyIGlkLjwvcD4KIDxwPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Tm90ZTo8L3NwYW4+IFRoaXMgY29kZSBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC48L3A+CiA8dWw+CiAgICA8bGk+dWlkIC0gKHN0cmluZykgIFRoZSBmYWNlYm9vayBVc2VyIElEPC9saT4KICAgIDxsaT5rZXkgLSAoc3RyaW5nKSAgQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgaGllcmFyY2hpY2FsIGxvY2F0aW9uIHRvIGVyYXNlLiAgSGllcmFyY2h5IGxldmVscyBhcmUgc2VwYXJhdGVkIHdpdGggYSAuLjwvbGk+CiA8L3VsPgogPC9wPjxici8+CiA8cHJlPkV4YW1wbGU6IDxjb2RlPntjZ2ZidXNlcmRhdGFfZXJhc2UgdWlkPSRmYl91aWQgYXNzaWduPSdzY29yZXMubGFzdHNjb3JlJyB2YWw9NX08L2NvZGU+PGJyLz48L3ByZT48YnIvPgogPC9saT4KCiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJ1c2VyZGF0YV9lcmFzZXVzZXIgdWlkPSZsdDtzdHJpbmcmZ3Q7fTwvY29kZT4KIDxwPkVyYXNlIGFsbCBvZiB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBmYWNlYm9vayB1c2VyLjwvcD4KIDxwPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Tm90ZTo8L3NwYW4+IFRoaXMgY29kZSBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC48L3A+CiA8dWw+CiAgICA8bGk+dWlkIC0gKHN0cmluZykgIFRoZSBmYWNlYm9vayBVc2VyIElEPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDxwcmU+RXhhbXBsZTogPGNvZGU+e2NnZmJ1c2VyZGF0YV9lcmFzZXVzZXIgdWlkPSRmYl91aWR9PC9jb2RlPjxici8+PC9wcmU+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZidXNlcmRhdGFfYXBwZnJpZW5kcyB1aWQ9Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogPHA+UmV0dXJuIGEgbGlzdCBvZiB0aGUgZnJpZW5kcyBvZiB0aGUgc3BlY2lmaWVkIGZhY2Vib29rIHVzZXIgdGhhdCBhbHNvIGhhdmUgZGF0YSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIGZvciB0aGlzIGFwcGxpY2F0aW9uLjwvcD4KIDxwPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Tm90ZTo8L3NwYW4+IFRoaXMgY29kZSBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC48L3A+CiA8dWw+CiAgICA8bGk+dWlkIC0gKHN0cmluZykgIFRoZSBmYWNlYm9vayBVc2VyIElEPC9saT4KICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KICAgIDxwcmU+RXhhbXBsZTogPGNvZGU+e2NnZmJ1c2VyZGF0YV9hcHBmcmllbmRzIHVpZD0kZmJfdWlkIGFzc2lnbj0mcXVvdDthbHNvdXNpbmcmcXVvdDt9eyRhbHNvdXNpbmd8QHByaW50X3J9PC9jb2RlPjxici8+PC9wcmU+PGJyLz4KIDwvbGk+CgoKCjwvdWw+CjxsaT4KPC91bD4KPGgzPlJlcXVpcmVtZW50czwvaDM+CjxoMz5SZWZlcmVuY2VzPC9oMz4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBjYWxndXlzCmhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly9jYWxndXkxMDAwLmNvbSI+Y2FsZ3V5MTAwMC5jb208L2E+LjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgCjwvdWw+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIApzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+PGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DR0V4dGVuc2lvbnMgPSZndDsgMS4yMi4zPC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC4xPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIEluaXRpYWwgUmVsZWFzZS48L2xpPgogIDxsaT5WZXJzaW9uIDEuMC4xIC0gRml4IHNvbWUgZG9jdW1lbnRhdGlvbiBlcnJhdGEuLi4gYW5kIGFkZCB0eXBlIHRhZ3MgdG8gdGhlIGRlZmF1bHQgdGVtcGxhdGVzLjwvbGk+CjwvdWw+CjxiciAvPg==]]></about>
	<description><![CDATA[A set of utilities allowing you to easily integrate Facebook into your application, or build simple facebook applications.]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.22.3</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_fbsettings_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKCiR0aGlzLT5TZXRDdXJyZW50VGFiKCdmYnNldHRpbmdzJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmYl9wZXJtcycsaW1wbG9kZSgnLCcsJHBhcmFtc1snZmJfcGVybXMnXSkpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZmJfYXBwaWQnLHRyaW0oJHBhcmFtc1snZmJfYXBwaWQnXSkpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZmJfYXBwc2VjcmV0Jyx0cmltKCRwYXJhbXNbJ2ZiX2FwcHNlY3JldCddKSk7CiR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkKICB7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2Zic2V0dGluZ3MnLCR0aGlzLT5MYW5nKCdmYWNlYm9va19zZXR0aW5ncycpKTsKICB9CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJykgKQogIHsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZmJpbml0c3luY190cGwnLCR0aGlzLT5MYW5nKCdmYmluaXRzeW5jX3RlbXBsYXRlJykpOwogICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdmYmluaXRhc3luY190cGwnLCR0aGlzLT5MYW5nKCdmYmluaXRhc3luY190ZW1wbGF0ZScpKTsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignaW52aXRlX3RhYicsJHRoaXMtPkxhbmcoJ2ludml0ZV90ZW1wbGF0ZScpKTsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZGZsdF90ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCdkZmx0X3RlbXBsYXRlcycpKTsKICB9CmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKCgplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKQogIHsKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdmYnNldHRpbmdzJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9mYnNldHRpbmdzX3RhYi5waHAnKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwogIH0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApCiAgewogICAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2ZiaW5pdHN5bmNfdHBsJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9mYmluaXRzeW5jX3RhYi5waHAnKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdmYmluaXRhc3luY190cGwnLCRwYXJhbXMpOwogICAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2ZiaW5pdGFzeW5jX3RhYi5waHAnKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdpbnZpdGVfdGFiJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9pbnZpdGVfdGFiLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogICAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2RmbHRfdGVtcGxhdGVzJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9kZmx0dGVtcGxhdGVzX3RhYi5waHAnKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwogIH0KCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/CGFBApp.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwokY2dleHRlbnNpb25zID0gY21zX2pvaW5fcGF0aChjbXNtcygpLT5jb25maWdbJ3Jvb3RfcGF0aCddLCdtb2R1bGVzJywKCQkJICAgICAgJ0NHRXh0ZW5zaW9ucycsJ0NHRXh0ZW5zaW9ucy5tb2R1bGUucGhwJyk7CmlmKCAhaXNfcmVhZGFibGUoICRjZ2V4dGVuc2lvbnMgKSApCnsKICBlY2hvICc8aDE+PGZvbnQgY29sb3I9InJlZCI+RVJST1I6IFRoZSBDR0V4dGVuc2lvbnMgbW9kdWxlIGNvdWxkIG5vdCBiZSBmb3VuZC48L2ZvbnQ+PC9oMT4nOwogIHJldHVybjsKfQpyZXF1aXJlX29uY2UoJGNnZXh0ZW5zaW9ucyk7Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKY2xhc3MgQ0dGQkFwcCBleHRlbmRzIENHRXh0ZW5zaW9ucwp7CiAgY29uc3QgUFJFRl9JTlZJVEVfVEVNUExBVEUgPSAnZGZsdF9pbnZpdGVfdGVtcGxhdGUnOwogIGNvbnN0IFRQTF9TWVNERkxUX0lOVklURSA9ICdzeXNkZmx0X2ludml0ZV90ZW1wbGF0ZSc7CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIENvbnN0cnVjdG9yCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICB7CiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2V0UGFyYW1ldGVycwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKQogIHsKICAgIGNnZmJfc21hcnR5Ojppbml0KCk7CiAgICBjZ2ZiX29nX3NtYXJ0eTo6aW5pdCgpOwogICAgY2dmYnVzZXJkYXRhOjppbml0KCk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0TmFtZSgpCiAgewogICAgcmV0dXJuIGdldF9jbGFzcygpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEZyaWVuZGx5TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIH0KCgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRWZXJzaW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzEuMC4xJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRIZWxwKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRIZWxwKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBdXRob3IoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvcigpCiAgewogICAgcmV0dXJuICdjYWxndXkxMDAwJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBdXRob3JFbWFpbCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0Q2hhbmdlTG9nKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogIHsKICAgIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoZGlybmFtZShfX0ZJTEVfXykuJy9jaGFuZ2Vsb2cuaW5jJyk7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJc1BsdWdpbk1vZHVsZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKQogIHsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5TZWN0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQogIHsKICAgIHJldHVybiAnZXh0ZW5zaW9ucyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFZpc2libGVUb0FkbWluVXNlcigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSB8fAogICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RGVwZW5kZW5jaWVzKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIHJldHVybiBhcnJheSgnQ0dFeHRlbnNpb25zJz0+JzEuMjIuMycpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1pbmltdW1DTVNWZXJzaW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpCiAgewogICAgcmV0dXJuICIxLjkuMSI7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncHJldW5pbnN0YWxsJyk7CiAgfQkKCgp9IC8vIGNsYXNzCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIEluaXRpYWwgUmVsZWFzZS48L2xpPgogIDxsaT5WZXJzaW9uIDEuMC4xIC0gRml4IHNvbWUgZG9jdW1lbnRhdGlvbiBlcnJhdGEuLi4gYW5kIGFkZCB0eXBlIHRhZ3MgdG8gdGhlIGRlZmF1bHQgdGVtcGxhdGVzLjwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/function.admin_dflttemplates_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyBjZ2VfdGVtcGxhdGVfYWRtaW46OmdldF9zdGFydF90ZW1wbGF0ZV9mb3JtKCR0aGlzLCRpZCwnJywKCQkJCQkJIENHRkJBcHA6OlRQTF9TWVNERkxUX0lOVklURSwKCQkJCQkJICdkZWZhdWx0YWRtaW4nLCdkZmx0X3RlbXBsYXRlcycsCgkJCQkJCSAkdGhpcy0+TGFuZygndGl0bGVfc3lzZGZsdF9pbnZpdGUnKSwKCQkJCQkJICdvcmlnX2ludml0ZS50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_fbinitasync_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyBjZ2VfdGVtcGxhdGVfYWRtaW46OmdldF9zaW5nbGVfdGVtcGxhdGVfZm9ybSgkdGhpcywkaWQsJHJldHVybmlkLAoJCQkJCQkgICdmYmluaXRfYXN5bmMnLCdmYmluaXRhc3luY190cGwnLAoJCQkJCQkgICR0aGlzLT5MYW5nKCd0aXRsZV9mYmluaXRhc3luY190cGwnKSwKCQkJCQkJICAnb3JpZ19mYmluaXRfYXN5bmMudHBsJywKCQkJCQkJICAkdGhpcy0+TGFuZygnaW5mb19mYmluaXRhc3luY190cGwnKSk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_fbinitsync_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyBjZ2VfdGVtcGxhdGVfYWRtaW46OmdldF9zaW5nbGVfdGVtcGxhdGVfZm9ybSgkdGhpcywkaWQsJHJldHVybmlkLAoJCQkJCQkgICdmYmluaXRfc3luYycsJ2ZiaW5pdHN5bmNfdHBsJywKCQkJCQkJICAkdGhpcy0+TGFuZygndGl0bGVfZmJpbml0c3luY190cGwnKSwKCQkJCQkJICAnb3JpZ19mYmluaXRfc3luYy50cGwnLAoJCQkJCQkgICR0aGlzLT5MYW5nKCdpbmZvX2ZiaW5pdHN5bmNfdHBsJykpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/function.admin_fbinit_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyBjZ2VfdGVtcGxhdGVfYWRtaW46OmdldF9zaW5nbGVfdGVtcGxhdGVfZm9ybSgkdGhpcywkaWQsJHJldHVybmlkLAoJCQkJCQkgICdmYmluaXQnLCdmYmluaXRfdHBsJywKCQkJCQkJICAkdGhpcy0+TGFuZygndGl0bGVfZmJpbml0X3RwbCcpLAoJCQkJCQkgICdvcmlnX2ZiaW5pdC50cGwnLAoJCQkJCQkgICR0aGlzLT5MYW5nKCdpbmZvX2ZiaW5pdF90cGwnKSk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_fbsettings_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX2Zic2V0dGluZ3NfdGFiJykpOwokc21hcnR5LT5hc3NpZ24oJ2ZiX2FwcGlkJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZmJfYXBwaWQnKSk7CiRzbWFydHktPmFzc2lnbignZmJfYXBwc2VjcmV0JywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZmJfYXBwc2VjcmV0JykpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKJHBlcm1zID0gYXJyYXkoJ3B1Ymxpc2hfc3RyZWFtJywnY3JlYXRlX2V2ZW50JywncnN2cF9ldmVudCcsJ3NtcycsJ29mZmxpbmVfYWNjZXNzJywncHVibGlzaF9jaGVja2lucycsCgkgICAgICAgJ3VzZXJfYWJvdXRfbWUnLCd1c2VyX2FjdGl2aXRpZXMnLCd1c2VyX2JpcnRoZGF5JywndXNlcl9lZHVjYXRpb25faGlzdG9yeScsJ3VzZXJfZXZlbnRzJywKCSAgICAgICAndXNlcl9ncm91cHMnLCd1c2VyX2hvbWV0b3duJywndXNlcl9pbnRlcmVzdHMnLCd1c2VyX2xpa2VzJywndXNlcl9sb2NhdGlvbicsJ3VzZXJfbm90ZXMnLCd1c2VyX29ubGluZV9wcmVzZW5jZScsCgkgICAgICAgJ3VzZXJfcGhvdG9fdmlkZW9fdGFncycsJ3VzZXJfcGhvdG9zJywndXNlcl9yZWxhdGlvbnNoaXBzJywndXNlcl9yZWxhdGlvbnNoaXBfZGV0YWlscycsJ3VzZXJfcmVsaWdpb25fcG9saXRpY3MnLAoJICAgICAgICd1c2VyX3N0YXR1cycsJ3VzZXJfdmlkZW9zJywndXNlcl93ZWJzaXRlJywndXNlcl93b3JrX2hpc3RvcnknLCdlbWFpbCcsJ3JlYWRfZnJpZW5kbGlzdHMnLCdyZWFkX2luc2lnaHRzJywKCSAgICAgICAncmVhZF9tYWlsYm94JywncmVxZF9yZXF1ZXN0cycsJ3JlYWRfc3RyZWFtJywndXNlcl9jaGVja2lucycsJ2ZyaWVuZHNfYWJvdXRtZScsJ2ZyaWVuZHNfYWN0aXZpdGllcycsJ2ZyaWVuZHNfYmlydGhkYXknLCdmcmllbmRzX2VkdWNhdGlvbl9oaXN0b3J5JywKCSAgICAgICAnZnJpZW5kc19ldmVudHMnLCdmcmllbmRzX2dyb3VwcycsJ2ZyaWVuZHNfaG9tZXRvd24nLCdmcmllbmRzX2ludGVyZXN0cycsJ2ZyaWVuZHNfbGlrZXMnLCdmcmllbmRzX2xvY2F0aW9uJywnZnJpZW5kc19ub3RlcycsJ2ZyaWVuZHNfb25saW5lX3ByZXNlbnNlJywKCSAgICAgICAnZnJpZW5kc19waG90b192aWRlb190YWdzJywnZnJpZW5kc19yZWxhdGlvbnNoaXBzJywnZnJpZW5kc19yZWxhdGlvbnNoaXBfZGV0YWlscycsJ2ZyaWVuZHNfcmVsaWdpb25fcG9saXRpY3MnLCdmcmllbmRzX3ZpZGVvcycsJ2ZyaWVuZHNfd2Vic2l0ZScsCgkgICAgICAgJ2ZyaWVuZHNfd29ya19oaXN0b3J5JywnbWFuYWdlX2ZyaWVuZGxpc3RzJywnZnJpZW5kc19jaGVja2lucycpOwokcGVybXMgPSBhcnJheV9jb21iaW5lKCRwZXJtcywkcGVybXMpOwokc21hcnR5LT5hc3NpZ24oJ3Blcm1fbGlzdCcsJHBlcm1zKTsKJHRtcCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdmYl9wZXJtcycpOwppZiggJHRtcCApCiAgewogICAgJHRtcCA9IGV4cGxvZGUoJywnLCR0bXApOwogIH0KJHNtYXJ0eS0+YXNzaWduKCdmYl9wZXJtcycsJHRtcCk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2Zic2V0dGluZ3NfdGFiLnRwbCcpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/function.admin_invite_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyAkdGhpcy0+U2hvd1RlbXBsYXRlTGlzdCgkaWQsJHJldHVybmlkLCdpbnZpdGVfJywKCQkJICAgICBDR0ZCQXBwOjpUUExfU1lTREZMVF9JTlZJVEUsJ2ludml0ZV90YWInLAoJCQkgICAgIENHRkJBcHA6OlBSRUZfSU5WSVRFX1RFTVBMQVRFLAoJCQkgICAgICR0aGlzLT5MYW5nKCd0aXRsZV9pbnZpdGVfdGVtcGxhdGUnKSk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/fb_login.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhmgAWAPcHADJDf42ZwWJxoGt6rk5elZeix+Dk7v////b3+uHl72p5rers801dlH2KuJGcw2x7roeTvYqWv7e+129+sJehxaStzKqz0Gl5rcrP4bS81XWDs9re6uXp8f7+/sDG3Gh4rN/j7cnO4W59r3SDs3GAsXKBsu/x9svQ4rS71XSDss/V5HqItr/G3OXo8YCNudfb6Pf4+u3v9bG51Gl5rIeUvePn8K+30ufp8bC406myz+rt83KBscrQ4tTZ56ixzqavzebp8Wt7rdjc6XeGtOXo8Gt6rbW81v39/vj5+5mkx4uXv7i/1/T1+dDW5ay00fn6/Ofq8m18ruzu9JqkyMTK3svR4vHy97nA2HB/sI+awWd3rEtclGp6rejr8q620qWuzevu9IKPu6avzrrB2bO71XOCsvv7/cfN4Kuz0KewzoiUvo6ZwXyKt/r7/G18r9HX5tHW5XeFtZumyPf4+83T45WgxXuJt3iGtaCqysLI3Y+awrK51PP0+L/F3PX2+bzD2qKrzHaEtPDy9+7w9oSRvLi/2Pv8/dPY5+vt9G59sKmy0JKdw9LX5nqHtszS44+bwnB/sZOexLa91ujq8szR44aTvenr89vf68bM32Z2q97i7Utck9bb6HmHtrO61dnd6uTn8Nfc6ZSfxeTo8MDH3PLz96Cpy7/F22V1q0tbk8/V5W9+sZahxa220p+py87U5LK61XGAsuPm72h4rcjN4Z2nyoGOutre66qy0HOCs2h3rJKdxHyJt3WEtN/j7ml4rWR0qkpakomVvvn6+/39/cPJ3q210XSCs9HW5ml4rMjN4GV1qsjO4LvB2fz8/Wd2q8LH3fv7/HKAstLY5tDV5dzg7Jagxb7E22RzqnB+sWd2rHuIt2V0qmV0q217r2p4rWx7r3F+sWh3rW99sGNzqcHG3GR0qYKPuklakmJzqWR1qklZkmFyqYCNumFxqUlZkWFxqCQ0bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAACaABYAAAj+AAEIHEiwoMGDCBMqXMiwocOHECMKDECxosWLFwVg3Mixo8ePIEOKHEnSo8ABKFOqXLmSAMuXMGPKnEmzps2bOGWezInSJc+fQIMKHfpyp8wCBg4gSJDSJ9GnUKNGNQqzwIGrV5tK3cq1a02BCsKKHasg6YEFBgyIZUC2rdu3Cho4eAC3rlgIEdo6kDDBrl+7Eij8bVvBgl2BFxIrXnzh6gLGFxhAboxhsmXFGQ5ouMxZ8QYOiickzrzZMtYDHTpfPuBB9eTPnQV+mE279oerIGx/YKD7dojewGmLGBG8eG0SJWabODEbxYEUwQ+oWEHdeHQW1ntvaGFcdnHcunn+6z7wm7aLFzBiyJjxgUaNGDZu4PiQQ8eODzx6+DDxgnjtH0AE8YEQzA1BRBH5fWDEEUgY8IFzSbTQghLjlTfbEkAw0cQQszmhwxNQRLHDCQhIMcVsB1BRhRVXYPHBeemt9yJ66rG33QdZGACdbgJp4eOPPp4m5I9bAPkjeT9ysUAXLnhxwBdabABGGGIcMIYWZBxQRpRmnIHGAWkYqcYBa7BxQBtufPFGlC1oQQICcMSB5QEbyDEHHUZqcQAIYojhghZ12HHHE0ZogccBedihxwV78MFGHwi4oacfFfxxACBKMunkF5k2+SSbgQhSR54+9kiqkFgNQuSpIfxIyAH+hWjhhiGHlHDEH7JaOeeWGyCiRSIHXGHkB35cocgbByzCCJTb+egHDz5m2YgWBoCQ5wExOOLII1pAEokkCEDbxBEl/DjJJChQckAlenqgxQOG0PFqrLMeMq+stEZpySWYkFoqAJkELHDAmhR8VcGaMCLwJgMLTJ7AlRyAQiYfPMFJJ8FmMkHGnhxQQiaftJDJAxk3fAIooYgyCilPBAKyyJkwwUPAHX8MAggNZ/KwwAlsgEcpMx9iyAQCI2GJKUhroPMpmRRhBhURT1wxJ1FTbDHIUITiRyc5BywQKmCHLTYqB4+NSipmk61KHGwnYoUBq7ByQCuoABGDK6/Aigr+LAfEgkrIqAyg99imHDDHAGMYkgDYgKMiSwKz7N03KjebfQAtYYdxQC22MHELKrgcIMEAuejiyBG76MKL33TmUjgrA7wd99yxwy033SH3woQvv6QtEDDABy88MAcPD0wwxhN/GgTCIDIMMcVoAYwaQiACyAHGALPHAZAA8wkRwChwwBLGH3MAMsA4cIAnwH8PfC18tJHM9t0XbPwBygS/jBCGMNOMM4t4BjScEQ0kQEIa0+gAMfggDOJRoxoH6IECgNG850WPgs6DnvTcZ40DXCN5AsGGCEdIQmwcrITYCAYKVyjCbGhjhNtwAzfScAAKsPCGOCRhN7yRwxt+Q4Tn4BihNsJBQnGMA4U8JKELS7jEHo5QIOSIohSnSI6DUZEcwbiiFrVYjiMggAkeMMcWx0jGMprxjGhM4xkFco42uvGN57gKKOB4DnSk4454zKMe9/gAF6hjj4AMpCAHSchCGvKQiLyjQGzByEY60hZyfKQt1sGOSlrykpjMpCY3yclOevKToAylKD0pkHaY8pSobIccU9mOdbjjlbCMpSxnScta2vKWuMylLnfJS1yWkpWoXGUq3wGPYhrzmMhMpjKXycxmOvOZ0IymNJ0pkHhY85rYzKY2t8nNbnrzm+AMpzjHSU5yAiAgADs=]]></data>
	</file>
	<file>
	  <filename>/images/fb_logout.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhVQAUAPcAADtbjjtWljVdlTtaljRXmzxWmzVamDxamixgkjlglTxXoTVaoDxfozZioz9hoERWj0Rbj0RWkUJbl0JWm0Fcm0NhnUBXpUFdoEhhoU9to192olZ9rF17rFp3sVZ9tFp7slZ4uFt9uWV6smN4uVmAq1iAs2uErnCBrWWFtmyEs2aEuG2EuHOCtHSGuH+Wv36ly4SFvomEvIqbt4Ocvoubvpievo6jvpKyv6ytrbGtrKuxrrGxra+vsbKvsq+0sLCwsL2+u8G9vbzAvoafx4qZwIKdyJOew5GfzoSf1Iic0Y6e2Y6hxYSkzY2gy5KjxJOqx5+kzJioyY+xzZC0zIem0oqj04yp1Yah2Iuh242p25ql0pGl2pGz0J+83aavzqS2zL2+waO11KW706S126q33KO63Km42aW24qm14qS5477CwrrX3bfX4r3V5LXZ5brV67bZ7LzZ6c7Z3c/W5czZ4cvb6tPV4dLZ49TX69jW69Pa7NbW8tDa89zr7t3q8+Pn7ePq7+rs7unz7ubn8uXq8+vs8+Xn/ufv+uvs+vDu8/nv8OXx8ezx8+30/PP19fv39Pb89fz99fT1+vr2/PX7/P7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABVABQAAAj+AA0cKHBgwAEFAwweOCAgwMKHFAIIKLjQ4cOBExwCIMDQooACBCgotPiQZMWLB0gadJgw5YACEQ4gOFCpps1INnNWgoRTp8+fQCv1DEq0qM4IBSp5kSDhQIKFFwAYHMC0AQAJFCgekGCQQtMEAxJkiEJpaE2zRtMatUAzAYGJC6VSfHngASVKkypNmoS3kqRIlPROimSohpOdahMrrpSwUgUBDyYIVHCA40MBEyhBGvwIyA4cQADjjfSXkiQIi1ML9RnYZuOBBQxgxkxBA6KaKUnf9YxDhxpJkiZJMj1c0gVIOlvnVQ0UbU6ClRYOEJAgQIEJAgjVpITQEaVGYHz+4OABpBJxvpBMQxpglhEHO8yJBu5ptmCkpwcytgxQk3IABZI4AgQPOPwQRCWNdNGEFWE0EqCDByxX0yAh0BFfUGYYkRNyNTnE2EMEpSRATQkVMECAQvzQAw5BMCIJGVVcQcUYiDgCHE0cVhJICXjkFMUGINCg3SFEhDADC2hUggcLHHxgRiRvmFDTFF/o0QEJHLDh00IfruShTgNMUAgjlQCBAw49ANEIJWNkkUQVYzTCCCMUSFgJIR3ksRoZIhRSSREvVIKFDJXQwUIXlKBQRiV3eLAHHCrUJEYYlXSBhF5bJiXddAYVkkhNiRSykCOM+KmGDjjkoEYglYRBRRX+VZjRiCAD2MlICXLY9AIZNeGxQSUd3FGTCW/M8QGHNJDRxgo1PdHFJGTYUJOdlUA31WXX1URQp3MWMokaKwbhyCFjYLEgGYcIkoBZgXCgZ01L8FpJHFJ68MawYuQxgiNCzZBGGzAE9sUUkJDRBFACRSeSQiuRSFEhjQBSamt3dpGFEnBSUipNOR3SAR49ncGCn0xEUQkNT0wCBwdnSKJCGpXYAUIfeIjgyBseULpGCkClxFgBXAVAEm4sAVIIIYQwQkgggRDSRRFXVFEGJYIAggjHNgXSQQgceHBCJFps0MEM3v7BgggztJCkHCZ8EEKSkEzBQQxQTDEJISh80KPyTlxWUIEKKKwgeAoo1JRCCitUwAgghAyCdCGDIBIGxlM3XUghFzzyyFk/9cRhJDjxwUEdOeE0FMXU5lRQJRJUkIIJKbCQwgk8V3I4CxUw7njjhADix3KROO4HIH8wUJZiaXywAQcwp+Wc6gNEx9BcLVHvRyCDAKI99oD0kf0g4A8yBxEaPn+h8zYVkNQXE1yQ1UNM4eeUBAzAf0BW78ufwRLDnX8hTg2pCU8eEQm+DCYve8HJJB4BiUeg5y+DEcpfKuGICPrvfFkx0UA4shLpBMAgDaHLtQZgES8tZCLbYthUVliQEVKvhXN5YUtaMoGUBAQAOw==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0EKJGxhbmdbJ2FkdmFuY2VkX3NldHRpbmdzJ10gPSAnQWR2YW5jZWQnOwoKI0IKCiNDCgojRAokbGFuZ1snZGZsdF9hY3Rpb25fdGV4dCddID0gJ0ludml0ZSB5b3VyIGZyaWVuZHMgdG8gdXNlIHRoaXMgQXBwJzsKJGxhbmdbJ2RmbHRfdGVtcGxhdGVzJ10gPSAnRGVmYXVsdCBUZW1wbGF0ZXMnOwoKI0UKCiNFCgojRgokbGFuZ1snZmFjZWJvb2tfc2V0dGluZ3MnXSA9ICdGYWNlYm9vayBTZXR0aW5ncyc7CiRsYW5nWydmYl9hcHBpZCddID0gJ0ZhY2Vib29rIEFwcGxpY2F0aW9uIElEJzsKJGxhbmdbJ2ZiX2FwcHNlY3JldCddID0gJ0ZhY2Vib29rIEFwcGxpY2F0aW9uIFNlY3JldCc7CiRsYW5nWydmYl9wZXJtcyddID0gJ0ZhY2Vib29rIFBlcm1pc3Npb25zJzsKJGxhbmdbJ2ZiaW5pdGFzeW5jX3RlbXBsYXRlJ10gPSAnRmFjZWJvb2sgQXN5bmMgSW5pdGlhbGl6YXRpb24nOwokbGFuZ1snZmJpbml0c3luY190ZW1wbGF0ZSddID0gJ0ZhY2Vib29rIFN5bmNocm9ub3VzIEluaXRpYWxpemF0aW9uJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NhbGd1eXMgRmFjZWJvb2sgVG9vbGtpdCc7CgojRwoKI0gKJGxhbmdbJ2hlbHAnXSA9IDw8PEVPVAo8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgc29tZSB0b29scyAodmlhIGFuIEFQSSBhbmQgdmFyaW91cyBzbWFydHkgcGx1Z2lucykgdG8gYWxsb3cgZWFzaWx5IGludGVncmF0aW5nIGZhY2Vib29rIGludG8geW91ciBhcHBsaWNhdGlvbiB1c2luZyBzbWFydHkgbG9naWMsIG9yIGJ1aWxkaW5nIGEgc2ltcGxlIGZhY2Vib29rIGFwcGxpY2F0aW9uIHVzaW5nIHNpbXBsZSBzbWFydHkgcGx1Z2lucyBvciB1c2VyIGRlZmluZWQgdGFncy4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gYnVpbGRpbmcgRS1jb21tZXJjZSwgdG91cmlzbSwgZXZlbnQgb3Igc29jaWFsIHdlYnNpdGVzLjwvcD4KPGgzPkZlYXR1cmVzPC9oMz4KPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgc21hcnR5IHV0aWxpdGllcyBmb3IgaW50ZWdyYXRpbmcgRmFjZWJvb2sgaW50byB5b3VyIHdlYnNpdGUsIGFuZCBzb21lIHNtYXJ0eSB1dGlsaXRpZXMgYW5kIGEgc2ltcGxlIEFQSSBmb3IgYnVpbGRpbmcgZmFjZWJvb2sgYXBwbGljYXRpb25zLiBJbmNsdWRpbmc6PGJyLz4KIDx1bD4KIDxsaT5Jbml0aWFsaXppbmcgdGhlIEZhY2Vib29rIEphdmFzY3JpcHQgQVBJIChzeW5jaHJvbm91c2x5IG9yIGFzeW5jaG9ybm91c2x5KTwvbGk+CiA8bGk+RGlzcGxheSBhIGJveCBhbGxvd2luZyB1c2VycyB0byBjb21tZW50IG9uIGFueSBvYmVjdCB3aXRoaW4geW91ciB3ZWJzaXRlIChubyBGYWNlYm9vayBBUFBJRCBSZXF1aXJlZCkKIDxsaT5EaXNwbGF5IGEgRmFjZWJvb2sgTGlrZSBCdXR0b24gZm9yIGFueSBpdGVtPC9saT4KIDxsaT5DcmVhdGUgYSBXYWxsIFBvc3QgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIuPC9saT4KIDxsaT5DcmVhdGUgYSBTdGF0dXMgcG9zdCBmb3IgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlci48L2xpPgogPGxpPkRpc3BsYXkgYW4gaW52aXRlIGZvcm0gdG8gaW52aXRlIHVzZXJzIHRvIHlvdXIgd2Vic2l0ZTwvbGk+CiA8bGk+CiA8L3VsPgo8L3A+PGJyLz4KPHA+WW91IGhhdmUgYWNjZXNzIHRvIG51bWVyb3VzIHNtYXJ0eSB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nIHZhcmlvdXMgT3BlbkdyYXBoIE9iamVjdHM6CiA8dWw+CiA8bGk+U2V0IHRoZSBPcGVuR3JhcGggVVJMPC9saT4KIDxsaT5TZXQgdGhlIE9wZW5HcmFwaCBUaXRsZTwvbGk+CiA8bGk+U2V0IHRoZSBPcGVuR3JhcGggT2JqZWN0IFR5cGU8L2xpPgogPGxpPlNldCB0aGUgT3BlbkdyYXBoIEltYWdlIEF0dHJpYnV0ZTwvbGk+CiA8bGk+U2V0IHRoZSBPcGVuR3JhcGggVGl0bGUgQXR0cmlidXRlPC9saT4KIDxsaT5TZXQgdGhlIE9wZW5HcmFwaCBTaXRlbmFtZSBBdHRyaWJ1dGU8L2xpPgogPGxpPlNldCB0aGUgT3BlbkdyYXBoIERlc2NyaXB0aW9uIEF0dHJpYnV0ZTwvbGk+CiA8bGk+U2V0IHRoZSBPcGVuR3JhcGggYWRtaW5zIGF0dHJpYnV0ZS48L2xpPgogPC91bD4KPC9wPjxici8+CjxwPllvdSBoYXZlIGFjY2VzcyB0byBudW1lcm91cyBzbWFydHkgdXRpbGl0aWVzIGZvciBidWlsZGluZyBhIEZhY2Vib29rIEFwcGxpY2F0aW9uIG9uIGEgcGFnZSBvZiB5b3VyIHdlYnNpdGU6CiA8dWw+CiA8bGk+SW5pdGlhbGl6aW5nIHRoZSBGYWNlYm9vayBKYXZhc2NyaXB0IEFQSSAoc3luY2hyb25vdXNseSBvciBhc3luY2hvcm5vdXNseSk8L2xpPgogPGxpPkVudGVyaW5nIHlvdXIgRmFjZWJvb2sgQXBwbGljYXRpb24gSUQsIGFuZCBBcHAgU2VjcmV0PC9saT4KIDxsaT5TZWxlY3Rpbmcgd2hpY2ggRmFjZWJvb2sgcGVybWlzc2lvbnMgeW91ciBBcHAgUmVxdWlyZXMgKGlmIGFueSk8L2xpPgogPGxpPkRpc3BsYXlpbmcgYSBsb2dpbiBidXR0b24gYWxsb3dpbmcgdXNlcnMgdG8gbG9naW4gdG8geW91ciBhcHAgb3Igd2Vic2l0ZSB1c2luZyB0aGVpciBGYWNlYm9vayBjcmVkZW50aWFsczwvbGk+CiA8bGk+RGlzcGxheWluZyBhIGxvZ291dCBidXR0b24gYWxsb3dpbmcgdXNlcnMgdG8gbG9nb3V0IGZyb20geW91ciBhcHBsaWNhdGlvbi48L2xpPgogPGxpPkluaXRpYWxpemluZyB0aGUgRmFjZWJvb2sgSmF2YXNjcmlwdCBBUEkgKHN5bmNocm9ub3VzbHkgb3IgYXN5bmNob3Jub3VzbHkpPC9saT4KIDxsaT5DYWxsaW5nIGFueSBmdW5jdGlvbiBpbiB0aGUgRmFjZWJvb2sgR3JhcGggQVBJPC9saT4KIDxsaT5SZXRyaWV2ZSBhbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlciB0aGF0IGhlIGhhcyBhdXRob3JpemVkIHRvIHNoYXJlIHdpdGggeW91PC9saT4KIDxsaT5SZXRyaWV2ZSBGYWNlYm9vayBVSUQgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIuPC9saT4KIDxsaT5TZW5kIGEgUE9TVCBjb21tYW5kIHRvIHRoZSBGYWNlYm9vayBHUkFQSCBBUEk8L2xpPgogPC91bD4KPC9wPjxici8+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgbGltaXRlZCBzbWFydHkgdXRpbGl0aWVzIGZvciBzdG9yaW5nIGFuZCByZXRyaWV2aW5nIGRhdGEgZm9yIGNyZWF0aW5nIHNpbXBsZSBhcHBsaWNhdGlvbnM6CiA8dWw+CiAgIDxsaT5SZXRyaWV2ZSBhcHBsaWNhdGlvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGUgRmFjZWJvb2sgdXNlci48L2xpPgogICA8bGk+U3RvcmUgYXBwbGljYXRpb24gaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gdGhlIEZhY2Vib29rIHVzZXIgdG8gdGhlIGRhdGFiYXNlLjwvbGk+CiAgIDxsaT5FcmFzZSB1c2VyIHJlbGF0ZWQgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uPC9saT4KICAgPGxpPlJldHJpZXZlIGEgbGlzdCBvZiB0aGUgdXNlcnMgZnJpZW5kcyB0aGF0IGFyZSBhbHNvIHVzaW5nIHRoZSBhcHBsaWNhdGlvbi48L2xpPgogPC91bD4KPC9wPjxici8+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyIgc3R5bGU9ImNvbG9yOmJsYWNrO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6d2hpdGU7Ym9yZGVyOjJweCBkb3R0ZWQgb3JhbmdlIj4KICA8cD5UaGlzIG1vZHVsZSBpcyBub3QgYSByZXBsYWNlbWVudCBmb3IgbGVhcm5pbmcgdGhlIEZhY2Vib29rIEFQSVMgZm9yIHdyaXRpbmcgYXBwbGljYXRpb25zIHdpdGggRmFjZWJvb2suICBJdCBwcm92aWRlcyBzb21lIHdyYXBwZXJzIGFuZCBjb252ZW5pZW5jZXMgZm9yIHNtYXJ0eSBmb3IgcmV0cmlldmluZyBkYXRhIGZyb20gYW5kIHN1Ym1pdHRpbmcgZGF0YSB0byBGYWNlYm9vay48L3A+CiAgPHA+PHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbjsiPlBsZWFzZTwvc3Bhbj4gcmVhZCB0aGUgZmFjZWJvb2sgYXBwbGljYXRpb24gdHV0b3JpYWxzIGFuZCByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbi48L3A+CjwvZGl2Pgo8aDM+SG93IGRvIEkgdXNlIGl0PC9oMz4KPHA+VGhlcmUgYXJlIHR3byBwcmltYXJ5IHdheXMgdG8gdXNlIHRoaXMgbW9kdWxlLiAgRmlyc3QsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0byBhZGQgc29jaWFsIGF0dHJpYnV0ZXMgdG8geW91ciBleGlzdGluZyBDTVNNUyBXZWJzaXRlLiAgU2Vjb25kbHkgeW91IGNhbiB1c2UgdGhpcyBtb2R1bGUgdG8gcXVlcnkgZGF0YSBmcm9tIGFuZCBzdWJtaXQgaW5mb3JtYXRpb24gdG8gRmFjZWJvb2suICBBZGRpdGlvbmFsbHkgc29tZSBwbHVnaW5zIGFyZSBwcm92aWRlZCBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBhcHAgc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIGEgZmFjZWJvb2sgdXNlci48L3A+CjxoND48dT5GYWNlYm9vayBTb2NpYWwgUGx1Z2luczo8L3U+PC9oND4KICAgPHA+VGhlIGZvbGxvd2luZyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc21hcnR5IGZ1bmN0aW9ucyB0byBhbGxvdyBpbnRlZ3JhdGluZyBGYWNlYm9vayBpbnRvIHlvdXIgd2Vic2l0ZS4gIFNlZSB0aGUgJnF1b3Q7U21hcnR5IEZ1bmN0aW9ucyZxdW90OyBzZWN0aW9uIGJlbG93IGZvciBhIGRldGFpbGVkIHJlZmVyZW5jZSBvZiBlYWNoIHBsdWdpbi4gRm9yIGEgcmVmZXJlbmNlIHlvdSBzaG91bGQgcmVhZCB0aGlzIHBhZ2UgYWJvdXQgPGEgaHJlZj0iaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3BsdWdpbnMiPkZhY2Vib29rIFNvY2lhbCBQbHVnaW5zPC9hPjwvcD4KPHVsPgogPGxpPjxjb2RlPntjZ2ZiX2xpa2V9PC9jb2RlPiBXaWxsIGRpc3BsYXkgYSBGYWNlYm9vayBsaWtlIGJ1dHRvbiB0byBhbGxvdyB1c2VycyB0byAmcXVvdDtMaWtlJnF1b3Q7IFRoZSBjdXJyZW50IFBhZ2UuPGJyLz48dT5Ob3RlOjwvdT4geW91IHNob3VsZCB0dXJuIHlvcnUgd2ViIHBhZ2VzIGFuZCBvdGhlciBpdGVtcyBpbnRvICZxdW90O0dyYXBoIE9iamVjdHMmcXVvdDsgZm9yIG9wdGltYWwgYmVoYXZpb3VyLjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJfY29tbWVudHN9PC9jb2RlPiBXaWxsIGRpc3BsYXkgYSBmb3JtIGFsbG93aW5nIHVzZXJzIHRvIGFkZCBhIGNvbW1lbnQgdG8gdGhlIGN1cnJlbnQgcGFnZSwgb3IgYW4gaXRlbSBvbiB0aGUgcGFnZSwgYW5kIHRvIHZpZXcgdGhlIGNvbW1lbnRzIG9mIG90aGVycy48L2xpPgo8L3VsPjxici8+CiA8cD5UaGUgc2ltcGxlc3Qgd2F5IHRvIGFkZCBmYWNlYm9vayBpbnRlZ3JhdGlvbiBpbnRvIHlvdXIgc2l0ZSBpcyBqdXN0IHRvIGFkZCA8Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9pbml0fXtjZ2ZiX2xpa2V9PC9jb2RlPiBpbnRvIHRoZSBwYWdlIHRlbXBsYXRlIG9mIHlvdXIgc2l0ZS4gIE5vdyBhbnkgcGFnZSB0aGF0IHVzZXMgdGhpcyBwYWdlIHRlbXBsYXRlIHdpbGwgaGF2ZSBhIGZhY2Vib29rICZxdW90O0xpa2UmcXVvdDsgYnV0dG9uIGF0dGFjaGVkIHRvIGl0LiAgWW91IGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBhIGZhY2Vib29rIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLjwvcD4KPHA+VGhlIG5leHQgbW9zdCBjb21tb24gd2F5IHRvIGFkZCBmYWNlYm9vayBpbnRlZ3JhdGlvbiBpbnRvIHlvdXIgc2l0ZSBpcyB0byBhbGxvdyB2aXNpdG9ycyB0byBlbnRlciBjb21tZW50cy4gIFlvdSBjYW4gZG8gdGhpcyBieSBhZGRpbmcgdGhlIDxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2luaXR9e2NnZmJfY29tbWVudHN9PC9jb2RlPiB0YWcgaW50byB5b3VyIHBhZ2UgdGVtcGxhdGUuPC9wPgogPHA+QWRkaW5nIGEgJnF1b3Q7bGlrZSZxdW90OyBidXR0b24gYmVzaWRlIGVhY2ggZW50cnkgb24geW91ciBQcm9kdWN0IHN1bW1hcnkgdmlld3MgeW91IGNhbiBzaW1wbHkgcGFzcyB0aGUgZGV0YWlsIHVybCB2YWx1ZSBmb3IgZWFjaCBwcm9kdWN0IGRpc3BsYXllZCBpbiB0aGUgc3VtbWFyeSB2aWV3IGFzIHRoZSA8ZW0+aHJlZjwvZW0+IHBhcmFtZXRlciB0byB0aGUge2NnZmJfbGlrZX0gdGFnLiAgaS5lOjxici8+CiA8cHJlPntmb3JlYWNoIGZyb209XCRpdGVtcyBpdGVtPWVudHJ5fTxici8+eyogeW91ciBvdGhlciBzdW1tYXJ5IHRlbXBsYXRlIHN0dWZmICp9PGJyLz48c3BhbiBzdHlsZT0iY29sb3I6IGdyZWVuOyI+e2NnZmJfbGlrZSBocmVmPVwkZW50cnktPmRldGFpbF91cmx9PC9zcGFuPjxici8+ey9mb3JlYWNofTwvcHJlPgogPHA+Cgo8YnIvPjxoND48dT5JbnRlZ3JhdGluZyB3aXRoIE9wZW5HcmFwaDo8L3U+PC9oND4KPHA+SW50ZWdyYXRpbmcgd2l0aCBPcGVuR3JhcGggd2lsbCBhbGxvdyBmYWNlYm9vayB0byBiZXR0ZXIgdW5kZXJzdGFuZCB3aGF0IHR5cGUgb2YgZGF0YSBpcyBvbiB0aGUgcGFnZSAoYSB2aWRlbywgaW1hZ2UsIHBlcnNvbmFsIGluZm9ybWF0aW9uLCBjb21wYW55IGluZm9ybWF0aW9uLCBldGMpLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSBpbnRlZ3JhdGUgd2l0aCBPcGVuR3JhcGggYXMgbXVjaCBhcyBwb3NzaWJsZSBmb3IgbWF4aW11bSBlZmZlY3RpdmVuZXNzLCBhbmQgZm9yIHZpZXdpbmcgaW5mb3JtYXRpb24gYWJvdXQgZmFjZWJvb2sgJnF1b3Q7aW5zaWdodHMmcXVvdDsuPC9wPgogICA8cD5SZWZlcmVuY2U6IDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS9kb2NzL29wZW5ncmFwaCI+VGhlIE9wZW4gR3JhcGggUHJvdG9jb2w8L2E+PC9wPgo8dWw+CjxsaT48Y29kZT57Y2dmYl9vZ192YWx1ZX08L2NvZGU+IElzIHVzZWQgdG8gY3JlYXRlIGEgc2ltcGxlIG5hbWUvdmFsdWUgcGFpciBmb3IgeW91ciBPcGVuR3JhcGggT2JqZWN0LjwvbGk+CjxsaT48Y29kZT57Y2dmYl9vZ190aXRsZX08L2NvZGU+IElzIHVzZWQgdG8gc2V0IHRoZSAmcXVvdDtvZzp0aXRsZSZxdW90OyBhdHRyaWJ1dGUuPC9saT4KPGxpPjxjb2RlPntjZ2ZiX29nX3R5cGV9PC9jb2RlPiBJcyB1c2VkIHRvIHNldCB0aGUgJnF1b3Q7b2c6dHlwZSZxdW90OyBhdHRyaWJ1dGUuPC9saT4KPGxpPjxjb2RlPntjZ2ZiX29nX2ltYWdlfTwvY29kZT4gSXMgdXNlZCB0byBzZSB0aGUgJnF1b3Q7b2c6aW1hZ2UmcXVvdDsgYXR0cmlidXRlLjwvbGk+CjxsaT48Y29kZT57Y2dmYl9vZ19zaXRlbmFtZX08L2NvZGU+IElzIHVzZWQgdG8gc2V0IHRoZSAmcXVvdDtvZzpzaXRlbmFtZSZxdW90OyBhdHRyaWJ1dGUuPC9saT4KPGxpPjxjb2RlPntjZ2ZiX29nX2FkbWluc308L2NvZGU+IElzIHVzZWQgdG8gc2V0IHRoZSAmcXVvdDtmYjphZG1pbnMmcXVvdDsgYXR0cmlidXRlLjwvbGk+CjxsaT48Y29kZT57Y2dmYl9vZ19tZXRhfTwvY29kZT4gR2F0aGVycyBhbGwgdGhlIG9wZW5ncmFwaCBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBiZWVuIHNldCwgYW5kIGFwcGxpZXMgc29tZSBpbnRlbGlnZW50IGRlZmF1bHRzIHRvIHRob3NlIHRoYXQgaGF2ZSBub3QgYmVlbiBzZXQsIGFuZCBvdXRwdXRzIHRoZSBhcHByb3ByaWF0ZSBtZXRhIHRhZ3MuPC9saT4KPC91bD48YnIvPgo8cD5UaGUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JhcGhwcm90b2NvbC5vcmciPk9wZW4gR3JhcGggUHJvdG9jb2w8L2E+IGVzc2VudGlhbGx5IGFsbG93cyB5b3UgdG8gZGVzY3JpYmUgcmVhbCB3b3JsZCBvYmplY3RzIHVzaW5nIG1ldGEgdGFncyBhbmQgSFRNTCBjb250ZW50LiAgV2hlbiB0aGUgT3BlbiBHcmFwaCBQcm90b2NvbCBGYWNlYm9vayB3aWxsIGVzc2VudGlhbGx5IHRyZWF0IHlvdXIgd2ViIHBhZ2UgYXMgYSAmcXVvdDtGYWNlYm9vayBQYWdlJnF1b3Q7IGFuZCB0aGUgc3RydWN0dXJlZCBkYXRhIHlvdSBwcm92aWRlIGRlZmluZXMgaG93IHlvdXIgcGFnZSB3aWxsIGJlIHByZXNlbnRlZCB0byBmYWNlYm9vay48L3A+CjxwPkltcGxlbWVudGluZyB0aGUgT3BlbiBHcmFwaCBQcm90b2NvbCBpbiB5b3VyIHBhZ2UgaXMgPGVtPnVzdWFsbHk8L2VtPiBhcyBzaW1wbGUgYXMgYWRkaW5nIHtjZ2ZiX29nX21ldGF9IGludG8gdGhlIGhlYWQgc2VjdGlvbiBvZiB5b3VyIHBhZ2UgdGVtcGxhdGUsIGFuZCB0aGVuIGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgYXR0cmlidXRlcyB0byBkZXNjcmliZSB5b3VyIG9iamVjdCBpbiB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlIHRlbXBsYXRlLCBHQ0Igb3IgcGFnZSBjb250ZW50IGJsb2NrLiAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHdpbGwgY3JlYXRlIG9wZW5ncmFwaCBvYmplY3RzIG9uIGVhY2ggcHJvZHVjdCBkZXRhaWwgcGFnZS48L3A+Cjx1bD4KPGxpPjEuICBFbnN1cmUgdGhhdCAmcXVvdDtwcm9jZXNzX3dob2xlX3RlbXBsYXRlJnF1b3Q7IGlzIHNldCB0byAmcXVvdDtmYWxzZSZxdW90OyBpbiB5b3VyIGNvbmZpZy5waHA8L2xpPgo8bGk+Mi4gIEFkZCB0aGUge2NnZmdfb2dfbWV0YX0gdGFnIHNvbWV3aGVyZSBpbiB0aGUgJmx0O2hlYWQmZ3Q7IHNlY3Rpb24gb2YgeW91ciBwYWdlIHRlbXBsYXRlLiAgT3B0aW9uYWxseSwgeW91IG1heSBhZGQgaXQgaW4gdGhlICZxdW90O1BhZ2UgU3BlY2lmaWMgTWV0YWRhdGEmcXVvdDsgc2VjdGlvbiBvZiB0aGUgcGFnZSB0aGF0IHlvdSB1c2UgZm9yIGEgUHJvZHVjdHMgRGV0YWlsIFZpZXcuPC9saT4KPGxpPjMuICBJbiB0aGUgZGVmYXVsdCBQcm9kdWN0cyBkZXRhaWwgdGVtcGxhdGUgYWRkIHRoZSBmb2xsb3dpbmcgbGluZXM6Cjxici8+CjxwcmU+PHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuOyI+e2NnZmJfb2dfdGl0bGUgdGl0bGU9XCRlbnRyeS0+cHJvZHVjdF9uYW1lfTxici8+e2NnZmJfb2dfdHlwZSB0eXBlPSdwcm9kdWN0J308L3NwYW4+PC9wcmU+CjwvcHJlPgo8L2xpPgo8L3VsPgo8YnIvPjxwPk9uY2UgeW91IGJyb3dzZSB0byBhIGRldGFpbCB2aWV3IG9mIGEgcHJvZHVjdCwgYW5kIHZpZXcgdGhlIHNvdXJjZSwgeW91IHNob3VsZCBub3cgc2VlIHRoZSBPcGVuIEdyYXBoIG1ldGEgdGFncyBpbiB0aGUgcGFnZSBoZWFkZXIuICBOb3cgd2hlbiBjb21iaW5lZCB3aXRoIGEgbGlrZSBidXR0b24gYXMgZGVzY3JpYmVkIGFib3ZlLCB5b3VyIHdlYnNpdGUgaW50ZWdyYXRpb24gaXMgbmVhcmx5IGRvbmUuPC9wPgoKPGJyLz48aDQ+PHU+U2ltcGxlIEZhY2Vib29rIEFwcGxpY2F0aW9uczo8L3U+PC9oND4KPHVsPgogPGxpPjxjb2RlPntjZ2ZiX2luaXR9PC9jb2RlPiBXaWxsIG91dHB1dCB0aGUgamF2YXNjcmlwdCB0byBpbml0aWFsaXplIHRoZSBGYWNlYm9vayBKYXZhc2NyaXB0IEFQSS48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX2xvZ2lufTwvY29kZT4gV2lsbCBkaXNwbGF5IGEgRmFjZWJvb2sgbG9naW4gYnV0dG9uLjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJfbG9nb3V0fTwvY29kZT4gV2lsbCBkaXNwbGF5IGEgRmFjZWJvb2sgbG9nb3V0IGJ1dHRvbi48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX3VpZH08L2NvZGU+IFdpbGwgZGlzcGxheSB0aGUgdXNlcnMgRmFjZWJvb2sgVXNlciBJRC48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX2ludml0ZX08L2NvZGU+IFdpbGwgZGlzcGxheSBhbiBhZHZhbmNlZCBmb3JtIGFsbG93aW5nIHlvdXIgdXNlcnMgdG8gaW52aXRlIHRoZWlyIGZyaWVuZHMgdG8geW91ciBhcHBsaWNhdGlvbi48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX21lfTwvY29kZT4gV2lsbCByZXR1cm4gYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBGYWNlYm9vayBVc2VyIHRoYXQgaGUgaGFzIGFsbG93ZWQgeW91IHRvIHNlZS48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX2FwaX08L2NvZGU+IENhbiBtYWtlIGFueSByZXF1ZXN0IHRvIHRoZSBqYXZhc2NyaXB0IEdSQVBIIEFQSS48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX2FwcH08L2NvZGU+IFdpbGwgcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgZmFjZWJvb2sgYXBwbGljYXRpb24uPC9saT4KIDxsaT48Y29kZT57Y2dmYl9zZW5kfTwvY29kZT4gQ2FuIHNlbmQgYSBjb21tYW5kIHRvIHRoZSBGYWNlYm9vayBHcmFwaCBBUEkgdmlhIFBPU1QuPC9saT4KIDxsaT48Y29kZT57Y2dmYl93YWxscG9zdH08L2NvZGU+IFVzZXMgdGhlIEZhY2Vib29rIFJFU1QgQVBJIHRvIGNyZWF0ZSBhIHdhbGwgcG9zdCBmb3IgdGhlIGN1cnJlbnQgRmFjZWJvb2sgVXNlci48L2xpPgogPGxpPjxjb2RlPntjZ2ZiX3N0YXR1c308L2NvZGU+IFVzZXMgdGhlIEZhY2Vib29rIFJFU1QgQVBJIHRvIGNyZWF0ZSBhIHN0YXR1cyBwb3N0IGZvciB0aGUgY3VycmVudCBGYWNlYm9vayBVc2VyLjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJfZnFsfTwvY29kZT4gVXNpbmcgdGhlIEZhY2Vib29rIFJFU1QgQVBJIHNlbmQgdG8gc2VuZCBhbiBGUUwgcXVlcnkuPC9saT4KIDxsaT48Y29kZT57Y2dmYl9mcWxfbXVsdGl9PC9jb2RlPiBVc2luZyB0aGUgRmFjZWJvb2sgUkVTVCBBUEkgc2VuZCB0byBtdWx0aXBsZSBGUUwgcXVlcmllcyBpbiBhIHNpbmdsZSByZXF1ZXN0IDxlbT4oYmVjYXVzZSBGUUwgZG9lcyBub3Qgc3VwcG9ydCBqb2lucyk8L2VtPi48L2xpPgogPGxpPjxjb2RlPntjZ2ZidXNlcmRhdGFfZ2V0fTwvY29kZT4gV2lsbCByZXRyaWV2ZSB0aGUgaW5mb3JtYXRpb24geW91IGhhdmUgc3RvcmVkIGFib3V0IHRoaXMgdXNlciBmcm9tIHRoZSBkYXRhYmFzZS48L2xpPgogPGxpPjxjb2RlPntjZ2ZidXNlcmRhdGFfc2V0fTwvY29kZT4gV2lsbCBzdG9yZSBzZWxlY3RlZCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBmYWNlYm9vayB1c2VyIGludG8gdGhlIGRhdGFiYXNlLjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJ1c2VyZGF0YV9lcmFzZX08L2NvZGU+IFdpbGwgZXJhc2UgYSBwb3J0aW9uIG9mIHRoZSBnYXRoZXJlZCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBmYWNlYm9vayB1c2VyIGZyb20gdGhlIGRhdGFiYXNlLjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJ1c2VyZGF0YV9lcmFzZXVzZXJ9PC9jb2RlPiBXaWxsIGVyYXNlIGFsbCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBmYWNlYm9vayB1c2VyIGZyb20gdGhlIGRhdGFiYXNlLjwvbGk+CiA8bGk+PGNvZGU+e2NnZmJ1c2VyZGF0YV9hcHBmcmllbmRzfTwvY29kZT4gV2lsbCByZXRyaWV2ZSBhIGxpc3Qgb2YgdGhlIHVzZXJzIGZyaWVuZHMgdGhhdCBhbHNvIGhhdmUgaW5mb3JtYXRpb24gaW4gdGhlIGRhdGFiYXNlLjwvbGk+CjwvdWw+PGJyLz4KIDxwPkNyZWF0aW5nIGEgZmFjZWJvb2sgYXBwbGljYXRpb24gaW52b2x2ZXMgbnVtZXJvdXMgc3RlcHM6PC9wPgo8dWw+CiA8bGk+MS4gIENyZWF0ZSBhIENNU01TIHBhZ2UgdGVtcGxhdGUgdGhhdCBkaXNwbGF5cyBjb3JyZWN0bHkgaW4gYSB3aWR0aCBmbyA3NjAgcGl4ZWxzLiAgKEZvciBmdXR1cmUgcmVmZXJlbmNlIEkgd2lsbCByZWZlciB0byB0aGlzIHRlbXBsYXRlIGFzIHRoZSA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5mYl9jYW52YXM8L3NwYW4+IHRlbXBsYXRlLik8L2xpPgogPGxpPjIuICBDcmVhdGUgYSBuZXcgcGFnZSBpbiB5b3VyIENNU01TIHBhZ2UgaGllcmFyY2h5IHRoYXQgdXNlcyB0aGUgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+ZmJfY2FudmFzPC9zcGFuPiB0ZW1wbGF0ZS4gIEZvciByZWZlcmVuY2UgcHVycG9zZXMgbGV0cyBjYWxsIHRoaXMgdGhlIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPm15X2FwcDwvc3Bhbj4gcGFnZS48L2xpPgogPGxpPjMuICBSZWdpc3RlcmluZyBhIGZhY2Vib29rIGFwcGxpY2F0aW9uIGF0OiA8YSBocmVmPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9kZXZlbG9wZXJzL2NyZWF0ZWFwcC5waHAiPmh0dHA6Ly93d3cuZmFjZWJvb2suY29tL2RldmVsb3BlcnMvY3JlYXRlYXBwLnBocDwvYT48L2xpPgogPGxpPjQuICBTZXR0aW5nIHVwIHlvdXIgZmFjZWJvb2sgYXBwbGljYXRpb24gZm9yIGNvbXBhdGliaWxpdHksIGFuZCBlYXN5IGludGVncmF0aW9uIHdpdGggQ01TTVMuICBJIHdpbGwgbm90IGdvIHRocm91Z2ggdGhlIGRldGFpbCBvZiBhbGwgb2YgdGhlIHNldHRpbmdzIHlvdSBzaG91bGQgY2hhbmdlLiAgSG93ZXZlciB5b3Ugc2hvdWxkIGdpdmUgeW91ciBjYW52YXMgcGFnZSBhIG5hbWUsIGFuZCBzcGVjaWZ5IHRoZSBmdWxsIHVybCB0byB0aGUgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+bXlfYXBwPC9zcGFuPiBwYWdlIHRoYXQgd2lsbCByZXByZXNlbnQgeW91ciBjYW52YXMgcGFnZS4gIFlvdSBhbHNvIHNob3VsZCBzcGVjaWZ5IHRoZSAmcXVvdDtDYW52YXMgVHlwZSZxdW90OyBhcyAmcXVvdDtJZnJhbWUmcXVvdDs8YnIvPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSXQgYXBwZWFycyB0aGF0IGZhY2Vib29rIHJlcXVpcmVzIGEgJnF1b3Q7Zm9sZGVyJnF1b3Q7IGJlIHNwZWNpZmllZCBmb3IgdGhlIENhbnZhcyBVUkwsIHlvdSBtYXkgaGF2ZSB0byBlZGl0IHlvdXIgc2V0dGluZ3MgaW4gdGhlIGNvbmZpZy5waHAgZmlsZSAoaS5lIGVuYWJsZSBwcmV0dHkgdXJscywgYW5kIHJlbW92ZSBhIHBhZ2UgZXh0ZW5zaW9uKSBmb3IgZmFjZWJvb2sgdG8gYmUgaGFwcHkuPC9saT4KIDxsaT41LiAgSW4gdGhlICZxdW90O0NhbGd1eXMgRmFjZWJvb2sgVG9vbGtpdCZxdW90OyBhZG1pbiBwYW5lbCBmaWxsIGluIHRoZSAmcXVvdDtBcHBsaWNhdGlvbiBJRCZxdW90OyBhbmQgdGhlICZxdW90O0FwcCBTZWNyZXQmcXVvdDsgYXMgc3BlY2lmaWVkIGJ5IGZhY2Vib29rLiAgWW91IHNob3VsZCBhbHNvIHNlbGVjdCB0aGUgcGVybWlzc2lvbnMgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgbmVlZCBhcyBkZWZpbmVkIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS9kb2NzL2F1dGhlbnRpY2F0aW9uL3Blcm1pc3Npb25zIj5oZXJlPC9hPi48YnIvPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSXQgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBwZXJtaXNzaW9ucyB5b3Ugc2VsZWN0IHRvIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSBpbiBvcmRlciB0byBnZXQgd2lkZXIgYWNjZXB0YW5jZSBmb3IgeW91ciBhcHBsaWNhdGlvbi48L2xpPgogPGxpPjYuICBXaGVuIGVkaXRpbmcgeW91ciA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5mYl9jYW52YXM8L3NwYW4+IHBhZ2UgdGVtcGxhdGUsIGFkZCB0aGUgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfaW5pdH08L3NwYW4+IHRhZyBkaXJlY3RseSBhZnRlciB0aGUgb3BlbmluZyAmbHQ7Ym9keSZndDsgdGFnLiAgIFlvdSBtYXkgYWxzbyBhZGQgdGhlIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2xvZ2lufTwvc3Bhbj4gdGFnIGludG8gYW4gYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiB0aGUgdGVtcGxhdGUgKGluIHRoZSBoZWFkZXIgYmFyIG9yIGEgc2lkZWJhciBldGMpLiAgVGhpcyB3aWxsIGJvdGggaW5pdGlhbGl6ZSB0aGUgRmFjZWJvb2sgQVBJIGFuZCBwcm92aWRlIGEgbG9naW4gYnV0dG9uLiAgV2hlbiB2aXNpdG9ycyBjbGljayBvbiB0aGUgbG9naW4gYnV0dG9uIHRoZXkgd2lsbCBiZSBhc2tlZCB0byBhcHByb3ZlIHRoZSBwZXJtaXNzaW9ucyB5b3UgaGF2ZSByZXF1ZXN0ZWQuPC9saT4KIDxsaT43LiAgTm93IHdlIGFyZSByZWFkeSB0byBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IGZvciBvdXIgZmFjZWJvb2sgYXBwbGljYXRpb24uICBZb3Ugd2lsbCB1c2UgYSBjb21iaW5hdGlvbiBvZiBzbWFydHkgbG9naWMsIHRoZSBwbHVnaW5zIHByb3ZpZGVkIGJlbG93LCBhbmQgeW91ciBvd24gY29kZSwgb3Igb3RoZXIgbW9kdWxlcyB0byBidWlsZCB5b3VyIGFwcGxpY2F0aW9uLiBBIHNtYWxsIGV4YW1wbGUgYXBwbGljYXRpb24gaXMgYmVsb3cuPC9saT4KPC91bD48YnIvPgoKPGgzPlNhbXBsZSBBcHBsaWNhdGlvbjo8L2gzPgo8cD5UaGUgc2FtcGxlIGFwcGxpY2F0aW9uIGlsbHVzdHJhdGVkIGJlbG93IG5lZWRzIHRoZSBwdWJsaXNoX3N0cmVhbSx1c2VyX2xvY2F0aW9uLCBhbmQgZnJpZW5kc19sb2NhdGlvbiBwZXJtaXNzaW9ucy4gIFlvdSBjYW4gc2VsZWN0IHRoZXNlIGluIHRoZSBhZG1pbmlzdHJhdGlvbiBwYW5lbCBmb3IgdGhlIG1vZHVsZS4gIFlvdSB3aWxsIGFsc28gbmVlZCB0byByZWdpc3RhciBhIGZhY2Vib29rIGFwcGxpY2F0aW9uIGFuZCBmaWxsIGluIHlvdXIgYXBwbGljYXRpb24gaWQsIGFuZCBhcHAgc2VjcmV0IGludG8gdGhlIGFkbWluIHBhbmVsLjwvcD4KPHByZT4KPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfaW5pdH08L3NwYW4+eyogaW5pdGlhbGl6ZSBmYWNlYm9vayBqYXZhc2NyaXB0IFNESyAqfQo8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9sb2dpbn08L3NwYW4+eyogcHJvdmlkZSBhIGxvZ2luIGJ1dHRvbiB0byBmYWNlYm9vayAqfSA8YnIvPgo8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl91aWQgYXNzaWduPSdmYl91aWQnfTwvc3Bhbj57KiBnZXQgdGhlIGZhY2Vib29rIHVzZXIgaWQgKn0Ke2lmIFwkZmJfdWlkfQogIHsqIHVzZXIgaXMgbG9nZ2VkIGluICp9CgogIHsqIGdldCBoaXMgb3IgaGVyIGZyaWVuZHMgZnJpZW5kcyBsaXN0ICp9CiAgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfYXBpIGNhbGw9Jy9tZS9mcmllbmRzJyBhc3NpZ249J2ZyaWVuZHMnfTwvc3Bhbj4KCiAgeyogY3JlYXRlIGFuIEZRTCBxdWVyeSAqfQogIHtjYXB0dXJlIGFzc2lnbj0mcXVvdDtmcWwmcXVvdDt9c2VsZWN0IG5hbWUsIGJpcnRoZGF5X2RhdGUsIGN1cnJlbnRfbG9jYXRpb24sIHNleCwgcGljX3NxdWFyZSBmcm9tIHVzZXIgd2hlcmUgdWlkIElOIChTRUxFQ1QgdWlkMiBGUk9NIGZyaWVuZCBXSEVSRSB1aWQxPXtcJG1lLmlkfSl7L2NhcHR1cmV9CgogIHsqIGV4ZWN1dGUgYW4gRlFMIHF1ZXJ5ICp9CiAgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfZnFsIGZxbD1cJGZxbCBhc3NpZ249J3Jlcyd9PC9zcGFuPgoKICB7KiBwcm9jZXNzIHRoZSByZXN1bHRzIGZyb20gdGhlIHF1ZXJ5ICp9CiAge2lmIGlzX2FycmF5KFwkcmVzKX0KICAgICB7YXNzaWduIHZhcj0mcXVvdDtudW1fcG9pbnRzJnF1b3Q7IHZhbHVlPTB9CiAgICAgICAKICAgICB7KiBmb3IgZWFjaCBmcmllbmQgKn0KICAgICB7Zm9yZWFjaCBmcm9tPVwkcmVzIGl0ZW09JnF1b3Q7ZnJpZW5kJnF1b3Q7fQoKICAgICB7KiBpZiB3ZSBoYXZlIGEgbG9jYXRpb24gKn0KICAgICB7aWYgaXNzZXQoXCRmcmllbmQuY3VycmVudF9sb2NhdGlvbil9CgogICAgICAgIHsqIGJ1aWxkIGEgbG9jYXRpb24gc3RyaW5nICp9CiAgICAgICAge2Fzc2lnbiB2YXI9JnF1b3Q7bnVtX3BvaW50cyZxdW90OyB2YWx1ZT0iYFwkbnVtX3BvaW50cysxYCJ9CiAgICAgICAge2NhcHR1cmUgYXNzaWduPSZxdW90O2xvYyZxdW90O317c3RyaXB9CiAgICAgICAgICAge2lmIFwkZnJpZW5kLmN1cnJlbnRfbG9jYXRpb24uY291bnRyeSA9PSAmcXVvdDtDYW5hZGEmcXVvdDsgb3IgXCRmcmllbmQuY3VycmVudF9sb2NhdGlvbi5jb3VudHJ5ID09ICZxdW90O1VuaXRlZCBTdGF0ZXMmcXVvdDt9CiAgICAgICAgICAgICAgIHtcJGZyaWVuZC5jdXJyZW50X2xvY2F0aW9uLmNpdHl9LCB7XCRmcmllbmQuY3VycmVudF9sb2NhdGlvbi5zdGF0ZX0ge1wkZnJpZW5kLmN1cnJlbnRfbG9jYXRpb24uY291bnRyeX0KICAgICAgICAgICB7ZWxzZX0KICAgICAgICAgICAgICAge1wkZnJpZW5kLmN1cnJlbnRfbG9jYXRpb24uY2l0eX0ge1wkZnJpZW5kLmN1cnJlbnRfbG9jYXRpb24uY291bnRyeX0KICAgICAgICAgICB7L2lmfQogICAgICAgIHsvc3RyaXB9ey9jYXB0dXJlfQoKICAgICAgICB7KiBhZGQgYSBwb2ludCB0byBvdXIgbWFwICp9CiAgICAgICAge2NnZ21fYWRkX2R5bnBvaW50IG5hbWU9XCRmcmllbmQubmFtZSBhZGRyZXNzPVwkbG9jIGRlc2M9XCRmcmllbmQuc2V4fQogICAgIHsvaWZ9CiAgey9mb3JlYWNofQoKICB7aWYgXCRudW1fcG9pbnRzIGd0IDB9CiAgICAgeyogZGlzcGxheSB0aGUgbWFwICp9CiAgICAge0NHR29vZ2xlTWFwc30KICB7L2lmfQoKICB7L2lmfQp7L2lmfTwvcHJlPgoKPGgzPlNtYXJ0eSBGdW5jdGlvbiBSZWZlcmVuY2U6PC9oMz4KPHVsPgogPGxpPlNvY2lhbCBQbHVnaW5zOgogPHVsPgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2xpa2UgW3BhcmFtc11dPC9jb2RlPgogPHA+Q3JlYXRlIGEgJnF1b3Q7TGlrZSZxdW90OyBCdXR0b24gZm9yIGEgVVJMLjxici8+UGFyYW1ldGVyczoKICAgPHVsPgogICA8bGk+aHJlZiAtIChzdHJpbmcpIFRoZSBVUkwgdG8gYWxsb3cgcGVvcGxlIHRvIGxpa2UuICAoZGVmYXVsdCBpcyB0aGUgY3VycmVudCBwYWdlIFVSTC4pPC9saT4KICAgPGxpPmxheW91dCAtIChzdHJpbmcpIFRoZSBsYXlvdXQgb2YgYnV0dG9uLiAgUG9zc2libGUgdmFsdWVzIGFyZSBzdGFuZGFyZCxidXR0b25fY291bnQsYm94X2NvdW50LjwvbGk+CiAgIDxsaT5zaG93X2ZhY2VzIC0gKGJvb2xlYW4pIFdldGhlciB0byBzaG93IGZhY2VzIG9mIHRoZSBvdGhlcnMgdGhhdCBoYXZlIGxpa2VkIHRoZSBpdGVtLjwvbGk+CiAgIDxsaT5hY3Rpb24gLSAoc3RyaW5nKSBUaGUgYmVhdmlvdXIgb2YgdGhlIGJ1dHRvbiwgUG9zc2libGUgdmFsdWVzIGFyZSBsaWtlLHJlY29tbWVuZC48L2xpPgogICA8bGk+d2lkdGggLSAoaW50KSBUaGUgd2lkdGggb2YgdGhlIGxpa2UgYnV0dG9uIGluIHBpeGVscy48L2xpPgogICA8bGk+Zm9udCAtIChzdHJpbmcpIFRoZSBzdHJpbmcgdG8gdXNlIGZvciB0aGUgZm9ybSBvciBkaXNwbGF5LiAgVmFsdWVzIGFyZSBhcmlhbCxsdWNpZGUgZ3JhbmRlLHNlZ29lIHVsLHRhaG9tYSx2ZXJkYW5hPC9saT4KICAgPGxpPmNvbG9yc2NoZW1lIC0gKHN0cmluZykgVGhlIGNvbG9yIHNjaGVtZSBmb3IgdGhlIGZvcm0uICBWYWx1ZXMgYXJlIGxpZ2h0LGRhcms8L2xpPgogICA8bGk+cmVmIC0gKHN0cmluZykgQW4gb3B0aW9uYWwgcmVmZXJlbmNlIHZhbHVlIHRvIHVzZSBmb3Igc3RhdGlzdGljcyBwdXJwb3Nlcy48L2xpPgogICA8bGk+YXNzaWduIC0gKHN0cmluZykgIEFzc2lnbiB0aGUgb3V0cHV0IHRvIGEgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgIDwvdWw+CiAgIDwvcD48YnIvPgogPC9saT4gICAgICAKCiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfY29tbWVudHMgW3BhcmFtc119PC9jb2RlPgogPHA+Q3JlYXRlIGEgZm9ybSBhbGxvd2luZyBmYWNlYm9vayB1c2VycyB0byBsZWF2ZSBjb21tZW50cyBvbiBhIHBhZ2UsIG9yIG9uIGFuIGl0ZW0uPGJyLz5QYXJhbWV0ZXJzOgogPHVsPgogICA8bGk+dW5pcXVlaWQgLSAoc3RyaW5nKSBBIHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZSB0byBpZGVudGlmeSB0aGUgaXRlbSB0aGF0IGlzIGJlaW5nIGNvbW1lbnRlZCBvbi4gKGRlZmF1bHQgaXMgYSBoYXNoIG9mIHRoZSBjdXJyZW50IHBhZ2UgdXJsKS48L2xpPgogICA8bGk+d2lkdGggLSAoaW50KSBUaGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgZm9ybSBpbiBwaXhlbHMuIChkZWZhdWx0IGlzIDQyNSk8L2xpPgogICA8bGk+bmNvbW1lbnRzIC0gKGludCkgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbW1lbnRzIHRvIGRpc3BsYXkgYXQgb25lIHRpbWUuICAoZGVmYXVsdCBpcyAxMCk8L2xpPgogICA8bGk+cHVibGlzaCAtIChib29sZWFuKSBXZXRoZXIgdGhlICZxdW90O3B1YmxpYyBjb21tZW50JnF1b3Q7IGNoZWNrYm94IHNob3VsZCBiZSBkaXNwbGF5ZWQuPC9saT4KICAgPGxpPmFzc2lnbiAtIChzdHJpbmcpICBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPC9saT4KCjwvdWw+CjwvbGk+Cgo8bGk+T3BlbkdyYXBoIFBsdWdpbnM6Cjx1bD4KICA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfb2dfdmFsdWUgbmFtZT0mbHQ7c3RyaW5nJmd0OyB2YWx1ZT0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiAgPHA+Q3JlYXRlIGEgbmFtZS92YWx1ZSBwYWlyIHRvIG91dHB1dCB3aXRoIGluZm9ybWF0aW9uIGZvciB0aGUgT3BlbkdyYXBoIEFQSS4gIFRoZXNlIG5hbWUvdmFsdWUgcGFpcnMgd2lsbCBiZSBjb2xsZWN0ZWQgYW5kIG91dHB1dCB3aXRoIHRoZSB7Y2dmYl9vZ19tZXRhfSB0YWcuICBJZiB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIHNldCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG92ZXJ3cml0ZSBpdHMgdmFsdWUuIFRoaXMgdGFnIGlzIG5vcm1hbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYm9keSBvZiBhIHBhZ2UgdGVtcGxhdGUgKHVzaW5nIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGNvbmRpdGlvbnMgaW4gQ01TTVMpLjxici8+UGFyYW1ldGVyczoKICAgPHVsPgogICAgICA8bGk+bmFtZSAtIChzdHJpbmcpIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS48L2xpPgogICAgICA8bGk+dmFsdWUgLSAoc3RyaW5nKSBUaGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLjwvbGk+CiAgIDwvdWw+CiAgPC9wPjxici8+CiAgPC9saT4KCiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX29nX3RpdGxlIHRpdGxlPSZsdDtzdHJpbmcmZ3Q7fTwvY29kZT4KICA8cD5TZXQgdGhlIG9nOnRpdGxlIGF0dHJpYnV0ZSwgdGhpcyBwbHVnaW4gaXMgZXNzZW50aWFsbHkgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIHRoZSB7Y2dmYl9vZ192YWx1ZX0gcGx1Z2luLjxici8+UGFyYW1ldGVyczoKICA8dWw+CiAgPGxpPnRpdGxlIC0gKHN0cmluZykgVGhlIHRpdGxlIG9mIHRoZSBvYmplY3QgYmVpbmcgZGVzY3JpYmVkLjwvbGk+CiAgPC91bD4KICA8L3A+PGJyLz4KICA8L2xpPgoKICA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfb2dfdHlwZSB0eXBlPSZsdDtzdHJpbmcmZ3Q7fTwvY29kZT4KICA8cD5TZXQgdGhlIG9nOnR5cGUgYXR0cmlidXRlLCB0aGlzIHBsdWdpbiBpcyBlc3NlbnRpYWxseSBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgdGhlIHtjZ2ZiX29nX3ZhbHVlfSBwbHVnaW4uPGJyLz5QYXJhbWV0ZXJzOgogIDx1bD4KICA8bGk+dHlwZSAtIChzdHJpbmcpIFRoZSBvYmplY3QgdHlwZS4gIE9uZSBvZjogYWN0aXZpdHksIHNwb3J0LCBiYXIsIGNvbXBhbnksIGNhZmUsIGhvdGVsLCByZXN0YXJhdW50LCBjYXVzZSwgc3BvcnRzX2xlYWd1ZSwgc3BvcnRzX3RlYW0sIGJhbmQsIGdvdmVybm1lbnQsIG5vbl9wcm9maXQsIHNjaG9vbCwgdW5pdmVyc2l0eSwgYWN0b3IsIGF0aGxldGUsIGF1dGhvciwgZGlyZWN0b3IsIG11c2ljaWFuLCBwb2xpdGljaWFuLCBwdWJsaWNfZmlndXJlLCBjaXR5LCBjb3VudHJ5LCBsYW5kbWFyaywgc3RhdGVfcHJvdmluY2UsIGFsYnVtLCBkcmluaywgZm9vZCwgZ2FtZSwgcHJvZHVjdCwgc29uZywgbW92aWUsIHR2X3Nob3csIGJsb2csIHdlYnNpdGUsIGFydGljbGU8L2xpPgogIDwvdWw+CiAgPC9wPjxici8+CiAgPC9saT4KCiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX29nX3VybCB1cmw9Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogIDxwPlNldCB0aGUgY2Fub25pY2FsIHVybCB0byB0aGUgb2JqZWN0IChvZzp1cmwpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIHRoZSBjdXJyZW50IHBhZ2UgdXJsLjwvcD4KICA8dWw+CiAgPGxpPnVybCAtIChzdHJpbmcpIFRoZSBjYW5vbmljYWwgVVJMIHRvIHRoZSBvYmplY3QuPC9saT4KICA8L3VsPgogIDwvcD48YnIvPgogIDwvbGk+CgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9vZ19pbWFnZSBpbWFnZT0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiAgPHA+U2V0IHRoZSB1cmwgb2YgYW4gaW1hZ2Ugd2hpY2ggc2hvdWxkIHJlcHJlc2VudCB0aGUgb2JqZWN0IGluIHRoZSBncmFwaC48L3A+CiAgPHVsPgogIDxsaT5pbWFnZSAtIChzdHJpbmcpIEEgVVJMIHRvIGFuIGltYWdlIChKUEcsUE5HLCBhbmQgR0lGIGFyZSBzdXBwb3J0ZWQpCiAgPC91bD4KICA8L3A+PGJyLz4KICA8L2xpPgoKICA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfb2dfc2l0ZW5hbWUgc2l0ZW5hbWU9Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogIDxwPlNldCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHlvdXIgd2Vic2l0ZS4gICBpLmU6ICZxdW90O0ZyZWRzIFByb2R1Y3RzJnF1b3Q7LiAgSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvciB0aGlzIHByb3BlcnR5IHRoZSBjdXJyZW50IHdlYiBzaXRlIG5hbWUgd2lsbCBiZSB1c2VkLi4KICA8dWw+CiAgPGxpPnNpdGVuYW1lIC0gKHN0cmluZykgVGhlIFNpdGUgbmFtZS48L2xpPgogIDwvdWw+CiAgPC9wPjxici8+CiAgPC9saT4KCiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX29nX2Rlc2MgZGVzYz0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiAgPHA+KG9nOmRlc2NyaXB0aW9uKSBTZXQgYSBicmllZiBkZXNjcmlwdGlvbiBmb3IgdGhlIG9iamVjdC4gIE9uZSBvciB0d28gc2VudGVuY2VzLgogIDx1bD4KICA8bGk+ZGVzYyAtIChzdHJpbmcpIFRoZSBEZXNjcmlwdGlvbi4KICA8L3VsPgogIDwvcD48YnIvPgogIDwvbGk+CgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9vZ19hZG1pbnMgYWRtaW5zPSZsdDtzdHJpbmcmZ3Q7fTwvY29kZT4KICA8cD4oZmI6YWRtaW5zKSBTZXQgdGhlIGxpc3Qgb2YgZmFjZWJvb2sgYWRtaW5zIGZvciB0aGlzIG9iamVjdC4KICA8dWw+CiAgPGxpPmFkbWlucyAtIChzdHJpbmcpIEEgY29tbWEgc2FwYXJhdGVkIGxpc3Qgb2YgZmFjZWJvb2sgdXNlciBpZHMgb3IgYSAgRmFjZWJvb2sgUGxhdGZvcm0gYXBwbGljYXRpb24gaWQuCiAgPC91bD4KICA8L3A+PGJyLz4KICA8L2xpPgoKICA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfbWV0YSBbcGFyYW1zXX08L2NvZGU+CiAgPHA+VGhpcyBwbHVnaW4gd2lsbCBnYXRoZXIgYWxsIG9mIHRoZSBwcmVzZXQgT3BlbkdyYXBoIHZhcmlhYmxlcywgYXBwbHkgc29tZSBpbnRlbGxpZ2VudCBkZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycyBub3Qgc3BlY2lmaWVkLCBhbmQgZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIG1ldGEgdGFncy4gIFRoaXMgcGx1Z2luIGlzIHR5cGljYWxseSBjYWxsZWQgd2l0aGluIHRoZSBoZWFkIHNlY3Rpb24gb2YgdGhlIHBhZ2UgdGVtcGxhdGUuICBUaGUgb3RoZXIgY2dmYl9vZyogcGx1Z2lucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBib2R5IG9mIHRoZSBwYWdlIHRlbXBsYXRlICh3aXRoZXIgd2l0aGluIHRoZSBwYWdlIHRlbXBsYXRlIGl0c2VsZiwgb3IgaW5zaWRlIG9mIGEgY29udGVudCBibG9jaywgb3IgZXZlbiBpbnNpZGUgb2YgYSBHQ0Igb3IgbW9kdWxlIHRlbXBsYXRlLiAgVGhlbiBiZWNhdXNlIChieSBkZWZhdWx0KSBwcm9jZXNzX3dob2xlX3RlbXBsYXRlIGlzIEZBTFNFIGluIHRoZSBjb25maWcucGhwIGZpbGUgb2YgQ01TTVMgdGhpcyBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgQUZURVIgdGhlIGJvZHkgb2YgdGhlIHRlbXBsYXRlLjxici8+UGFyYW1ldGVyczoKICA8dWw+CiAgPGxpPmFzc2lnbiAtIChzdHJpbmcpIEEgc21hcnR5IHZhcmlhYmxlIG5hbWUgdG8gYXNzaWduIHRoZSBvdXRwdXQgdG8uCiAgPC91bD4KICA8L3A+PGJyLz4KICA8L2xpPgoKPC91bD4KPC9saT4KCjxsaT5BcHBsaWNhdGlvbiBCdWlsZGluZyBQbHVnaW5zOgo8dWw+CiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfaW5pdCBbcGFyYW1zXX08L2NvZGU+CiAgIDxwPkluaXRpYWxpemVzIHRoZSBGYWNlYm9vayBKYXZhc2NyaXB0IEFQSTxici8+CiAgICAgICBQYXJhbWV0ZXJzOgogICAgICAgPHVsPgogICAgICAgPGxpPmFzeW5jIC0gKGJvb2xlYW4pIEVuYWJsZSBBc3luY2hyb25vdXMgQVBJIEluaXRpYWxpemF0aW9uIChkZWZhdWx0ID0gZmFsc2UpPC9saT4KICAgICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgIDwvdWw+CiAgIDwvcD48YnIvPgogPC9saT4KCiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfdWlkfTwvY29kZT4KIDxwPlJldHVybiB0aGUgVUlEICBvZiB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiBGYWNlYm9vayBVc2VyLjxici8+UGFyYW1ldGVyczoKIDx1bD4KICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX21lIGFzc2lnbj0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiA8cD5SZXR1cm4gYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBmYWNlYm9vayB1c2VyIGhhcyBzaGFyZWQgd2l0aCB0aGUgYXBwbGljYXRpb24uPGJyLz5QYXJhbWV0ZXJzOgogPHVsPgogICAgPGxpPmFzc2lnbiAtIChzdHJpbmcpICBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYl9tZSBhc3NpZ249JnF1b3Q7bWUmcXVvdDt9e1wkbWV8QHByaW50X3J9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9hcGkgY2FsbD0mbHQ7c3RyaW5nJmd0OyBhc3NpZ249Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogPHA+UGVyZm9ybSBhIEdFVCByZXF1ZXN0IHRvIHRoZSBGYWNlYm9vayBHcmFwaCBBUEksIGFuZCBhc3NpZ24gdGhlIHJlc3VsdHMgdG8gYSBzbWFydHkgdmFyaWFibGUuPGJyLz5QYXJhbWV0ZXJzOgogPHVsPgogICAgPGxpPmNhbGwgLSAoc3RyaW5nKSAgVGhlIGZhY2Vib29rIEdSQVBIIEFQSSBtZXRob2QgdG8gY2FsbC48L2xpPgogICAgPGxpPmFzc2lnbiAtIChzdHJpbmcpICBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYl9hcGkgY2FsbD0mcXVvdDsvbWUvZnJpZW5kcyZxdW90OyBhc3NpZ249JnF1b3Q7ZnJpZW5kcyZxdW90O317XCRmcmllbmRzfEBwcmludF9yfTwvY29kZT48L3ByZT48YnIvPgogPC9saT4KCiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfc2VuZCB1cmw9Jmx0O3N0cmluZyZndDsgYXNzaWduPSZsdDtzdHJpbmcmZ3Q7IC4uLn08L2NvZGU+CiA8cD5QZXJmb3JtYSBQT1NUIHJlcXVlc3QgdG8gdGhlIEZhY2Vib29rIEdyYXBoIEFQSSB0byBDcmVhdGUgYSBuZXcgcmVjb3JkIChldmVudCwgbGlrZSwgaW1hZ2UsIGV0Yykgd2l0aGluIEZhY2Vib29rLjx1Pk5vdGU6PC91PiB0aGlzIGlzIGEgbm9uLXN0YW5kYXJkIHNtYXJ0eSBwbHVnaW4gYXMgaXQgaXMgbm90IGEgZGlzcGxheSBsZXZlbCBlbGVtZW50LCBpbnN0ZWFkIGl0IG1heSBub3QgcmV0dXJuIGFueSBvdXRwdXQgYXQgYWxsLiAgVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgY29uZGl0aW9uYWxzIHRoYXQgYXJlIHRyaWdnZXJlZCBieSB1c2VyIGFjdGlvbnMuPGJyLz5QYXJhbWV0ZXJzOgogPHVsPgogICAgPGxpPnVyaSAtIChzdHJpbmcpICBUaGUgR3JhcGggQVBJIHRvIHB1dCB0by4uPC9saT4KICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgIDxsaT48ZW0+T3RoZXIgUGFyYW1ldGVyczwvbGk+IC0gKG1peGVkKSBTcGVjaWZ5IHRoZSBkYXRhIHRvIHNlbmQgdG8gdGhlIGZhY2Vib29rIGdyYXBoIEFQSS4KIDwvdWw+CiA8L3A+PGJyLz4KIDxwcmU+RXhhbXBsZTo8YnIvPjxjb2RlPntpZiBpc3NldChcJHNtYXJ0eS5nZXQudGVsbF9teV9mcmllbmRzKX08YnIvPntjZ2ZiX2FwaSBjYWxsPSZxdW90Oy9tZS9mcmllbmRzJnF1b3Q7IGFzc2lnbj0mcXVvdDtmcmllbmRzJnF1b3Q7fTxici8+e2ZvcmVhY2ggZnJvbT1cJGZyaWVuZHMgaXRlbT0mcXVvdDtmcmllbmQmcXVvdDt9PGJyLz57Y2FwdHVyZSBhc3NpZ249dXJpfXtcJGZyaWVuZH0vbGlua3N7L2NhcHR1cmV9PGJyLz48c3BhbiBzdHlsZT0iY29sb3I6IGdyZWVuOyI+e2NnZmJfc2VuZCB1cmk9XCR1cmkgbGluaz0mcXVvdDtodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7IG1lc3NhZ2U9JnF1b3Q7Q2hlY2sgb3V0IHRoaXMgYXdhcmQgd2lubmluZyBDTVMgUGFja2FnZSZxdW90O308L3NwYW4+PGJyLz57L2ZvcmVhY2h9PGJyLz57L2lmfTwvY29kZT48L3ByZT48YnIvPgogPC9saT4KCiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJfd2FsbHBvc3QgbXNnPSZsdDtzdHJpbmcmZ3Q7IG5hbWU9Jmx0O3N0cmluZyZndDsgaHJlZj0mbHQ7c3RyaW5nJmd0OyAuLi59PC9jb2RlPgogPHA+Q3JlYXRlIGEgd2FsbCBwb3N0IG9uIGEgdXNlcnMgd2FsbC4gQWxsb3dzIHVwIHRvIDUgaW1hZ2VzLCBhZGRpdGlvbmFsIGxpbmtzLCBhbmQgYWxsb3dzIGFzc29jaWF0aW5nIGRhdGEgd2l0aCB0aGUgd2FsbCBwb3N0IGZvciB0cmFja2luZyBwdXJwb3Nlcy4gIFdhbGwgcG9zdHMgYWxsb3cgZm9yIGEgc2luZ2xlICZxdW90O2F0dGFjaG1lbnQmcXVvdDsgd2l0aCBhbiBpbWFnZSwgYSB2aWRlbywgZXRjLiBhbmQgdXAgdG8gNSBpbWFnZXMgd2l0aCBhc3NvY2lhdGVkIFVSTFMuPGJyLz5QYXJhbWV0ZXJzOgogPHVsPgogICAgPGxpPnRvIC0gKHN0cmluZykgVGhlIEZhY2Vib29rIFVJRCB0byBzZW5kIHRoZSB3YWxsIHBvc3QgdG8uICAoZGVmYXVsdCBpcyAmcXVvdDttZSZxdW90Oyk8L2xpPgogICAgPGxpPm1zZyAtIChzdHJpbmcpIFRoZSBtZXNzYWdlIHRvIHNlbmQgKGtlZXAgaXQgdG8gMTQwIGNoYXJhY3RlcnMgb3IgbGVzcyk8L2xpPgogICAgPGxpPm5hbWUgLSAoc3RyaW5nKSBUaGUgbmFtZSBvZiBhdHRhY2htZW50LjwvbGk+ICAKICAgIDxsaT5ocmVmIC0gKHN0cmluZykgQSBVUkwgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGF0dGFjaG1lbnQ8L2xpPgogICAgPGxpPmNhcHRpb24gLSAoc3RyaW5nKSBBIGNhcHRpb24gZm9yIHRoZSBhdHRhY2htZW50PC9saT4KICAgIDxsaT5kZXNjcmlwdGlvbiAtIChzdHJpbmcpIEEgZGVzY3JpcHRpb24gZm9yIHRoZSBhdHRhY2htZW50LjwvbGk+CiAgICA8bGk+eGlkIC0gKHN0cmluZykgY29tbWVudHMgeGlkPC9saT4KICAgIDxsaT5pbWFnZXMgLSAoc3RyaW5nKSBoYXNoIG9mIHNyYz1ocmVmIHBhaXJzIHByb3ZpZGluZyB1cCB0byA1IGltYWdlcyBmb3IgdGhlIHBvc3QgYXR0YWNobWVudC4KICAgIDxsaT5pbWFnZTEgdGhyb3VnaCBpbWFnZTUgLSAoc3RyaW5nKSBhIHN0cmluZyBvZiB0aGUgZm9ybWF0IHNyYzo6OmhyZWYgZGVzY3JpYmluZyBhbiBpbWFnZSBmb3IgdGhlIGF0dGFjaG1lbnQuPC9saT4KICAgIDxsaT5wcm9wMSB0aHJvdWdoIHByb3A1IC0gKHN0cmluZykgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIG5hbWUsdmFsdWUsYW5kIGhyZWYgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIG9wdGlvbnMvcHJvcGVydGllcyBmb3IgdGhlIGJvdHRvbSBvZiB0aGUgd2FsbCBwb3N0LgogICAgPGxpPmRhdGExIHRocm91Z2ggZGF0YTUgLSAoc3RyaW5nKSBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgbmFtZS92YWx1ZSBwYWlycyB1c2VkIHRvIGFzc29jaWF0ZSBkYXRhIHdpdGggdGhlIHBvc3QuCiAgICA8bGk+CiA8L3VsPgogPC9wPjxici8+CiA8cHJlPkV4YW1wbGU6IDxjb2RlPntjZ2ZiX3dhbGxwb3N0IHRvPW1lIG1zZz0mcXVvdDtUaGlzIGlzIGEgVGVzdCZxdW90OyBocmVmPSZxdW90O2h0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcmcXVvdDt9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9zdGF0dXMgdG89Jmx0O3N0cmluZyZndDsgbXNnPSZsdDtzdHJpbmcmZ3Q7IC4uLn08L2NvZGU+CiA8cD5DcmVhdGUgYSBzdGF0dXMgcG9zdCBvbiBhIHVzZXJzIGZlZWQuIEFsbG93cyBmb3IgYSBsaW5rLCBhIHBpY3R1cmUsIGEgbmFtZSwgYSBjYXB0aW9uLCBhbmQgYSBkZXNjcmlwdGlvbi4gQXMgd2VsbCBhcyBmb3IgdXAgdG8gMyBhZGRpdGlvbmFsIGFjdGlvbnMuICBUaGlzIG1ldGhvZCB1c2VzIHRoZSBGYWNlYm9vayBHUkFQSCBBUEkuPGJyLz5QYXJhbWV0ZXJzOgogPHVsPgogICAgPGxpPnRvIC0gKHN0cmluZykgVGhlIEZhY2Vib29rIFVJRCB0byBzZW5kIHRoZSB3YWxsIHBvc3QgdG8uICAoZGVmYXVsdCBpcyAmcXVvdDttZSZxdW90Oyk8L2xpPgogICAgPGxpPm1zZyAtIChzdHJpbmcpIFRoZSBtZXNzYWdlIHRvIHNlbmQgKGtlZXAgaXQgdG8gMTQwIGNoYXJhY3RlcnMgb3IgbGVzcyk8L2xpPgogICAgPGxpPmxpbmsgLSAoc3RyaW5nKSBBIFVSTCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHBvc3QuPC9saT4KICAgIDxsaT5waWN0dXJlIC0gKHN0cmluZykgYSBVUkwgdG8gYSBwaWN0dXJlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcG9zdC48L2xpPgogICAgPGxpPmNhcHRpb24gLSAoc3RyaW5nKSBBIGNhcHRpb24gZm9yIHRoZSBwaWN0dXJlLjwvbGk+CiAgICA8bGk+ZGVzY3JpcHRpb24gLSAoc3RyaW5nKSBBIGRlc2NyaXB0aW9uIGZvciB0aGUgcGljdHVyZS4uPC9saT4KICAgIDxsaT5hY3Rpb25zIC0gKG1peGVkKSBFaXRoZXIgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleSB2YWx1ZSBwYWlycywgb3IgYSBoYXNoIG9mIGtleS92YWx1ZSBwYWlycyBzcGVjaWZ5aW5nIGJ1dHRvbiBuYW1lcyBhbmQgVVJMUyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgcG9zdC48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYl9zdGF0dXMgdG89JnF1b3Q7bWUmcXVvdDsgIG1zZz0mcXVvdDtJIHJlYWxseSBsaWtlIHRoaXMgYXBwJnF1b3Q7PGJyLz5hY3Rpb25zPSZxdW90O1ZpZXcgc3RvcmU9aHR0cDovL3d3dy5teXNpdGUuY29tL3N0b3JlLFZpZXcgRXZlbnRzPWh0dHA6Ly93d3cubXlzaXRlLmNvbS9ldmVudHMmcXVvdDt9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYl9pbnZpdGUgLi4ufTwvY29kZT4KIDxwPkNyZWF0ZSBhIGZvcm0gdG8gaW52aXRlIHlvdXIgdXNlcnMgZmFjZWJvb2sgZnJpZW5kcywgYW5kIG90aGVycyB0byB1c2UgeW91ciBmYWNlYm9vayBhcHBsaWNhdGlvbi4gIFRoaXMgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBmYWNlYm9vayBzb2NpYWwgcGx1Z2luIGZvciBpbnZpdGluZyBwZW9wbGUuICBUaGlzIHBsdWdpbiB1c2VzIHRoZSBkZWZhdWx0IGludml0ZSB0ZW1wbGF0ZSBhcyBzcGVjaWZpZWQgaW4gdGhpcyBtb2R1bGVzIGFkbWluIHBhbmVsIHVubGVzcyBhIGRpZmZlcmVudCB0ZW1wbGF0ZSBpcyBzcGVjaWZpZWQuPGJyLz5QYXJhbWV0ZXJzOgogPHVsPgogICAgPGxpPmRlc3RfdXJsIC0gKHN0cmluZykgVGhlIHVybCB0byByZWRpcmVjdCB0byBhZnRlciB0aGUgZm9ybSBoYXMgYmVlbiBzdWJtaXR0ZWQuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIFVSTCB3aWxsIGJlIHVzZWQuPC9saT4KICAgIDxsaT5hcHBfbmFtZSAtIChzdHJpbmcpIFRoZSBuYW1lIG9mIHlvdXIgYXBwbGljYXRpb24uICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBzaXRlIG5hbWUgd2lsbCBiZSB1c2VkLjwvbGk+CiAgICA8bGk+ZXhjbHVkZV9pZHMgLSAoc3RyaW5nKSBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZmFjZWJvb2sgVUlEcyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHRoZSBmcmllbmRzIHRvIGludml0ZSBsaXN0LjwvbGk+CiAgICA8bGk+Y29udGVudCAtIChzdHJpbmcpIEFuIGluc3RydWN0aW9uYWwgbWVzc2FnZSB0byBkaXNwbGF5IHRvIHVzZXJzIGF0IHRoZSB0b3Agb2YgdGhlIGZvcm0uPC9saT4KICAgIDxsaT5ib3JkZXIgLSAoYm9vbGVhbikgU2hvdWxkIHRoZSBmb3JtIGhhdmUgYSBib3JkZXIuPC9saT4KICAgIDxsaT5lbWFpbF9pbnZpdGUgLSAoYm9vbGVhbikgRW5hYmxlIGFuIGVtYWlsIGludml0ZSBzZWN0aW9uIHRvIHRoZSBmb3JtLjwvbGk+CiAgICA8bGk+ZW1haWxfaW52aXRlIC0gKGJvb2xlYW4pIEVuYWJsZSB0aGUgZW1haWwgY29udGFjdCBpbXBvcnRlci48L2xpPgogICAgPGxpPmNvbmRlbnNlZCAtIChib29sZWFuKSBlbmFibGUgdGhlIGNvbmRlbnNlZCBmb3JtLjwvbGk+CiAgICA8bGk+Y29scyAtIChpbnQpIGVpdGhlciAyLDMsIG9yIDUgLSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gZGlzcGxheSBieSBkZWZhdWx0LCB0aGlzIGluZmx1ZW5jZXMgdGhlIHNpemUgb2YgdGhlIGZvcm0uPC9saT4KICAgIDxsaT5tYXggLSAoaW50KSBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnJpZW5kcyB0byBpbnZpdGUgYXQgb25lIHRpbWUuICAobWluIDEsIG1heCAzNSk8L2xpPgogICAgPGxpPmJ5cGFzcyAtIChzdHJpbmcpIFRoZSBWZXJzaW9uIG9mIHRoZSAmcXVvdDtieXBhc3MmcXVvdDsgYnV0dG9uIG9uIHRoZSBmb3JtLiBvcHRpb25zIGFyZSBzdGVwLHNraXAsb3IgY2FuY2VsLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBza2lwLgogICAgPGxpPnRlbXBsYXRlIC0gKHN0cmluZykgVGhlIG5hbWUgb2YgYSBub24tZGVmYXVsdCBpbnZpdGUgZm9ybSB0ZW1wbGF0ZSB0byB1c2UuPC9saT4KICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYl9pbnZpdGUgY29udGVudD0mcXVvdDtJbnZpdGUgeW91ciBmcmllbmRzIHRvIHVzZSB0aGlzIGZ1bmt5IGFwcCZxdW90O308L2NvZGU+PC9wcmU+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2ZxbCBmcWw9Jmx0O3N0cmluZyZndDsgYXNzaWduPSZsdDtzdHJpbmcmZ3Q7fTwvY29kZT4KIDxwPlNlbmQgYW4gRlFMIFJlcXVlc3QgdG8gRmFjZWJvb2suPC9wPgogPHVsPgogICAgPGxpPmZxbCAtIChzdHJpbmcgLSByZXF1aXJlZCkgIFRoZSBmYWNlYm9vayBGUUwgcmVxdWVzdCBzdHJpbmc8L2xpPgogICAgPGxpPmFzc2lnbiAtIChzdHJpbmcpICBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYl9mcWwgZnFsPT0mcXVvdDtTRUxFQ1QgbmFtZSBGUk9NIHVzZXIgV0hFUkUgdWlkID0gbWUoKSZxdW90OyBhc3NpZ249JnF1b3Q7bXlfbmFtZSZxdW90O308L2NvZGU+PC9wcmU+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZiX2ZxbF9tdWx0aSAuLi59PC9jb2RlPgogPHA+U2VuZCB1cCB0byA1IEZRTCBxdWVyaWVzIEZhY2Vib29rIGluIGEgc2luZ2xlIHJlcXVlc3QuPC9wPgogPHVsPgogICAgPGxpPnF1ZXJ5MSB0aHJvdWdoIHF1ZXJ5NSAtIChzdHJpbmcgLSByZXF1aXJlZCkgIFRoZSBmYWNlYm9vayBGUUwgcmVxdWVzdCBzdHJpbmdzPC9saT4KICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZidXNlcmRhdGFfZ2V0IHVpZD0mbHQ7c3RyaW5nJmd0OyBhc3NpZ249Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogPHA+UmV0cmlldmUgdGhlIGRhdGEgcmVsYXRlZCB0byB0aGUgc3BlY2lmaWVkICB1c2VyIGZyb20gdGhlIGRhdGFiYXNlLjwvcD4KIDxwPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Tm90ZTo8L3NwYW4+IFRoaXMgY29kZSBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC48L3A+CiA8dWw+CiAgICA8bGk+dWlkIC0gKHN0cmluZykgIFRoZSBmYWNlYm9vayBVc2VyIElEPC9saT4KICAgIDxsaT5hc3NpZ24gLSAoc3RyaW5nKSAgQXNzaWduIHRoZSBvdXRwdXQgdG8gYSBzbWFydHkgdmFyaWFibGUuPC9saT4KIDwvdWw+CiA8L3A+PGJyLz4KIDxwcmU+RXhhbXBsZTogPGNvZGU+e2NnZmJ1c2VyZGF0YV9nZXQgdWlkPVwkZmJfdWlkIGFzc2lnbj0mcXVvdDtteWRhdGEmcXVvdDt9PC9jb2RlPjwvcHJlPjxici8+CiA8L2xpPgoKIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dmYnVzZXJkYXRhX3NldCB1aWQ9Jmx0O3N0cmluZyZndDsgIGtleT0mbHQ7c3RyaW5nJmd0OyAgdmFsPW1peGVkfTwvY29kZT4KIDxwPlN0b3JlIHNvbWUgZGF0YSBpbiB0aGUgdXNlciBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgZmFjZWJvb2sgdXNlci4gIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhZHZhbmNlZCBoaWVyYXJjaGljYWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggZGF0YSBmb3IgYSB1c2VyLjwvcD4KIDxwPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Tm90ZTo8L3NwYW4+IFRoaXMgY29kZSBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC48L3A+CiA8dWw+CiAgICA8bGk+dWlkIC0gKHN0cmluZykgIFRoZSBmYWNlYm9vayBVc2VyIElEPC9saT4KICAgIDxsaT5rZXkgLSAoc3RyaW5nKSAgQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgaGllcmFyY2hpY2FsIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhIGluLiAgSGllcmFyY2h5IGxldmVscyBhcmUgc2VwYXJhdGVkIHdpdGggYSAuLjwvbGk+CiAgICA8bGk+dmFsIC0gKG1peGVkKSBUaGUgZGF0YSB0byBzdG9yZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYnVzZXJkYXRhX3NldCB1aWQ9XCRmYl91aWQgYXNzaWduPSdzY29yZXMubGFzdHNjb3JlJyB2YWw9NX08L2NvZGU+PGJyLz4KICAgICAgRXhhbXBsZTogPGNvZGU+e2NnZmJ1c2VyZGF0YV9zZXQgdWlkPVwkZmJfdWlkIGFzc2lnbj0nc2NvcmVzLm51bWdhbWVzJyB2YWw9JnF1b3Q7XCRteWRhdGEuc2NvcmVzLm51bWdhbWVzKzEmcXVvdDt9PC9jb2RlPgogPC9wcmU+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZidXNlcmRhdGFfZXJhc2UgdWlkPSZsdDtzdHJpbmcmZ3Q7ICBrZXk9Jmx0O3N0cmluZyZndDt9PC9jb2RlPgogPHA+RXJhc2UgYSBwb3J0aW9uIG9mIHRoZSBkYXRhIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSBmb3IgdGhlIHNwZWNpZmllZCBmYWNlYm9vayB1c2VyIGlkLjwvcD4KIDxwPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Tm90ZTo8L3NwYW4+IFRoaXMgY29kZSBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC48L3A+CiA8dWw+CiAgICA8bGk+dWlkIC0gKHN0cmluZykgIFRoZSBmYWNlYm9vayBVc2VyIElEPC9saT4KICAgIDxsaT5rZXkgLSAoc3RyaW5nKSAgQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgaGllcmFyY2hpY2FsIGxvY2F0aW9uIHRvIGVyYXNlLiAgSGllcmFyY2h5IGxldmVscyBhcmUgc2VwYXJhdGVkIHdpdGggYSAuLjwvbGk+CiA8L3VsPgogPC9wPjxici8+CiA8cHJlPkV4YW1wbGU6IDxjb2RlPntjZ2ZidXNlcmRhdGFfZXJhc2UgdWlkPVwkZmJfdWlkIGFzc2lnbj0nc2NvcmVzLmxhc3RzY29yZScgdmFsPTV9PC9jb2RlPjxici8+PC9wcmU+PGJyLz4KIDwvbGk+CgogPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2ZidXNlcmRhdGFfZXJhc2V1c2VyIHVpZD0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiA8cD5FcmFzZSBhbGwgb2YgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgZmFjZWJvb2sgdXNlci48L3A+CiA8cD48c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPk5vdGU6PC9zcGFuPiBUaGlzIGNvZGUgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuPC9wPgogPHVsPgogICAgPGxpPnVpZCAtIChzdHJpbmcpICBUaGUgZmFjZWJvb2sgVXNlciBJRDwvbGk+CiA8L3VsPgogPC9wPjxici8+CiA8cHJlPkV4YW1wbGU6IDxjb2RlPntjZ2ZidXNlcmRhdGFfZXJhc2V1c2VyIHVpZD1cJGZiX3VpZH08L2NvZGU+PGJyLz48L3ByZT48YnIvPgogPC9saT4KCiA8bGk+PGNvZGUgc3R5bGU9ImNvbG9yOiBibHVlOyI+e2NnZmJ1c2VyZGF0YV9hcHBmcmllbmRzIHVpZD0mbHQ7c3RyaW5nJmd0O308L2NvZGU+CiA8cD5SZXR1cm4gYSBsaXN0IG9mIHRoZSBmcmllbmRzIG9mIHRoZSBzcGVjaWZpZWQgZmFjZWJvb2sgdXNlciB0aGF0IGFsc28gaGF2ZSBkYXRhIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UgZm9yIHRoaXMgYXBwbGljYXRpb24uPC9wPgogPHA+PHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5Ob3RlOjwvc3Bhbj4gVGhpcyBjb2RlIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LjwvcD4KIDx1bD4KICAgIDxsaT51aWQgLSAoc3RyaW5nKSAgVGhlIGZhY2Vib29rIFVzZXIgSUQ8L2xpPgogICAgPGxpPmFzc2lnbiAtIChzdHJpbmcpICBBc3NpZ24gdGhlIG91dHB1dCB0byBhIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogPC91bD4KIDwvcD48YnIvPgogICAgPHByZT5FeGFtcGxlOiA8Y29kZT57Y2dmYnVzZXJkYXRhX2FwcGZyaWVuZHMgdWlkPVwkZmJfdWlkIGFzc2lnbj0mcXVvdDthbHNvdXNpbmcmcXVvdDt9e1wkYWxzb3VzaW5nfEBwcmludF9yfTwvY29kZT48YnIvPjwvcHJlPjxici8+CiA8L2xpPgoKCgo8L3VsPgo8bGk+CjwvdWw+CjxoMz5SZXF1aXJlbWVudHM8L2gzPgo8aDM+UmVmZXJlbmNlczwvaDM+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgY2FsZ3V5cwpob21lcGFnZSBhdCA8YSBocmVmPSJodHRwOi8vY2FsZ3V5MTAwMC5jb20iPmNhbGd1eTEwMDAuY29tPC9hPi48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIAo8L3VsPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA4LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPgpFT1Q7CgojSQokbGFuZ1snaW5mb19pbml0X29uX2V2ZW50J10gPSAnVGhpcyBvcHRpb24gZW5hYmxlcyBhbiBldmVudCBoYW5kbGVyIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgamF2YXNjcmlwdCBjYWxscyBpbnRvIHRoZSBjb2RlIHRvIGluaXRpYWxpemUgZmFjZWJvb2sgd2hlbiB0aGUgcGFnZSBpcyByZW5kZXJlZC4nOwokbGFuZ1snaW5mb191c2VfYXN5bmNfaW5pdCddID0gJ1BlcmZvcm0gRmFjZWJvb2sgaW5pdGlhbGl6YXRpb24gYXN5bmNocm91bm91c2x5IGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZSA8ZW0+KG5vdGUgc29tZSBzY3JpcHRzIG1heSByZXF1aXJlIHN5bmNocm9ub3VzIGluaXRpYWxpemF0aW9uKTwvZW0+JzsKJGxhbmdbJ2luZm9fZmJpbml0YXN5bmNfdHBsJ10gPSAnVGhpcyB0ZW1wbGF0ZSBjb250YWlucyB0aGUgamF2YXNjcmlwdCBhbmQgb3RoZXIgY29kZSB0aGF0IGlzIGluc2VydGVkIGludG90IGhlIGdlbmVyYXRlZCBjb2RlIHRvIGVuYWJsZSBGYWNlYm9vayBBUElzIEFzeW5jaHJvbm91c2x5JzsKJGxhbmdbJ2luZm9fZmJpbml0c3luY190cGwnXSA9ICdUaGlzIHRlbXBsYXRlIGNvbnRhaW5zIHRoZSBqYXZhc2NyaXB0IGFuZCBvdGhlciBjb2RlIHRoYXQgaXMgaW5zZXJ0ZWQgaW50b3QgaGUgZ2VuZXJhdGVkIGNvZGUgdG8gZW5hYmxlIEZhY2Vib29rIEFQSXMnOwokbGFuZ1snaW5mb19mYl9wZXJtcyddID0gJ1doaWNoIHBlcm1pc3Npb25zIGRvZXMgeW91ciBmYWNlYm9vayBhcHBsaWNhdGlvbiByZXF1ZXN0IGZyb20gdGhlIHVzZXInOwokbGFuZ1snaW52aXRlX3RlbXBsYXRlJ10gPSAnSW52aXRlIFRlbXBsYXRlcyc7CgojSgoKI0sKCiNMCgojTQokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdBIHNldCBvZiB1dGlsaXRpZXMgYWxsb3dpbmcgeW91IHRvIGVhc2lseSBpbnRlZ3JhdGUgRmFjZWJvb2sgaW50byB5b3VyIGFwcGxpY2F0aW9uLCBvciBidWlsZCBzaW1wbGUgZmFjZWJvb2sgYXBwbGljYXRpb25zLic7CgojTgoKI08KCiNQCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ01vZHVsZSBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLCBwbGVhc2UgY2hlY2sgdGhlIG1vZHVsZXMgYWRtaW4gcGFuZWwnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsZSByZW1vdmVkLic7CiRsYW5nWydwcmV1bmludGFsbCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhpcyBtb2R1bGU/JzsKJGxhbmdbJ3Byb21wdF9pbml0X29uX2V2ZW50J10gPSAnVXNlIGFuIGV2ZW50IGhhbmRsZXIgdG8gYXV0b21hdGljYWxseSBpbml0aWFsaXplIGZhY2Vib29rJzsKJGxhbmdbJ3Byb21wdF91c2VfYXN5bmNfaW5pdCddID0gJ0luaXRpYWxpemUgRmFjZWJvb2sgQVBJcyBBc3luY2hyb25vdXNseSc7CgojUQoKI1IKCiNTCiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwoKI1QKJGxhbmdbJ3RpdGxlX2ZiaW5pdGFzeW5jX3RwbCddID0gJ0FzeW5jaHJvdW5vdXMgRmFjZWJvb2sgSW5pdGlhbGl6YXRpb24gVGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfZmJpbml0c3luY190cGwnXSA9ICdGYWNlYm9vayBJbml0aWFsaXphdGlvbiBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9pbnZpdGVfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSB0aGF0IGNvbnRyb2xzIHRoZSBmb3JtYXQgb2YgdGhlIGZibWwgdXNlZCBmb3IgY3JlYXRpbmcgYW4gaW52aXRlIGZvcm0nOwokbGFuZ1sndGl0bGVfc3lzZGZsdF9pbnZpdGUnXSA9ICdTeXN0ZW0gRGVmYXVsdCBJbnZpdGUgVGVtcGxhdGUnOwoKI1UKCiNWCgojVwoKI1gKCiNZCgojWgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.CGFacebook.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2ZhY2Vib29rLnBocCcpOwoKLyoqCiAqIEEgc2ltcGxlIGV4dGVuc2lvbiBmb3IgdGhlIGZhY2Vib29rIHBocCBjbGFzcyB0byBwcm92aWRlIGV4dGVuZGVkIGZ1bmN0aW9ucwogKgogKiBAYXV0aG9yIFJvYmVydCBDYW1wYmVsbAogKi8KY2xhc3MgQ0dGYWNlYm9vayBleHRlbmRzIEZhY2Vib29rCnsKICBwcml2YXRlICRfYXBwX2FjY2Vzc190b2tlbiA9IG51bGw7CiAgcHJpdmF0ZSAkX3VzZV9hcHBfdG9rZW4gPSBGQUxTRTsKCiAgLyoqCiAgICogUmV0cmlldmUgdGhlIGFwcGxpY2F0aW9uIGFjY2VzcyB0b2tlbi4gIElmIG5vIGNhY2hlZAogICAqIHZhbHVlIGlzIGZvdW5kIHRoZSB2YWx1ZSBpcyByZXRyaWV2ZWQgZnJvbSBmYWNlYm9vawogICAqIGFuZCBjYWNoZWQKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFwcEFjY2Vzc1Rva2VuKCkKICB7CiAgICBpZiggISR0aGlzLT5fYXBwX2FjY2Vzc190b2tlbiApIAogICAgICB7CgkkYXJncyA9IGFycmF5KAoJCSAgICAgICdncmFudF90eXBlJyA9PiAnY2xpZW50X2NyZWRlbnRpYWxzJywKCQkgICAgICAnY2xpZW50X2lkJyA9PiAkdGhpcy0+YXBwSWQsCgkJICAgICAgJ2NsaWVudF9zZWNyZXQnID0+ICR0aGlzLT5hcGlTZWNyZXQKCQkgICAgICApOwoKCSRjaCA9IGN1cmxfaW5pdCgpOwoJJHVybCA9ICdodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS9vYXV0aC9hY2Nlc3NfdG9rZW4nOwoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHVybCk7CgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCBmYWxzZSk7CgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIHRydWUpOwoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRhcmdzKTsKCSRkYXRhID0gY3VybF9leGVjKCRjaCk7CgkKCSR0aGlzLT5fYXBwX2FjY2Vzc190b2tlbiA9IGpzb25fZW5jb2RlKCRkYXRhKTsKICAgICAgfQogICAgcmV0dXJuICR0aGlzLT5fYXBwX2FjY2Vzc190b2tlbjsKICB9CgogIAogIC8qKgogICAqIFRvZ2dsZSB1c2luZyB0aGUgYXBwbGljYXRpb24gYWNjZXNzIHRva2VuLCBvciB0aGUgdXNlciBhY2Nlc3MgdG9rZW4KICAgKiBmb3IgcmVxdWVzdHMuCiAgICoKICAgKiBAcGFyYW0gYm9vbCBGbGFnIGluZGljYXRpbmcgd2V0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIHVzaW5nIHRoZSBhcHAgdG9rZW4gZm9yIGZ1cnRoZXIgcmVxdWVzdHMKICAgKiBAcmV0dXJuIHZvaWQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlQXBwVG9rZW4oJGZsYWcgPSBUUlVFKSB7CiAgICAkdGhpcy0+X3VzZV9hcHBfdG9rZW4gPSAkZmxhZzsKICB9CgoKICAvKioKICAgKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGFjY2VzcyB0b2tlbi4gIFRoaXMgbWV0aG9kIHVuZGVyc3RhbmRzIGlmIHRoZSBvYmplY3QgaXMgY3VycmVudGx5CiAgICogdXNpbmcgdGhlIGFwcGxpY2F0aW9uIGFjY2VzcyB0b2tlbiBvciB0aGUgdXNlciBhY2Nlc3MgdG9rZW4uCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbigpIHsKICAgIGlmKCAkdGhpcy0+X3VzZV9hcHBfdG9rZW4gKQogICAgICByZXR1cm4gJHRoaXMtPmdldEFwcEFjY2Vzc1Rva2VuKCk7CiAgICByZXR1cm4gcGFyZW50OjpnZXRBY2Nlc3NUb2tlbigpOwogIH0KfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.cgfb.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCi8qKgogKiBBIGNvbnZlbmllbmNlIGNsYXNzIGZvciBpbnRlcmFjdGluZyB3aWhoIGZhY2Vib29rCiAqCiAqIEBzZWUgQ0dGYWNlYm9vawogKiBAYXV0aG9yIFJvYmVydCBDYW1wYmVsbAogKi8KY2xhc3MgY2dmYiAKewogIHByaXZhdGUgc3RhdGljICRfZmI7CiAgcHJpdmF0ZSBzdGF0aWMgJF9mYnNlc3Npb247CiAgcHJpdmF0ZSBzdGF0aWMgJF9mYnVpZDsKICBwcml2YXRlIHN0YXRpYyAkX2ZibWU7CgogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGluaXQoKQogIHsKICAgIGlmKCBpc19vYmplY3Qoc2VsZjo6JF9mYikgKSByZXR1cm47CiAgICAKICAgICRtb2QgPSBjZ2VfdXRpbHM6OmdldF9tb2R1bGUoJ0NHRkJBcHAnKTsKICAgICRhcHBpZCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2ZiX2FwcGlkJyk7CiAgICAkYXBwc2VjcmV0ID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnZmJfYXBwc2VjcmV0Jyk7CgogICAgc2VsZjo6JF9mYiA9IG5ldyBDR0ZhY2Vib29rKGFycmF5KCdhcHBJZCc9PiRhcHBpZCwnc2VjcmV0Jz0+JGFwcHNlY3JldCwnY29va2llJz0+dHJ1ZSkpOwogICAgLy9zZWxmOjokX2ZiID0gbmV3IENHRmFjZWJvb2soYXJyYXkoJ2FwcElkJz0+JGFwcGlkLCdzZWNyZXQnPT4kYXBwc2VjcmV0KSk7CiAgICBzZWxmOjokX2Zic2Vzc2lvbiA9IHNlbGY6OiRfZmItPmdldFNlc3Npb24oKTsKICB9CgoKICAvKioKICAgKiBSZXR1cm4gdGhlIGZhY2Vib29rIGFwcGxpY2F0aW9uIGlkCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcHBpZCgpCiAgewogICAgJG1vZCA9IGNnZV91dGlsczo6Z2V0X21vZHVsZSgnQ0dGQkFwcCcpOwogICAgJGFwcGlkID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnZmJfYXBwaWQnKTsKICAgIHJldHVybiAkYXBwaWQ7CiAgfQoKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIGZhY2Vib29rIHVzZXJpZAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdWlkKCkKICB7CiAgICBzZWxmOjppbml0KCk7CgogICAgaWYoIGlzX251bGwoc2VsZjo6JF9mYnVpZCkgKQogICAgICB7Cgl0cnkgCgkgIHsKCSAgICBzZWxmOjokX2ZidWlkID0gc2VsZjo6JF9mYi0+Z2V0VXNlcigpOwoJICB9CiAgICAgICAgY2F0Y2goIEZhY2Vib29rQXBpRXhjZXB0aW9uICRlICkgCgkgIHsKCSAgICAvLyBub3RoaW5nIGhlcmUsIHlldAoJICB9CiAgICAgIH0KCiAgICByZXR1cm4gc2VsZjo6JF9mYnVpZDsKICB9CgoKICAvKioKICAgKiBHZXQgYSBsb2dpbiB1cmwgZm9yIHRoZSBmYWNlYm9vayB1c2VyCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfbG9naW5fdXJsKCkKICB7CiAgICBpZiggc2VsZjo6dWlkKCkgKSByZXR1cm47CiAgICAkbW9kID0gY2dlX3V0aWxzOjpnZXRfbW9kdWxlKCdDR0ZCQXBwJyk7CiAgICAkcGVybXMgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdmYl9wZXJtcycpOwogICAgJHBhcm1zID0gYXJyYXkoKTsKICAgIGlmKCAkcGVybXMgKSAkcGFybXNbJ3JlcV9wZXJtcyddID0gJHBlcm1zOwogICAgcmV0dXJuIHNlbGY6OiRfZmItPmdldExvZ2luVXJsKCRwYXJtcyk7CiAgfQoKCiAgLyoqCiAgICogR2V0IGEgbG9nb3V0IHVybCBmb3IgdGhlIGZhY2Vib29rIHVzZXIKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9sb2dvdXRfdXJsKCkKICB7CiAgICBpZiggIXNlbGY6OnVpZCgpICkgcmV0dXJuOwogICAgcmV0dXJuIHNlbGY6OiRfZmItPmdldExvZ091dFVybCgpOwogIH0KCgogIC8qKgogICAqIFBlcmZvcm0gYSBmYWNlYm9vayBBUEkgcmVxdWVzdCB1c2luZyB0aGUgdXNlciBhY2Nlc3MgdG9rZW4uCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcGkoJGNhbGwsICRtZXRob2QgPSAnR0VUJywgJHBhcmFtcyA9IGFycmF5KCkpCiAgewogICAgaWYoICFzZWxmOjp1aWQoKSApIHJldHVybjsKICAgIGlmKCAhJGNhbGwgKSByZXR1cm47CiAgICBpZiggIWlzX3N0cmluZygkY2FsbCkgKSByZXR1cm47CiAgICB0cnkKICAgICAgewoJJHJlcyA9IHNlbGY6OiRfZmItPmFwaSgkY2FsbCwkbWV0aG9kLCRwYXJhbXMpOwoJaWYoIGlzX2FycmF5KCRyZXMpICYmIGNvdW50KGFycmF5X2tleXMoJHJlcykpID09IDEgJiYgaXNzZXQoJHJlc1snZGF0YSddKSApCgkgIHsKCSAgICAkcmVzID0gJHJlc1snZGF0YSddOwoJICB9CglyZXR1cm4gJHJlczsKICAgICAgfQogICAgY2F0Y2goIEZhY2Vib29rQXBpRXhjZXB0aW9uICRlICkgCiAgICAgIHsKCS8vIG5vdGhpbmcgaGVyZSwgeWV0CiAgICAgIH0KICB9CgoKICAvKioKICAgKiBQZXJmb3JtIGEgZmFjZWJvb2sgUkVTVCBjYWxsCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXN0KCRkYXRhKQogIHsKICAgIGlmKCAhc2VsZjo6dWlkKCkgKSByZXR1cm47CiAgICBpZiggIWlzX2FycmF5KCRkYXRhKSApIHJldHVybjsKCiAgICB0cnkKICAgICAgewoJJHJlcyA9IHNlbGY6OiRfZmItPmFwaSgkZGF0YSk7CglyZXR1cm4gJHJlczsKICAgICAgfQogICAgY2F0Y2goIEZhY2Vib29rQXBpRXhjZXB0aW9uICRlICkgCiAgICAgIHsKCS8vIG5vdGhpbmcgaGVyZSwgeWV0CiAgICAgIH0KICB9CiAgCiAgLyoqCiAgICogUGVyZm9ybSBhIGZhY2Vib29rIEFQSSByZXF1ZXN0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbiBhY2Nlc3MgdG9rZW4uCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcHBfYXBpKCRjYWxsLCRtZXRob2QgPSAnR0VUJywgJHBhcmFtcyA9IGFycmF5KCkpCiAgewogICAgaWYoICEkY2FsbCApIHJldHVybjsKICAgIGlmKCAhaXNfc3RyaW5nKCRjYWxsKSApIHJldHVybjsKCiAgICB0cnkKICAgICAgewoJc2VsZjo6JF9mYi0+ZW5hYmxlQXBwVG9rZW4oKTsKCSRyZXMgPSBzZWxmOjokX2ZiLT5hcGkoJGNhbGwsJG1ldGhvZCwkcGFyYW1zKTsKCXNlbGY6OiRfZmItPmVuYWJsZUFwcFRva2VuKEZBTFNFKTsKCXJldHVybiAkcmVzOwogICAgICB9CiAgICBjYXRjaCggRmFjZWJvb2tBcGlFeGNlcHRpb24gJGUgKSAKICAgICAgewoJLy8gbm90aGluZyBoZXJlLCB5ZXQKICAgICAgfQogIH0KCgogIC8qKgogICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIGZhY2Vib29rIHVzZXIKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1lKCkKICB7CiAgICBzZWxmOjppbml0KCk7CgogICAgaWYoIGlzX251bGwoc2VsZjo6JF9mYm1lKSApCiAgICAgIHsKCXNlbGY6OiRfZmJtZSA9IHNlbGY6OmFwaSgnL21lJyk7CiAgICAgIH0KCiAgICByZXR1cm4gc2VsZjo6JF9mYm1lOwogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnFsKCRxdWVyeSkKICB7CiAgICBpZiggISRxdWVyeSApIHJldHVybjsKCiAgICAkdG1wID0gYXJyYXkoJ21ldGhvZCc9PidmcWwucXVlcnknLCdxdWVyeSc9PiRxdWVyeSk7CiAgICAkcmVzID0gc2VsZjo6cmVzdCgkdG1wKTsKICAgIAogICAgcmV0dXJuICRyZXM7CiAgfQoKCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcWxfbXVsdGkoLyogdmFyaWFibGUgYXJndW1lbnRzICovKQogIHsKICAgIC8vIGdldCB0aGUgYXJncywgYW5kIGNoZWNrIGZvciB0b28gbWFueS4uLiBvbmx5IDUgcXVlcmllcwogICAgJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CiAgICBpZiggaXNfYXJyYXkoJGFyZ3NbMF0pICYmIGNvdW50KCRhcmdzKSA+IDEgKSByZXR1cm47CiAgICBpZiggaXNfYXJyYXkoJGFyZ3NbMF0pICkKICAgICAgewoJJGFyZ3MgPSAkYXJnc1swXTsKICAgICAgfQogICAgaWYoIGNvdW50KCRhcmdzKSA+IDUgKSByZXR1cm47CgogICAgLy8gb2theSwgbWF4aW11bSBvZiA1IHF1ZXJpZXMuLiBhaW50IHRoYXQgbmljZS4KICAgICRxID0gYXJyYXkoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRhcmdzKTsgJGkrKyApCiAgICAgIHsKCSRxW10gPSAnIicuJGsuJyI6IicuJHYuJyInOwogICAgICB9CiAgICAkdG1wID0gYXJyYXkoJ21ldGhvZCc9PidmcWwubXVsdGlxdWVyeScsCgkJICdxdWVyaWVzJz0+JHEpOwogICAgJHJlcyA9IHNlbGY6OnJlc3QoJHRtcCk7CgogICAgcmV0dXJuICRyZXM7CiAgfQoJCQkJICAKfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.cgfbuserdata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIGNnZmJ1c2VyZGF0YQp7CiAgcHVibGljIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHt9CgogIC8qKgogICAqIEluaXRpYWxpemUgY2dmYnVzZXJkYXRhIHNtYXJ0eSBwbHVnaW5zLgogICAqCiAgICogQGFjY2VzcyBwcml2YXRlCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbml0KCkKICB7CiAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYnVzZXJkYXRhX2dldCcsYXJyYXkoJ2NnZmJ1c2VyZGF0YScsJ2dldCcpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2ZidXNlcmRhdGFfc2V0JyxhcnJheSgnY2dmYnVzZXJkYXRhJywnc2V0JykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJ1c2VyZGF0YV9lcmFzZScsYXJyYXkoJ2NnZmJ1c2VyZGF0YScsJ2VyYXNlJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJ1c2VyZGF0YV9lcmFzZXVzZXInLGFycmF5KCdjZ2ZidXNlcmRhdGEnLCdlcmFzZXVzZXInKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYnVzZXJkYXRhX2FwcGZyaWVuZHMnLGFycmF5KCdjZ2ZidXNlcmRhdGEnLCdhcHBmcmllbmRzJykpOwogIH0KCgogCiAgLyoqCiAgICogR2V0IGFsbCBkYXRhIGZyb20gdGhlIGRhdGFiYXNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGZhY2Vib29rIHVzZXIKICAgKiB1c2FnZToge2NnZmJ1c2VyZGF0YV9nZXQgdWlkPTxzdHJpbmc+IFthc3NpZ249PHN0cmluZz5dfQogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgJHVpZCA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywndWlkJyk7CiAgICBpZiggISR1aWQgKSByZXR1cm47CgogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRvYmogPSBuZXcgQXNzb2NEYXRhKCRkYiwnY2dmYmFwcCcpOwogICAgJGRhdGEgPSAkb2JqLT5HZXQoJHVpZCk7CiAgICAKICAgIGlmKCBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKQogICAgICB7Cgkkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sJGRhdGEpOwoJcmV0dXJuOwogICAgICB9CiAgICByZXR1cm4gJGRhdGE7CiAgfQoKCiAgLy8ge2NnZmJ1c2VyZGF0YV9zZXQgdWlkPWFiY2RlZmcga2V5PSdhLmIuYy5kJyB2YWw9J2Zvbyd9CiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXQoJHBhcmFtcywmJHNtYXJ0eSkKICB7CiAgICAkdWlkID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCd1aWQnKTsKICAgICRrZXkgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ2tleScpOwogICAgJHZhbCA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywndmFsJyk7CgogICAgaWYoICEkdWlkIHx8ICEka2V5IHx8ICEkdmFsICkgcmV0dXJuOwoKICAgIC8vIGdldCB0aGUgZGF0YQogICAgJGRhdGEgPSBzZWxmOjpnZXQoYXJyYXkoJ3VpZCc9PiR1aWQpKTsKICAgICR0bXAgPSBleHBsb2RlKCcuJywka2V5KTsKICAgIGlmKCAhJGRhdGEgKSAkZGF0YSA9IGFycmF5KCk7CiAgICAkcmVjID0mICRkYXRhOwogICAgaWYoIGNvdW50KCR0bXApID4gMSApCiAgICAgIHsKCWZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0bXApIC0gMTsgJGkrKyApCgkgIHsKCSAgICBpZiggIWlzc2V0KCRyZWNbJHRtcFskaV1dKSApCgkgICAgICB7CgkJJHJlY1skdG1wWyRpXV0gPSBhcnJheSgpOwoJICAgICAgfQoJICAgICRyZWMgPSYgJHJlY1skdG1wWyRpXV07CgkgIH0KICAgICAgfQogICAgJHJlY1skdG1wW2NvdW50KCR0bXApLTFdXSA9ICR2YWw7CiAgICBkZWJ1Z190b19sb2coJGRhdGEsJ2NnZmJ1c2VyZGF0YV9zZXQnKTsKCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgJG9iaiA9IG5ldyBBc3NvY0RhdGEoJGRiLCdjZ2ZiYXBwJyk7CiAgICAkb2JqLT5TZXQoJHVpZCwkZGF0YSk7CiAgfQoKCiAgLy8ge2NnZmJ1c2VyZGF0YV9lcmFzZSB1aWQ9YWJjZGVmIGtleT0nYS5iLmMuZCd9CiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlcmFzZSgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgICR1aWQgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ3VpZCcpOwogICAgJGtleSA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywna2V5Jyk7CiAgICBpZiggISR1aWQgfHwgISRrZXkgKSByZXR1cm47CgogICAgJGRhdGEgPSBzZWxmOjpnZXQoYXJyYXkoJ3VpZCc9PiR1aWQpKTsKICAgICR0bXAgPSBleHBsb2RlKCcuJywka2V5KTsKICAgICRyZWMgPSYgJGRhdGE7CiAgICBpZiggY291bnQoJHRtcCkgPiAxICkKICAgICAgewoJZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRtcCkgLSAxOyAkaSsrICkKCSAgewoJICAgIGlmKCAhaXNzZXQoJHJlY1skdG1wWyRpXV0pICkKCSAgICAgIHsKCQkvLyBub3RoaW5nIHRvIGRvLCBrZXkgZG9lc24ndCBleGlzdC4KCQlyZXR1cm47CgkgICAgICB9CgkgICAgJHJlYyA9JiAkcmVjWyR0bXBbJGldXTsKCSAgfQogICAgICB9CiAgICB1bnNldCgkcmVjWyR0bXBbY291bnQoJHRtcCktMV1dKTsKCiAgICBkZWJ1Z190b19sb2coJGRhdGEsJ2NnZmJ1c2VyZGF0YV9kZWxldGUnKTsKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAkb2JqID0gbmV3IEFzc29jRGF0YSgkZGIsJ2NnZmJhcHAnKTsKICAgIGlmKCBjb3VudCgkdG1wKSApCiAgICAgIHsKCSRvYmotPlNldCgkdWlkLCRkYXRhKTsKICAgICAgfQogICAgJG9iai0+RGVsZXRlKCR1aWQpOwogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXJhc2V1c2VyKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgJHVpZCA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywndWlkJyk7CiAgICBpZiggISR1aWQgKSByZXR1cm47CgogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRvYmogPSBuZXcgQXNzb2NEYXRhKCRkYiwnY2dmYmFwcCcpOwogICAgJG9iai0+RGVsZXRlKCR1aWQpOwogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXBwZnJpZW5kcygkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgICR1aWQgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ3VpZCcpOwogICAgaWYoICEkdWlkICkgcmV0dXJuOwoKICAgIC8vIGdldCB0aGUgdXNlcnMgZnJpZW5kcy4KICAgICRyZXMgPSBjZ2ZiOjphcGkoJy9tZS9mcmllbmRzJywnR0VUJyk7CiAgICBpZiggISRyZXMgKSByZXR1cm47CiAgICBpZiggIWlzX2FycmF5KCRyZXMpICkgcmV0dXJuOwoKICAgICRmcmllbmRfdWlkcyA9IGNnZV9hcnJheTo6ZXh0cmFjdF9maWVsZCgkcmVzLCd1aWQnKTsKICAgIAogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRvYmogPSBuZXcgQXNzb2NEYXRhKCRkYiwnY2dmYmFwcCcpOwogICAgJHJlcyA9ICRvYmotPmZpbmQoJGZyaWVuZF91aWRzKTsKCiAgICBpZiggaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pICkKICAgICAgewoJJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCRkYXRhKTsKCXJldHVybjsKICAgICAgfQogICAgcmV0dXJuICRkYXRhOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.cgfb_og_smarty.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIGNnZmJfb2dfc21hcnR5CnsKICBzdGF0aWMgcHJpdmF0ZSAkX2luaXRpYWxpemVkOwoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluaXQoKQogIHsKICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9vZ192YWx1ZScsYXJyYXkoJ2NnZmJfb2dfc21hcnR5Jywnb2dfdmFsdWUnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9vZ190aXRsZScsYXJyYXkoJ2NnZmJfb2dfc21hcnR5Jywnb2dfdGl0bGUnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9vZ190eXBlJyxhcnJheSgnY2dmYl9vZ19zbWFydHknLCdvZ190eXBlJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfb2dfdXJsJyxhcnJheSgnY2dmYl9vZ19zbWFydHknLCdvZ191cmwnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9vZ19pbWFnZScsYXJyYXkoJ2NnZmJfb2dfc21hcnR5Jywnb2dfaW1hZ2UnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9vZ19zaXRlbmFtZScsYXJyYXkoJ2NnZmJfb2dfc21hcnR5Jywnb2dfc2l0ZW5hbWUnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9vZ19kZXNjJyxhcnJheSgnY2dmYl9vZ19zbWFydHknLCdvZ19kZXNjJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfb2dfYWRtaW5zJyxhcnJheSgnY2dmYl9vZ19zbWFydHknLCdvZ19hZG1pbnMnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9vZ19tZXRhJyxhcnJheSgnY2dmYl9vZ19zbWFydHknLCdvZ19tZXRhJykpOwogIH0KCgogIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gb2dfc2V0dmFsdWUoJGtleSwkdmFsdWUpCiAgewogICAgaWYoICEka2V5ICkgcmV0dXJuOwoKICAgICRkYXRhID0gYXJyYXkoKTsKICAgIGlmKCBjZ2VfdG1wZGF0YTo6ZXhpc3RzKCdjZ2ZiX29nJykgKQogICAgICB7CgkkZGF0YSA9IGNnZV90bXBkYXRhOjpnZXQoJ2NnZmJfb2cnKTsKICAgICAgfQogICAgJGRhdGFbJGtleV0gPSAkdmFsdWU7CiAgICBjZ2VfdG1wZGF0YTo6c2V0KCdjZ2ZiX29nJywkZGF0YSk7CiAgfQoKCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZ192YWx1ZSgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgIGlmKCAhaXNzZXQoJHBhcmFtc1snbmFtZSddKSB8fCAhaXNzZXQoJHBhcmFtc1sndmFsdWUnXSkgKSByZXR1cm47CgogICAgJGtleSA9ICRwYXJhbXNbJ25hbWUnXTsKICAgICR2YWwgPSAkcGFyYW1zWyd2YWx1ZSddOwogICAgc2VsZjo6b2dfc2V0dmFsdWUoJGtleSwkdmFsKTsKICB9CgoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9nX3RpdGxlKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3RpdGxlJ10pICkKICAgICAgewoJc2VsZjo6b2dfc2V0dmFsdWUoJ29nOnRpdGxlJyx0cmltKCRwYXJhbXNbJ3RpdGxlJ10pKTsKICAgICAgfQogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb2dfdHlwZSgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgIGlmKCBpc3NldCgkcGFyYW1zWyd0eXBlJ10pICkKICAgICAgewoJc2VsZjo6b2dfc2V0dmFsdWUoJ29nOnR5cGUnLHRyaW0oJHBhcmFtc1sndHlwZSddKSk7CiAgICAgIH0KICB9CgoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9nX3VybCgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgIGlmKCBpc3NldCgkcGFyYW1zWyd1cmwnXSkgKQogICAgICB7CglzZWxmOjpvZ19zZXR2YWx1ZSgnb2c6dXJsJyx0cmltKCRwYXJhbXNbJ3VybCddKSk7CiAgICAgIH0KICB9CgoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9nX2ltYWdlKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2ltYWdlJ10pICkKICAgICAgewoJc2VsZjo6b2dfc2V0dmFsdWUoJ29nOmltYWdlJyx0cmltKCRwYXJhbXNbJ2ltYWdlJ10pKTsKICAgICAgfQogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb2dfc2l0ZW5hbWUoJHBhcmFtcywmJHNtYXJ0eSkKICB7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snc2l0ZW5hbWUnXSkgKQogICAgICB7CglzZWxmOjpvZ19zZXR2YWx1ZSgnb2c6c2l0ZV9uYW1lJyx0cmltKCRwYXJhbXNbJ3NpdGVuYW1lJ10pKTsKICAgICAgfQogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb2dfZGVzYygkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydkZXNjJ10pICkKICAgICAgewoJc2VsZjo6b2dfc2V0dmFsdWUoJ29nOmRlc2NyaXB0aW9uJyx0cmltKCRwYXJhbXNbJ2Rlc2MnXSkpOwogICAgICB9CiAgfQoKCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZ19hZG1pbnMoJHBhcmFtcywmJHNtYXJ0eSkKICB7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snYWRtaW5zJ10pICkKICAgICAgewoJc2VsZjo6b2dfc2V0dmFsdWUoJ2ZiOmFkbWlucycsdHJpbSgkcGFyYW1zWydhZG1pbnMnXSkpOwogICAgICB9CiAgfQoKCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZ19tZXRhKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgLy8gcmVuZGVyIHRoZSB0YWdzLgogICAgJGRhdGEgPSBjZ2VfdG1wZGF0YTo6Z2V0KCdjZ2ZiX29nJyk7CiAgICAkZGF0YVsnZmI6YXBwX2lkJ10gPSBjZ2ZiOjphcHBpZCgpOwogICAgaWYoICFpc3NldCgkZGF0YVsnb2c6c2l0ZV9uYW1lJ10pICkKICAgICAgewoJJGRhdGFbJ29nOnNpdGVfbmFtZSddID0gZ2V0X3NpdGVfcHJlZmVyZW5jZSgnc2l0ZW5hZScsJ0NNU01TIFNpdGUnKTsKICAgICAgfQoKICAgICRvdXRwdXQgPSAnJzsKICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbHVlICkKICAgICAgewoJJG91dHB1dCAuPSAnPG1ldGEgcHJvcGVydHk9IicuJGtleS4nIiBjb250ZW50PSInLiR2YWx1ZS4nIi8+JzsKICAgICAgfQoKICAgIC8vIGRvbmUuCiAgICBpZiggaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pICkKICAgICAgewoJJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCRvdXRwdXQpOwoJcmV0dXJuOwogICAgICB9CgogICAgcmV0dXJuICRvdXRwdXQ7CiAgfQoKfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.cgfb_post.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIGNnZmJfcG9zdAp7CiAgcHJpdmF0ZSAkX2RhdGEgPSBhcnJheSgndG8nPT4nbWUnKTsKICBwcml2YXRlICRfYWN0aW9ucyA9IGFycmF5KCk7CiAgcHJpdmF0ZSAkX2F0dGFjaG1lbnQ7CiAgcHJpdmF0ZSAkX2tleXMgPSBhcnJheSgndG8nLCdtZXNzYWdlJyk7CgogIAogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbXNnLCR0bz0nbWUnKQogIHsKICAgICR0aGlzLT5tZXNzYWdlID0gJG1zZzsKICAgIGlmKCAkdG8gKSAkdGhpcy0+dG8gPSAkdG87CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgewogICAgaWYoICFpbl9hcnJheSgka2V5LCR0aGlzLT5fa2V5cykgKQogICAgICB7Cgl0aHJvdyBuZXcgRXhjZXB0aW9uKCdBdHRlbXB0IHRvIHJldHJpZXZlIGludmFsaWQgdmFsdWUgb2YgcG9zdCBvYmplY3QnKTsKICAgICAgfQoKICAgIGlmKCAhaXNzZXQoJHRoaXMtPl9kYXRhWyRrZXldKSApCiAgICAgIHsKCXJldHVybjsKICAgICAgfQoKICAgIHJldHVybiAkdGhpcy0+X2RhdGFbJGtleV07CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksJHZhbHVlKQogIHsKICAgIGlmKCAhaW5fYXJyYXkoJGtleSwkdGhpcy0+X2tleXMpICkKICAgICAgewoJdGhyb3cgbmV3IEV4Y2VwdGlvbignQXR0ZW1wdCB0byBzZXQgaW52YWxpZCB2YWx1ZSBvZiBwb3N0IG9iamVjdCcpOwogICAgICB9CgogICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbHVlOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBhZGRfYWN0aW9uKCRuYW1lLCRsaW5rKQogIHsKICAgIGlmKCAhJG5hbWUgfHwgISRsaW5rICkKICAgICAgewoJcmV0dXJuOwogICAgICB9CgogICAgJHRoaXMtPl9hY3Rpb25zW10gPSBhcnJheSgndGV4dCc9PiRuYW1lLCdsaW5rJz0+JGxpbmspOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfYXR0YWNobWVudChjZ2ZiX3Bvc3RfYXR0YWNobWVudCAkYXR0YWNobWVudCkKICB7CiAgICAkdGhpcy0+X2F0dGFjaG1lbnQgPSAkYXR0YWNobWVudDsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gdG9fYXJyYXkoKQogIHsKICAgICRvdXRwdXQgPSBhcnJheSgpOwogICAgJG91dHB1dFsndGFyZ2V0X2lkJ10gPSAoJHRoaXMtPnRvID09ICdtZScpP2NnZmI6OnVpZCgpOiR0aGlzLT50bzsKICAgICRvdXRwdXRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5tZXNzYWdlOwogICAgaWYoIGNvdW50KCR0aGlzLT5fYWN0aW9ucykgKQogICAgICB7Cgkkb3V0cHV0WydhY3Rpb25fbGlua3MnXSA9ICR0aGlzLT5fYWN0aW9uczsKICAgICAgfQogICAgaWYoIGlzX29iamVjdCgkdGhpcy0+X2F0dGFjaG1lbnQpICkKICAgICAgewoJJG91dHB1dFsnYXR0YWNobWVudCddID0gJHRoaXMtPl9hdHRhY2htZW50LT50b19hcnJheSgpOwogICAgICB9CiAgICByZXR1cm4gJG91dHB1dDsKICB9Cn0gLy8gY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.cgfb_post_attachment.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIGNnZmJfcG9zdF9hdHRhY2htZW50CnsKICBwcml2YXRlICRfa2V5cyA9IGFycmF5KCduYW1lJywnaHJlZicsJ2NhcHRpb24nLCdkZXNjcmlwdGlvbicsJ2NvbW1lbnRzX3hpZCcpOwogIHByaXZhdGUgJF9kYXRhID0gYXJyYXkoKTsKICBwcml2YXRlICRfYXNzb2MgPSBhcnJheSgpOwogIHByaXZhdGUgJF9wcm9wcyA9IGFycmF5KCk7CiAgcHJpdmF0ZSAkX21lZGlhID0gYXJyYXkoKTsKCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCRocmVmLCRjYXB0aW9uID0gJycsJGRlc2NyaXB0aW9uID0gJycpCiAgewogICAgaWYoICEkbmFtZSB8fCAhJGhyZWYgKSAKICAgICAgewoJdGhyb3cgbmV3IEV4Y2VwdGlvbignQXR0ZW1wdCB0byBjcmVhdGUgaW52YWxpZCBhdHRhY2htZW50IG9iamVjdCcpOwogICAgICB9CgogICAgJHRoaXMtPm5hbWUgPSAkbmFtZTsKICAgICR0aGlzLT5ocmVmID0gJGhyZWY7CiAgICBpZiggJGNhcHRpb24gKSAkdGhpcy0+Y2FwdGlvbiA9ICRjYXB0aW9uOwogICAgaWYoICRkZXNjcmlwdGlvbiApICR0aGlzLT5kZXNjcmlwdGlvbiA9ICRkZXNjcmlwdGlvbjsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkKICB7CiAgICBpZiggIWluX2FycmF5KCRrZXksJHRoaXMtPl9rZXlzKSApCiAgICAgIHsKCXRocm93IG5ldyBFeGNlcHRpb24oJ0F0dGVtcHQgdG8gcmV0cmlldmUgaW52YWxpZCB2YWx1ZSBmcm9tIHBvc3RfYXR0YWNobWVudCBvYmplY3QnKTsKICAgICAgfQoKICAgIGlmKCAhaXNzZXQoJHRoaXMtPl9kYXRhWyRrZXldKSApIHJldHVybjsKICAgIHJldHVybiAkdGhpcy0+X2RhdGFbJGtleV07CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksJHZhbHVlKQogIHsKICAgIGlmKCAhaW5fYXJyYXkoJGtleSwkdGhpcy0+X2tleXMpICkKICAgICAgewoJdGhyb3cgbmV3IEV4Y2VwdGlvbignQXR0ZW1wdCB0byBtb2RpZnkgaW52YWxpZCB2YWx1ZSBmcm9tIHBvc3RfYXR0YWNobWVudCBvYmplY3QnKTsKICAgICAgfQogICAgCiAgICBzd2l0Y2goICRrZXkgKQogICAgICB7CiAgICAgIGNhc2UgJ21lZGlhJzoKCSR2YWx1ZSA9IHN0cnRvbG93ZXIoJHZhbHVlKTsKCWlmKCAkdmFsdWUgIT0gJ2ltYWdlJyAmJiAkdmFsdWUgIT0gJ2ZsYXNoJyAmJiAkdmFsdWUgIT0gJ211c2ljJyApCgkgIHsKCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBdHRlbXB0IHRvIG1vZGlmeSBhdHRhY2htZW50IG9iamVjdCB3aXRoIGludmFsaWQgdmFsdWUnKTsKCSAgfQoJYnJlYWs7CiAgICAgIH0KCiAgICAkdGhpcy0+JGtleSA9ICR2YWx1ZTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gYWRkX21lZGlhKCR0eXBlLCRzcmMsJGhyZWYpCiAgewogICAgaWYoICgkdHlwZSAhPSAnaW1hZ2UnICYmICR0eXBlICE9ICdmbGFzaCcgJiYgJHR5cGUgIT0gJ211c2ljJykgfHwgISRzcmMgfHwgISRocmVmICkKICAgICAgewoJdGhyb3cgbmV3IEV4Y2VwdGlvbignQXR0ZW1wdCB0byBhZGQgaW52YWxpZCBtZWRpYSB0byBhbiBhdHRhY2htZW50IG9iamVjdCcpOwogICAgICB9CgogICAgaWYoIGNvdW50KCR0aGlzLT5fbWVkaWEpID09IDUgKQogICAgICB7Cgl0aHJvdyBuZXcgRXhjZXB0aW9uKCdBdHRlbXB0IHRvIGFkZCB0b28gbWFueSBtZWRpYSBvYmplY3RzIHRvIGFuIGF0dGFjaG1lbnQnKTsKICAgICAgfQoKICAgICR0bXAgPSBhcnJheSgndHlwZSc9PiR0eXBlLCdzcmMnPT4kc3JjLCdocmVmJz0+JGhyZWYpOwogICAgJHRoaXMtPl9tZWRpYVtdID0gJHRtcDsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gYWRkX3Byb3BlcnR5KCRuYW1lLCR0ZXh0LCRocmVmID0gJycpCiAgewogICAgaWYoICEkbmFtZSB8fCAhJHRleHQgKQogICAgICB7Cgl0aHJvdyBuZXcgRXhjZXB0aW9uKCdBdHRlbXB0IHRvIGFkZCBpbnZhbGlkIHByb3BlcnR5IHRvIGFuIGF0dGFjaG1lbnQgb2JqZWN0Jyk7CiAgICAgIH0KCiAgICBpZiggJGhyZWYgKQogICAgICB7CgkkdGV4dCA9IGFycmF5KCd0ZXh0Jz0+JHRleHQsJ2hyZWYnPT4kaHJlZik7CiAgICAgIH0KCiAgICAkdGhpcy0+X3Byb3BzWyRuYW1lXSA9ICR0ZXh0OwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBhZGRfZGF0YSgka2V5LCR2YWx1ZSkKICB7CiAgICBpZiggISRrZXkgfHwgISR2YWx1ZSApCiAgICAgIHsKCXRocm93IG5ldyBFeGNlcHRpb24oJ0F0dGVtcHQgdG8gYWRkIGludmFsaWQgcHJvcGVydHkgdG8gYW4gYXR0YWNobWVudCBvYmplY3QnKTsKICAgICAgfQoKICAgICR0aGlzLT5fYXNzb2NbJGtleV0gPSAkdmFsdWU7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHRvX2FycmF5KCkKICB7CiAgICAkb3V0cHV0ID0gYXJyYXkoKTsKICAgICRvdXRwdXRbJ25hbWUnXSA9ICR0aGlzLT5uYW1lOwogICAgJG91dHB1dFsnaHJlZiddID0gJHRoaXMtPmhyZWY7CiAgICBpZiggJHRoaXMtPmNhcHRpb24gKSAkb3V0cHV0WydjYXB0aW9uJ10gPSAkdGhpcy0+Y2FwdGlvbjsKICAgIGlmKCAkdGhpcy0+ZGVzY3JpcHRpb24gKSAkb3V0cHV0WydkZXNjcmlwdGlvbiddID0gJHRoaXMtPmRlc2NyaXB0aW9uOwogICAgaWYoICR0aGlzLT5jb21tZW50c194aWQgKSAkb3V0cHV0Wydjb21tZW50c194aWQnXSA9ICR0aGlzLT5jb21tZW50c194aWQ7CgogICAgaWYoIGNvdW50KGFycmF5X2tleXMoJHRoaXMtPl9wcm9wcykpICkKICAgICAgewoJJG91dHB1dFsncHJvcGVydGllcyddID0gYXJyYXkoKTsKCWZvcmVhY2goICR0aGlzLT5fcHJvcHMgYXMgJGtleSAtPiAkdmFsdWUgKQoJICB7CgkgICAgJG91dHB1dFsncHJvcGVydGllcyddID0gYXJyYXkoJGtleSwkdmFsdWUpOwoJICB9CiAgICAgIH0KCiAgICBpZiggY291bnQoJHRoaXMtPl9tZWRpYSkgKQogICAgICB7Cgkkb3V0cHV0WydtZWRpYSddID0gJHRoaXMtPl9tZWRpYTsKICAgICAgfQoKICAgIGlmKCBjb3VudCgkdGhpcy0+X2Fzc29jKSApCiAgICAgIHsKCWZvcmVhY2goICR0aGlzLT5fYXNzb2MgYXMgJGtleSA9PiAkdmFsdWUgKQoJICB7CgkgICAgJG91dHB1dFska2V5XSA9ICR2YWx1ZTsKCSAgfQogICAgICB9CgogICAgcmV0dXJuICRvdXRwdXQ7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.cgfb_smarty.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCi8qKgogKgogKi8KY2xhc3MgY2dmYl9zbWFydHkKewogIC8qKgogICAqIEdldCBhIHByZWZlcmVuY2UKICAgKi8KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRfcHJlZmVyZW5jZSgkbmFtZSkKICB7CiAgICAkbW9kID0gY2dlX3V0aWxzOjpnZXRfbW9kdWxlKCdDR0ZCQXBwJyk7CiAgICByZXR1cm4gJG1vZC0+R2V0UHJlZmVyZW5jZSgkbmFtZSk7CiAgfQoKICAvKioKICAgKiBHZXQgYW4gaW1hZ2UgZnJvbSB0aGUgbW9kdWxlIGRpcmVjdG9yeS4KICAgKi8KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRfaW1hZ2UoJG5hbWUpCiAgewogICAgJG1vZCA9IGNnZV91dGlsczo6Z2V0X21vZHVsZSgnQ0dGQkFwcCcpOwogICAgJHVybCA9ICRtb2QtPkdldE1vZHVsZVVSTFBhdGgoKS4iL2ltYWdlcy8kbmFtZSI7CiAgICByZXR1cm4gJHVybDsKICB9CgoKICAvKioKICAgKiBJbml0aWFsaXplIHRoZSBzbWFydHkgcGx1Z2lucy4KICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluaXQoKQogIHsKICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9sb2dpbicsYXJyYXkoJ2NnZmJfc21hcnR5JywnbG9naW5fYnV0dG9uJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfbG9nb3V0JyxhcnJheSgnY2dmYl9zbWFydHknLCdsb2dvdXRfYnV0dG9uJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfYXBpJyxhcnJheSgnY2dmYl9zbWFydHknLCdhcGknKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl9tZScsYXJyYXkoJ2NnZmJfc21hcnR5JywnbWUnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dmYl91aWQnLGFycmF5KCdjZ2ZiX3NtYXJ0eScsJ3VpZCcpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2ZiX2FwcCcsYXJyYXkoJ2NnZmJfc21hcnR5JywnYXBwJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfY29tbWVudHMnLGFycmF5KCdjZ2ZiX3NtYXJ0eScsJ2NvbW1lbnRzJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfc2VuZCcsYXJyYXkoJ2NnZmJfc21hcnR5Jywnc2VuZCcpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2ZiX3dhbGxwb3N0JyxhcnJheSgnY2dmYl9zbWFydHknLCd3YWxscG9zdCcpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2ZiX3N0YXR1cycsYXJyYXkoJ2NnZmJfc21hcnR5Jywnc3RhdHVzJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfbGlrZScsYXJyYXkoJ2NnZmJfc21hcnR5JywnbGlrZWJ0bicpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2ZiX2ludml0ZScsYXJyYXkoJ2NnZmJfc21hcnR5JywnaW52aXRlJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfaW5pdCcsYXJyYXkoJ2NnZmJfc21hcnR5JywnaW5pdF9mYicpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2ZiX2ZxbCcsYXJyYXkoJ2NnZmJfc21hcnR5JywnZnFsJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NnZmJfZnFsX211bHRpJyxhcnJheSgnY2dmYl9zbWFydHknLCdmcWwnKSk7CiAgfQoKCiAgLyoqCiAgICogQSBzbWFydHkgcGx1Z2luIHRvIHBlcmZvcm0gYW4gYXBpIGNhbGwgdXNpbmcgdGhlIHVzZXJzIGFjY2VzcyB0b2tlbi4KICAgKgogICAqIHNwZWNpYWwgcGFyYW10ZXJzOgogICAqIGNhbGw6IHN0cmluZyAtIGNvbnRhaW5zIHRoZSBVUkwgdG8gY2FsbAogICAqIGFzc2lnbjogc3RyaW5nIC0gYXNzaWduIHRoZSByZXN1bHRzIHRvIHRoZSBzcGVjaWZpZWQgc21hcnR5IHZhcmlhYmxlLgogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXBpKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgaWYoICFpc3NldCgkcGFyYW1zWydjYWxsJ10pICkgcmV0dXJuOwoKICAgICRjYWxsID0gdHJpbSgkcGFyYW1zWydjYWxsJ10pOwogICAgdW5zZXQoJHBhcmFtc1snY2FsbCddKTsKCiAgICAkcmVzID0gY2dmYjo6YXBpKCRjYWxsLCdHRVQnLCRwYXJhbXMpOwogICAgaWYoICEkcmVzICkgcmV0dXJuOwoKICAgIGlmKCBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKQogICAgICB7Cgkkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sJHJlcyk7CglyZXR1cm47CiAgICAgIH0KCiAgICByZXR1cm4gJHJlczsKICB9CgoKICAvKioKICAgKiBBIHNtYXJ0eSBwbHVnaW4gdG8gZGlzcGxheSBhIGxvZ2luIGJ1dHRvbiBpZiB0aGUgdXNlciBpcyBub3QgY3VycmVudGx5CiAgICogbG9nZ2VkIGludG8gZmFjZWJvb2suCiAgICoKICAgKiBzcGVjaWFsIHBhcmFtczoKICAgKiB3aWR0aDogaW50CiAgICogaGVpZ2h0OiBpbnQKICAgKiBmYWNlczogYm9vbGVhbgogICAqIG1heF9yb3dzOiBpbnQKICAgKiBmYl9wZXJtczogc3RyaW5nCiAgICoKICAgKiB1cmxfb25seTogYm9vbAogICAqIGltYWdlOiBzdHJpbmcKICAgKiBhc3NpZ246IHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9naW5fYnV0dG9uKCRwYXJhbXMsICYkc21hcnR5KQogIHsKLy8gICAgICRvdXRwdXQgPSAnJzsKCi8vICAgICAvLyBqYXZhc2NyaXB0IHNkay4KLy8gICAgICRvdXRwdXQgPSAnPGZiOmxvZ2luLWJ1dHRvbic7Ci8vICAgICBpZiggaXNzZXQoJHBhcmFtc1snd2lkdGgnXSkgKQovLyAgICAgICB7Ci8vIAkkb3V0cHV0IC49ICcgd2lkdGg9Jy4oaW50KSRwYXJhbXNbJ3dpZHRoJ107Ci8vICAgICAgIH0KLy8gICAgIGlmKCBpc3NldCgkcGFyYW1zWydmYWNlcyddKSAmJiAoaW50KSRwYXJhbXNbJ2ZhY2UnXSA+IDAgKQovLyAgICAgICB7Ci8vIAkkb3V0cHV0IC49ICcgc2hvdy1mYWNlcz0iMSInOwovLyAgICAgICB9Ci8vICAgICBpZiggaXNzZXQoJHBhcmFtc1snbWF4X3Jvd3MnXSkgKQovLyAgICAgICB7Ci8vIAkkb3V0cHV0IC49ICcgbWF4LXJvd3M9Jy4oaW50KSRwYXJhbXNbJ21heF9yb3dzJ107Ci8vICAgICAgIH0KLy8gICAgICRwZXJtcyA9IHNlbGY6OmdldF9wcmVmZXJlbmNlKCdmYl9wZXJtcycpOwovLyAgICAgaWYoICRwZXJtcyApCi8vICAgICAgIHsKLy8gCSRvdXRwdXQgLj0gJyBwZXJtcz0iJy4kcGVybXMuJyInOwovLyAgICAgICB9CgkKLy8gICAgICRvdXRwdXQgLj0gJz48L2ZiOmxvZ2luLWJ1dHRvbj4nOwoKICAgJG91dHB1dCA9ICcnOwoKICAgIC8vIHN0YXRpYyBodG1sCiAgICBpZiggY2dmYjo6dWlkKCkgKSByZXR1cm47CgogICAgJHVybCA9IGNnZmI6OmdldF9sb2dpbl91cmwoKTsKICAgIGlmKCBpc3NldCgkcGFyYW1zWyd1cmxvbmx5J10pICkKICAgICAgewoJJG91dHB1dCA9ICR1cmw7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHBhcmFtc1sndXJsJ10gPSAkdXJsOwoJaWYoICFpc3NldCgkcGFyYW1zWydpbWFnZSddKSApCgkgIHsKCSAgICAkcGFyYW1zWydpbWFnZSddID0gc2VsZjo6Z2V0X2ltYWdlKCdmYl9sb2dpbi5naWYnKTsKCSAgfQoJJG91dHB1dCA9IGNnZV90YWdzOjpsaW5rX3RhZygkcGFyYW1zKTsKICAgICAgfQoKICAgIC8vIGhhbmRsZSBhc3NpZ24KICAgIGlmKCBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKQogICAgICB7Cgkkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sJG91dHB1dCk7CglyZXR1cm47CiAgICAgIH0KICAgIHJldHVybiAkb3V0cHV0OwogIH0KCgogIC8qKgogICAqIENyZWF0ZSBhIGZhY2Vib29rIGxvZ291dCBidXR0b24gaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4KICAgKgogICAqIHNwZWNpYWwgcGFyYW1zOgogICAqIHVybG9ubHk6IHN0cmluZwogICAqIGltYWdlOiBzdHJpbmcKICAgKiBhc3NpZ246IHN0cmluZwogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gbG9nb3V0X2J1dHRvbigkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgIGlmKCAhc2VsZjo6dXNlX3hmYm1sKCkgKQogICAgICB7CglpZiggIWNnZmI6OnVpZCgpICkgcmV0dXJuOwoKCSR1cmwgPSBjZ2ZiOjpnZXRfbG9nb3V0X3VybCgpOwoJJG91dHB1dCA9ICcnOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ3VybG9ubHknXSkgKQoJICB7CgkgICAgJG91dHB1dCA9ICR1cmw7CgkgIH0KCWVsc2UKCSAgewoJICAgICRwYXJhbXNbJ3VybCddID0gJHVybDsKCSAgICBpZiggIWlzc2V0KCRwYXJhbXNbJ2ltYWdlJ10pICkKCSAgICAgIHsKCQkkcGFyYW1zWydpbWFnZSddID0gc2VsZjo6Z2V0X2ltYWdlKCdmYl9sb2dvdXQuZ2lmJyk7CgkgICAgICB9CgkgICAgJG91dHB1dCA9IGNnZV90YWdzOjpsaW5rX3RhZygkcGFyYW1zKTsKCSAgfQoKCS8vIGhhbmRsZSBhc3NpZ24KCWlmKCBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKQoJICB7CgkgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCRvdXRwdXQpOwoJICAgIHJldHVybjsKCSAgfQoKCXJldHVybiAkb3V0cHV0OwogICAgICB9CiAgfQoKCiAgLyoqCiAgICogUmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIKICAgKgogICAqIHNwZWNpYWwgcGFyYW1zOgogICAqIGFzc2lnbjogc3RyaW5nCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtZSgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgICRtZSA9IGNnZmI6Om1lKCk7CiAgICBpZiggIWlzX2FycmF5KCRtZSkgKSByZXR1cm47CgogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSApCiAgICAgIHsKCSRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkbWUpOwoJcmV0dXJuOwogICAgICB9CiAgICByZXR1cm4gJG1lOwogIH0KCgogIC8qKgogICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJzIGZhY2Vib29rIHVzZXIgaWQuCiAgICoKICAgKiBzcGVjaWFsIHBhcmFtczoKICAgKiBhc3NpZ246IHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdWlkKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgJHVpZCA9IGNnZmI6OnVpZCgpOwogICAgaWYoICEkdWlkICkgcmV0dXJuOwoKICAgIGlmKCBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKQogICAgICB7Cgkkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sJHVpZCk7CglyZXR1cm47CiAgICAgIH0KICAgIHJldHVybiAkdWlkOwogIH0KCgogIC8qKgogICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uLgogICAqCiAgICogc3BlY2lhbCBwYXJhbXM6CiAgICogYXNzaWduOiBzdHJpbmcKICAgKiBjYWxsOiAgIHN0cmluZyB1cmwgcG9ydGlvbiB0byBjYWxsIChzZWUgZmFjZWJvb2sgZ3JhcGggQVBJKQogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXBwKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgJG1vZCA9IGNnZV91dGlsczo6Z2V0X21vZHVsZSgnQ0dGQkFwcCcpOwogICAgJGFwcGlkID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnZmJfYXBwaWQnKTsKCiAgICAkY2FsbCA9ICRhcHBpZDsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydjYWxsJ10pICkKICAgICAgewoJJGNhbGwgLj0gJy8nLnRyaW0oJHBhcmFtc1snY2FsbCddKTsKCXVuc2V0KCRwYXJhbXNbJ2NhbGwnXSk7CiAgICAgIH0KCiAgICAkcmVzID0gY2dmYjo6YXBpKCRjYWxsKTsKICAgIGlmKCAhJHJlcyApIHJldHVybjsKCiAgICBpZiggaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pICkKICAgICAgewoJJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCRyZXMpOwoJcmV0dXJuOwogICAgICB9CgogICAgcmV0dXJuICRyZXM7CiAgfQoKCiAgLyoqCiAgICogRGlzcGxheSBhIGJveCBhbGxvd2luZyB1c2VycyB0byBjb21tZW50IG9uIGFuIG9iamVjdAogICAqCiAgICogc3BlY2lhbCBwYXJhbXM6CiAgICogdW5pcXVlaWQ6IHN0cmluZwogICAqIHdpZHRoOiBpbnQKICAgKiBuY29tbWVudHM6IGludAogICAqIHB1Ymxpc2g6IGJvb2wKICAgKiBhc3NpZ246IHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tbWVudHMoJHBhcmFtcywmJHNtYXJ0eSkKICB7CiAgICAkdW5pcXVlaWQgPSAncicubWQ1KGNnZV91cmw6OmN1cnJlbnRfdXJsKCkpOwogICAgJHdpZHRoID0gNDI1OwogICAgJG5jb21tZW50cyA9IDEwOwogICAgJHB1Ymxpc2ggPSAxOwoKICAgIGlmKCBpc3NldCgkcGFyYW1zWyd1bmlxdWVpZCddKSApIAogICAgICB7CgkkdW5pcXVlaWQgPSB0cmltKCRwYXJhbXNbJ3VuaXF1ZWlkJ10pOwogICAgICB9CiAgICBpZiggaXNzZXQoJHBhcmFtc1snd2lkdGgnXSkgKSAKICAgICAgewoJJHdpZHRoID0gKGludCkkcGFyYW1zWyd3aWR0aCddOwogICAgICB9CiAgICBpZiggaXNzZXQoJHBhcmFtc1snbmNvbW1lbnRzJ10pICkgCiAgICAgIHsKCSRuY29tbWVudHMgPSAoaW50KSRwYXJhbXNbJ25jb21tZW50cyddOwogICAgICB9CiAgICBpZiggaXNzZXQoJHBhcmFtc1sncHVibGlzaCddKSApIAogICAgICB7CgkkcHVibGlzaCA9IChpbnQpJHBhcmFtc1sncHVibGlzaCddOwogICAgICB9CgogICAgaWYoICRwdWJsaXNoICkKICAgICAgewoJJHB1Ymxpc2ggPSAndHJ1ZSc7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHB1Ymxpc2ggPSAnZmFsc2UnOwogICAgICB9CgogICAgJG9wdHMgPSBhcnJheSgpOwogICAgaWYoICR1bmlxdWVpZCApICRvcHRzW10gPSAneGlkPSInLiR1bmlxdWVpZC4nIic7CiAgICAkb3B0c1tdID0gJ3B1Ymxpc2g9IicuJHB1Ymxpc2guJyInOwogICAgJG9wdHNbXSA9ICd3aWR0aD0iJy4kd2lkdGguJyInOwogICAgJG9wdHNbXSA9ICdudW1wb3N0cz0iJy4kbmNvbW1lbnRzLiciJzsKICAgICRvdXRwdXQgPSAnPGZiOmNvbW1lbnRzICcuaW1wbG9kZSgnICcsJG9wdHMpLic+PC9mYjpjb21tZW50cz4nOwogICAgCiAgICBpZiggaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pICkKICAgICAgewoJJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCRvdXRwdXQpOwoJcmV0dXJuOwogICAgICB9CgogICAgcmV0dXJuICRvdXRwdXQ7CiAgfQoKCiAgLyoqCiAgICogQSBzbWFydHkgcGx1Z2luIHRvIGRpc3BsYXkgYSBsaWtlIGJ1dHRvbgogICAqCiAgICogc3BlY2lhbCBwYXJhbXM6CiAgICogaHJlZjogc3RyaW5nCiAgICogbGF5b3V0OiBzdHJpbmcgKHN0YW5kYXJkLGJ1dHRvbl9jb3VudCxib3hfY291bnQpCiAgICogc2hvd19mYWNlczogYm9vbAogICAqIGFjdGlvbjogc3RyaW5nIChsaWtlfHJlY29tbWVuZCkKICAgKiB3aWR0aDogaW50CiAgICogZm9udDogc3RyaW5nIChhcmlhbHxsaWNpZGEgZ3JhbmRlfHNlZ29zIHVsfHRhaG9tYXx0cmVidWNoZXQgbXN8dmVyZGFuYSkKICAgKiBjb2xvcnNjaGVtZTogc3RyaW5nIChsaWdodHxkYXJrKQogICAqIHJlZjogc3RyaW5nCiAgICogYXNzaWduOiBzdHJpbmcKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxpa2VidG4oJHBhcmFtcywmJHNtYXJ0eSkKICB7CiAgICAkcGFybXMgPSBhcnJheSgpOwogICAgJHBhcm1zWydocmVmJ10gPSBjZ2VfdXJsOjpjdXJyZW50X3VybCgpOwoKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUgKQogICAgICB7Cglzd2l0Y2goICRrZXkgKQoJICB7CgkgIGNhc2UgJ2hyZWYnOgoJICAgICRwYXJtc1snaHJlZiddID0gdHJpbSgkdmFsdWUpOwoJICAgIGJyZWFrOwoKCSAgY2FzZSAnbGF5b3V0JzoKCSAgICAkdmFsdWUgPSBzdHJ0b2xvd2VyKCR2YWx1ZSk7CgkgICAgc3dpdGNoKCAkdmFsdWUgKQoJICAgICAgewoJICAgICAgY2FzZSAnc3RhbmRhcmQnOgoJICAgICAgY2FzZSAnYnV0dG9uX2NvdW50JzoKCSAgICAgIGNhc2UgJ2JveF9jb3VudCc6CgkJJHBhcm1zWyRrZXldID0gJHZhbHVlOwoJCWJyZWFrOwoJICAgICAgfQoJICAgIGJyZWFrOwoKCSAgY2FzZSAnc2hvd19mYWNlcyc6CgkgICAgaWYoICR2YWx1ZSApICR2YWx1ZSA9ICd0cnVlJzsKCSAgICBlbHNlICR2YWx1ZSA9ICdmYWxzZSc7CgkgICAgJHBhcm1zWyRrZXldID0gJHZhbHVlOwoJICAgIGJyZWFrOwoKCSAgY2FzZSAnYWN0aW9uJzoKCSAgICAkdmFsdWUgPSBzdHJ0b2xvd2VyKCR2YWx1ZSk7CgkgICAgaWYoICR2YWx1ZSA9PSAnbGlrZScgfHwgJHZhbHVlID09ICdyZWNvbW1lbmQnICkKCSAgICAgICRwYXJtc1ska2V5XSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ3dpZHRoJzoKCSAgICAkcGFybXNbJGtleV0gPSAoaW50KSR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ2ZvbnQnOgoJICAgICR2YWx1ZSA9IHN0cnRvbG93ZXIoJHZhbHVlKTsKCSAgICBzd2l0Y2goICR2YWx1ZSApCgkgICAgICB7CgkgICAgICBjYXNlICdhcmlhbCc6CgkgICAgICBjYXNlICdsdWNpZGEgZ3JhbmRlJzoKCSAgICAgIGNhc2UgJ3NlZ29lIHVpJzoKCSAgICAgIGNhc2UgJ3RhaG9tYSc6CgkgICAgICBjYXNlICd0cmVidWNoZXQgbXMnOgoJICAgICAgY2FzZSAndmVyZGFuYSc6CgkJJHBhcm1zWyRrZXldID0gJHZhbHVlOwoJCWJyZWFrOwoJICAgICAgfQoJICAgIGJyZWFrOwoKCSAgY2FzZSAnY29sb3JzY2hlbWUnOgoJICAgICR2YWx1ZSA9IHN0cnRvbG93ZXIoJHZhbHVlKTsKCSAgICBpZiggJHZhbHVlID09ICdsaWdodCcgfHwgJHZhbHVlID09ICdkYXJrJyApCgkgICAgICB7CgkJJHBhcm1zWyRrZXldID0gJHZhbHVlOwoJICAgICAgfQoJICAgIGJyZWFrOwoKCSAgY2FzZSAncmVmJzoKCSAgICAkcGFybXNbJGtleV0gPSAkdmFsdWU7CgkgICAgYnJlYWs7CgkgIH0KICAgICAgfQoKICAgICRvdXRwdXQgPSAnPGZiOmxpa2UgJzsKICAgIGZvcmVhY2goICRwYXJtcyBhcyAka2V5ID0+ICR2YWx1ZSApCiAgICAgIHsKCSRvdXRwdXQgLj0gJyAnLiRrZXkuJz0iJy4kdmFsdWUuJyInOwogICAgICB9CiAgICAkb3V0cHV0IC49ICc+PC9mYjpsaWtlPic7CgogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSApCiAgICAgIHsKCSRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkb3V0cHV0KTsKCXJldHVybjsKICAgICAgfQoKICAgIHJldHVybiAkb3V0cHV0OwogIH0KCgogIC8qKgogICAqIEdlbmVyaWMgZnVuY3Rpb24gdG8gZG8gYW4gQVBJIFBPU1QgY2FsbAogICAqCiAgICogc3BlY2lhbCBwYXJhbXM6CiAgICogdGhpcyBtZXRob2QgYWNjZXB0cyBtaXNjIHBhcmFtZXRlcnMsIHNlZSB0aGUgZ3JhcGggQVBJCiAgICogY2FsbDogIHN0cmluZzogVVJMIHBvcnRpb24gZm9yIGdyYXBoIEFQSQogICAqIGFzX2FwcDogYm9vbCAtIHNob3VsZCBhcGkgY2FsbCBoYXBwZW4gYXMgdGhlIGFwcGxpY2F0aW9uIG9yIGFzIHRoZSB1c2VyLgogICAqIGFzc2lnbjogc3RyaW5nCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZW5kKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgaWYoICFpc3NldCgkcGFyYW1zWyd1cmknXSkgKSByZXR1cm47CgogICAgJHVyaSA9IHRyaW0oJHBhcmFtc1sndXJpJ10pOwogICAgaWYoICFzdGFydHN3aXRoKCR1cmksJy8nKSApICR1cmkgPSAnLycuJHVyaTsKICAgIHVuc2V0KCRwYXJhbXNbJ3VyaSddKTsKCiAgICAkcmVzID0gbnVsbDsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydhc19hcHAnXSkgJiYgJHBhcmFtc1snYXNfYXBwJ10gKQogICAgICB7Cgl1bnNldCgkcGFyYW1zWydhc19hcHAnXSk7CgkkcmVzID0gY2dmYjo6YXBwX2FwaSgkdXJpLCdQT1NUJywkcGFyYW1zKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkcmVzID0gY2dmYjo6YXBpKCR1cmksJ1BPU1QnLCRwYXJhbXMpOwogICAgICB9CgogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSApCiAgICAgIHsKCSRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkcmVzKTsKCXJldHVybjsKICAgICAgfQoKICAgIHJldHVybiAkcmVzOwogIH0KCgogIC8qKgogICAqIEEgZnVuY3Rpb24gdG8gY3JlYXRlIGEgd2FsbCBwb3N0CiAgICoKICAgKiBzcGVjaWFsIHBhcmFtczoKICAgKiB0bzogICBzdHJpbmcgLS0gb3B0aW9uYWwgKG1lIGlzIGFzc3VtZWQpCiAgICogbXNnOiAgc3RyaW5nIC0tIHJlcXVpcmVkCiAgICogbmFtZTogc3RyaW5nIC0tIHJlcXVpcmVkCiAgICogaHJlZjogc3RyaW5nIC0tIHJlcXVpcmVkCiAgICogY2FwdGlvbjogc3RyaW5nCiAgICogZGVzYzogc3RyaW5nCiAgICogeGlkOiAgc3RyaW5nCiAgICogcHJvcDogc3RyaW5nIG5hbWUsdmFsdWVbLGhyZWZdCiAgICogZGF0YTogc3RyaW5nIG5hbWUsdmFsdWUKICAgKiBpbWFnZTE6IHN0cmluZyBzcmM6OjpocmVmCiAgICogaW1hZ2UyOiBzdHJpbmcgc3JjOjo6aHJlZgogICAqIGltYWdlMzogc3RyaW5nIHNyYzo6OmhyZWYKICAgKiBpbWFnZTQ6IHN0cmluZyBzcmM6OjpocmVmCiAgICogaW1hZ2U1OiBzdHJpbmcgc3JjOjo6aHJlZgogICAqIGltYWdlczogKGhhc2gpIG9mIHNyYz1ocmVmIC4uLiByZXBsYWNlcyBpbWFnZTEtNQogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2FsbHBvc3QoJHBhcmFtcywmJHNtYXJ0eSkKICB7CiAgICAkdG8gPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ21lJyk7CiAgICAkbXNnID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCdtc2cnKTsKICAgICRuYW1lID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCduYW1lJyk7CiAgICAkaHJlZiA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywnaHJlZicpOwogICAgJGNhcHRpb24gPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ2NhcHRpb24nKTsKICAgICRkZXNjcmlwdGlvbiA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywnZGVzYycpOwoKICAgIGlmKCAhJG1zZyApIHJldHVybjsKICAgIHRyeQogICAgICB7CgkkcG9zdCA9IG5ldyBjZ2ZiX3Bvc3QoJG1zZywkdG8pOwoKCSRhdHQgPSBudWxsOwoJaWYoICRuYW1lICkKCSAgewoJICAgICRhdHQgPSBuZXcgY2dmYl9wb3N0X2F0dGFjaG1lbnQoJG5hbWUsJGhyZWYsJGNhcHRpb24sJGRlc2NyaXB0aW9uKTsKCSAgICAkaGF2ZV9pbWFnZSA9IEZBTFNFOwoJICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUgKQoJICAgICAgewoJCWlmKCAka2V5ID09ICd4aWQnICkKCQkgIHsKCQkgICAgJGF0dC0+Y29tbWVudHNfeGlkID0gJHZhbHVlOwoJCSAgICBjb250aW51ZTsKCQkgIH0KCQllbHNlIGlmKCAka2V5ID09ICdpbWFnZXMnICYmICEkaGF2ZV9pbWFnZSApCgkJICB7CgkJICAgIGlmKCBpc19hcnJheSgkdmFsdWUpICkKCQkgICAgICB7CgkJCWZvcmVhY2goICR2YWx1ZSBhcyAkayA9PiAkdiApCgkJCSAgewoJCQkgICAgJGF0dC0+YWRkX21lZGlhKCdpbWFnZScsJGssJHYpOwoJCQkgIH0KCQkgICAgICB9CgkJICAgICRoYXZlX2ltYWdlID0gVFJVRTsKCQkgIH0KCQllbHNlIGlmKCBzdGFydHN3aXRoKCRrZXksJ3Byb3AnKSApCgkJICB7CgkJICAgIGxpc3QoJGssJHYsJGgpID0gZXhwbG9kZSgnLCcsJHZhbHVlLDMpOwoJCSAgICBpZiggJGsgJiYgJHYgKQoJCSAgICAgIHsKCQkJJGF0dC0+YWRkX3Byb3BlcnR5KCRrLCR2LCRoKTsKCQkgICAgICB9CgkJICB9CgkJZWxzZSBpZiggc3RhcnRzd2l0aCgka2V5LCdkYXRhJykgKQoJCSAgewoJCSAgICBsaXN0KCRrLCR2KSA9IGV4cGxvZGUoJywnLCR2YWx1ZSwyKTsKCQkgICAgJGF0dC0+YWRkX2RhdGEoJGssJHYpOwoJCSAgfQoJCWVsc2UgaWYoIHN0YXJ0c3dpdGgoJGtleSwnaW1hZ2UnKSAmJiAhJGhhdmVfaW1hZ2UgKQoJCSAgewoJCSAgICBsaXN0KCRzLCRoKSA9IGV4cGxvZGUoJzo6OicsJHZhbHVlLDIpOwoJCSAgICAkYXR0LT5hZGRfbWVkaWEoJ2ltYWdlJywkcywkaCk7CgkJICB9CgkgICAgICB9CgoJICAgICRwb3N0LT5zZXRfYXR0YWNobWVudCgkYXR0KTsKCSAgfQoKCSRkYXRhID0gYXJyYXlfbWVyZ2UoYXJyYXkoJ21ldGhvZCc9PidzdHJlYW0ucHVibGlzaCcpLCRwb3N0LT50b19hcnJheSgpKTsKCSRyZXMgPSBjZ2ZiOjpyZXN0KCRkYXRhKTsKCglpZiggaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pICkKCSAgewoJICAgICRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkcmVzKTsKCSAgICByZXR1cm47CgkgIH0KCXJldHVybiAkcmVzOwogICAgICB9CiAgICBjYXRjaCggRXhjZXB0aW9uICRlICkKICAgICAgewoJLy8gbm90aGluZyB0byBkbyBoZXJlLgogICAgICB9CiAgfQoKCiAgLyoqCiAgICogQSBmdW5jdGlvbiB0byBQT1NUIG9uIGEgdXNlcnMgd2FsbAogICAqCiAgICogc3BlY2lhbCBwYXJhbXM6CiAgICogdG86IHN0cmluZyAtIHVpZCBvZiB0aGUgdXNlciwgd2FsbCwgb3IgcGFnZSB0byBzZW5kIHRvCiAgICogbXNnOiBzdHJpbmcgLSB0aGUgbWVzc2FnZSB0byBzZW5kCiAgICogYWN0aW9uMTogc3RyaW5nIC0gbmFtZT1saW5rIGZvciBzZW5kaW5nIGxpbmtzCiAgICogYWN0aW9uMjogc3RyaW5nIC0gbmFtZT1saW5rIGZvciBzZW5kaW5nIGxpbmtzCiAgICogYWN0aW9uMzogc3RyaW5nIC0gbmFtZT1saW5rIGZvciBzZW5kaW5nIGxpbmtzCiAgICogYXR0YWNobWVudDogYXR0YWNobWVudCBvYmplY3QgCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdGF0dXMoJHBhcmFtcywmJHNtYXJ0eSkKICB7CiAgICAkdG8gPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ3RvJyk7CiAgICAkbXNnID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCdtc2cnKTsKICAgIAogICAgaWYoICEkbXNnICkgcmV0dXJuOwoKICAgIHRyeQogICAgICB7Cgkkb2JqID0gbmV3IGNnZmJfcG9zdCgkbXNnLCR0byk7CgkkZGF0YSA9ICRvYmotPnRvX2FycmF5KCk7CglkZWJ1Z19kaXNwbGF5KCRkYXRhKTsgZGllKCk7CiAgICAgIH0KICAgIGNhdGNoKCBFeGNlcHRpb24gJGUgKQogICAgICB7CgkvLyBkbyBub3RoaW5nLgogICAgICB9CgogICAgaWYoICFpc3NldCgkcGFyYW1zWydtc2cnXSkgKSByZXR1cm47CiAgICBpZiggIWlzc2V0KCRwYXJhbXNbJ3RvJ10pICkgCiAgICAgIHsKCSRwYXJhbXNbJ3RvJ10gPSAnbWUnOwogICAgICB9CiAgICAKICAgICRhcmdzID0gYXJyYXkoJ3RvJywnbXNnJywnbGluaycsJ3BpY3R1cmUnLCduYW1lJywnY2FwdGlvbicsJ2Rlc2MnLCdhc19hcHAnLCdhY3Rpb25zJyk7CiAgICAkYXJnbWFwID0gYXJyYXkoJ21zZyc9PidtZXNzYWdlJywnZGVzYyc9PidkZXNjcmlwdGlvbicpOwogICAgJGRhdGEgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSApCiAgICAgIHsKCglpZiggJGtleSA9PSAnYWN0aW9ucycgKQoJICB7CgkgICAgaWYoICFpc19hcnJheSgkdmFsdWUpICkKCSAgICAgIHsKCQkkdmFsdWUgPSBjZ2VfYXJyYXk6OmV4cGxvZGVfd2l0aF9rZXkoJHZhbHVlLCc9JywnLCcpOwoJICAgICAgfQoJICB9CgoJaWYoIGluX2FycmF5KCRrZXksJGFyZ3MpICkKCSAgewoJICAgIC8vIHRyYW5zbGF0ZSBvdXIgbmFtZSB0byBmYWNlYm9va3MgcGFyYW0gbmFtZS4KCSAgICBpZiggaXNzZXQoJGFyZ21hcFska2V5XSkgKQoJICAgICAgewoJCSRrZXkgPSAkYXJnbWFwWyRrZXldOwoJICAgICAgfQoKCSAgICAvLyBzcGVjaWFsIGNhc2VzIGZvciBjZXJ0YWluIHBhcmFtcwoJICAgIGlmKCAka2V5ID09ICd0bycgKQoJICAgICAgewoJCSR1cmkgPSAkcGFyYW1zWyd0byddLicvZmVlZCc7CgkJdW5zZXQoJHBhcmFtc1sndG8nXSk7CgkJJGRhdGFbJ3VyaSddID0gJHVyaTsKCQljb250aW51ZTsKCSAgICAgIH0KCgkgICAgJGRhdGFbJGtleV0gPSAkdmFsdWU7CgkgIH0KICAgICAgfQoKICAgICRvdXRwdXQgPSBzZWxmOjpzZW5kKCRkYXRhLCRzbWFydHkpOwogICAgcmV0dXJuICRvdXRwdXQ7CiAgfQoKCiAgLyoqCiAgICogQSBzbWFydHkgZnVuY3Rpb24gdG8gZGlzcGxheSBhbiBpbnZpdGUgZm9ybQogICAqCiAgICogc3BlY2lhbCBwYXJhbXM6CiAgICogYXNzaWduOiBzdHJpbmcKICAgKiBkZXN0X3VybDogc3RyaW5nCiAgICogYXBwX25hbWU6IHN0cmluZwogICAqIGV4Y2x1ZGVfaWRzOiBzdHJpbmcKICAgKiBjb250ZW50OiBzdHJpbmcKICAgKiBib3JkZXI6IGJvb2wKICAgKiBlbWFpbF9pbnZpdGU6IGJvb2wKICAgKiBpbXBvcnRfZXh0ZXJuYWxfZnJpZW5kczogYm9vbAogICAqIGNvbmRlbnNlZDogYm9vbAogICAqIHJvd3M6IGludCAoMSB0byAxMCkKICAgKiBjb2xzOiBpbnQgKDJ8M3w1KQogICAqIG1heDogaW50ICgxIHRvIDM1KQogICAqIGJ5cGFzczogc3RyaW5nIChzdGVwfHNraXB8Y2FuY2VsKQogICAqIHRlbXBsYXRlOiBzdHJpbmcKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGludml0ZSgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgIHN0YXRpYyAkY250ID0gMDsKICAgICRtb2QgPSBjZ2VfdXRpbHM6OmdldF9tb2R1bGUoJ0NHRkJBcHAnKTsKICAgICR2YXJzID0gYXJyYXkoKTsKICAgICR2YXJzWydhc19hcHAnXSA9IDE7CiAgICAkdmFyc1snbWV0aG9kJ10gPSAnR0VUJzsKICAgICR2YXJzWydkZXN0X3VybCddID0gY2dlX3VybDo6cGFnZV91cmwoKTsKICAgICR2YXJzWydhcHBfbmFtZSddID0gZ2V0X3NpdGVfcHJlZmVyZW5jZSgnc2l0ZW5hbWUnLCdDTVNNUyBTaXRlJyk7CiAgICAkdmFyc1snYWN0aW9uX3RleHQnXSA9ICRtb2QtPkxhbmcoJ2RmbHRfYWN0aW9uX3RleHQnKTsKICAgICR2YXJzWydib3JkZXInXSA9ICd0cnVlJzsKICAgIAogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSApCiAgICAgIHsKCXN3aXRjaCggJGtleSApCgkgIHsKCSAgY2FzZSAnYXNzaWduJzoKCSAgICAvLyBub3RoaW5nIHRvIGRvIGhlcmUuCgkgICAgYnJlYWs7CgoJICBjYXNlICdtZXRob2QnOgoJICAgICR2YWx1ZSA9IHN0cnRvdXBwZXIoJHZhbHVlKTsKCSAgICBpZiggJHZhbHVlID09ICdHRVQnIHx8ICR2YWx1ZSA9PSAnUE9TVCcgKQoJICAgICAgewoJCSR2YXJzWyRrZXldID0gdHJpbSgkdmFsdWUpOwoJICAgICAgfQoJICAgIGJyZWFrOwoKCSAgY2FzZSAnZGVzdF91cmwnOgoJICBjYXNlICdhcHBfbmFtZSc6CgkgIGNhc2UgJ2FjdGlvbl90ZXh0JzoKCSAgY2FzZSAnZXhjbHVkZV9pZHMnOgoJICBjYXNlICdjb250ZW50JzoKCSAgICAkdmFyc1ska2V5XSA9IHRyaW0oJHZhbHVlKTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ2JvcmRlcic6CgkgIGNhc2UgJ2VtYWlsX2ludml0ZSc6CgkgIGNhc2UgJ2ltcG9ydF9leHRlcm5hbF9mcmllbmRzJzoKCSAgY2FzZSAnY29uZGVuc2VkJzoKCSAgICAkdmFsdWUgPSBjZ2VfdXRpbHM6OnRvX2Jvb2woJHZhbHVlKTsKCSAgICAkdmFsdWUgPSAoJHZhbHVlPyd0cnVlJzonZmFsc2UnKTsKCSAgICAkdmFyc1ska2V5XSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCSAgICAKCSAgY2FzZSAncm93cyc6CgkgICAgJHZhbHVlID0gKGludCkkdmFsdWU7CgkgICAgJHZhbHVlID0gbWF4KCR2YWx1ZSwzKTsKCSAgICAkdmFsdWUgPSBtaW4oJHZhbHVlLDEwKTsKCSAgICAkdmFyc1ska2V5XSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ2NvbHMnOgoJICAgICR2YWx1ZSA9IChpbnQpJHZhbHVlOwoJICAgIGlmKCAkdmFsdWUgPT0gMiB8fCAkdmFsdWUgPT0gMyB8fCAkdmFsdWUgPT0gNSApCgkgICAgICB7CgkJJHZhcnNbJGtleV0gPSAkdmFsdWU7CgkgICAgICB9CgkgICAgYnJlYWs7CgoJICBjYXNlICdtYXgnOgoJICAgICR2YWx1ZSA9IChpbnQpJHZhbHVlOwoJICAgICR2YWx1ZSA9IG1heCgkdmFsdWUsMSk7CgkgICAgJHZhbHVlID0gbWluKCR2YWx1ZSwzNSk7CgkgICAgJHZhcnNbJGtleV0gPSAkdmFsdWU7CgkgICAgYnJlYWs7CgoJICBjYXNlICdieXBhc3MnOgoJICAgICR2YWx1ZSA9IHN0cnRvbG93ZXIoJHZhbHVlKTsKCSAgICBpZiggJHZhbHVlID09ICdzdGVwJyB8fCAkdmFsdWUgPT0gJ3NraXAnIHx8ICR2YWx1ZSA9PSAnY2FuY2VsJyApCgkgICAgICB7CgkJJHZhcnNbJGtleV0gPSB0cmltKCR2YWx1ZSk7CgkgICAgICB9CgkgICAgYnJlYWs7CgkgIH0KICAgICAgfQoKICAgIC8vIGRvIGZpbmFsIGNoZWNrcwogICAgJHZhcnNbJ2Rlc3RfdXJsJ10gPSBjbXNfaHRtbGVudGl0aWVzKCR2YXJzWydkZXN0X3VybCddKTsKICAgICR2YXJzWydjb250ZW50J10gPSBjbXNfaHRtbGVudGl0aWVzKCR2YXJzWydjb250ZW50J10pOwogICAgJHZhcnNbJ2FwcF9uYW1lJ10gPSBjbXNfaHRtbGVudGl0aWVzKCR2YXJzWydhcHBfbmFtZSddKTsKCiAgICAvLyBnZXQgdGhlIG91dHB1dC4KICAgICRoYXNoID0gbWQ1KCdpbnZpdGUnLiRjbnQrKy5zZXJpYWxpemUoJHBhcmFtcykpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdoYXNoJywkaGFzaCk7CiAgICBmb3JlYWNoKCAkdmFycyBhcyAka2V5ID0+ICR2YWx1ZSApCiAgICAgIHsKCSRzbWFydHktPmFzc2lnbigka2V5LCR2YWx1ZSk7CiAgICAgIH0KCiAgICAkdGhldGVtcGxhdGUgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKENHRkJBcHA6OlBSRUZfSU5WSVRFX1RFTVBMQVRFKTsKICAgIGlmKCBpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZSddKSApCiAgICAgIHsKCSR0aGV0ZW1wbGF0ZSA9IHRyaW0oJHBhcmFtc1sndGVtcGxhdGUnXSk7CiAgICAgIH0KICAgICRvdXRwdXQgPSAkbW9kLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2ludml0ZV8nLiR0aGV0ZW1wbGF0ZSk7CgogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSApCiAgICAgIHsKCSRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkb3V0cHV0KTsKCXJldHVybjsKICAgICAgfQogICAgcmV0dXJuICRvdXRwdXQ7CiAgfQoKCiAgLyoqCiAgICogQSBzbWFydHkgZnVuY3Rpb24gdG8gb3V0cHV0IHRoZSBqYXZhc2NyaXB0IGZvciBpbml0aWFsaXppbmcgdGhlIEZhY2Vib29rIEphdmFzY3JpcHQgU0RLCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbml0X2ZiKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgJGFzeW5jID0gZmFsc2U7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snYXN5bmMnXSkgKQogICAgICB7CgkkYXN5bmMgPSBjZ2VfdXRpbHM6OnRvX2Jvb2wodHJpbSgkcGFyYW1zWydhc3luYyddKSk7CiAgICAgIH0KCiAgICAkb3V0cHV0ID0gJyc7CiAgICAkbW9kID0gY2dlX3V0aWxzOjpnZXRfbW9kdWxlKCdDR0ZCQXBwJyk7CiAgICBpZiggJGFzeW5jICkKICAgICAgewoJJG91dHB1dCA9ICRtb2QtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnZmJpbml0X2FzeW5jJyk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJG91dHB1dCA9ICRtb2QtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnZmJpbml0X3N5bmMnKTsKICAgICAgfQogICAgCiAgICBpZiggISRvdXRwdXQgKSByZXR1cm47CgogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSApCiAgICAgIHsKCSRzbWFydHktPmFzc2lnbih0cmltKCRwYXJhbXNbJ2Fzc2lnbiddKSwkb3V0cHV0KTsKCXJldHVybjsKICAgICAgfQoKICAgIHJldHVybiAkb3V0cHV0OwogIH0KCgogIC8qKgogICAqIEEgc21hcnR5IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYW4gYXJiaXRyYXJ5IEZRTCBxdWVyeQogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnFsKCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgaWYoICFpc3NldCgkcGFyYW1zWydmcWwnXSkgKSByZXR1cm47CgogICAgJGZxbCA9IHRyaW0oJHBhcmFtc1snZnFsJ10pOwogICAgdW5zZXQoJHBhcmFtc1snZnFsJ10pOwoKICAgICRyZXMgPSBjZ2ZiOjpmcWwoJGZxbCk7CgogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSApCiAgICAgIHsKCSRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkcmVzKTsKCXJldHVybjsKICAgICAgfQogICAgcmV0dXJuICRyZXM7CiAgfQoKICAKICAvKioKICAgKiBBIHNtYXJ0eSBmdW5jdGlvbiB0byBleGVjdXRlIGZxbF9tdWx0aXF1ZXJ5CiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcWxfbXVsdGlxdWVyeSgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgICRxID0gYXJyYXkoKTsKICAgIGZvcmVhY2goJHBhcmFtcyBhcyAkayA9PiAkdikKICAgICAgewoJaWYoIHN0YXJ0c3dpdGgoJGssJ3F1ZXJ5JykgKQoJICB7CgkgICAgJHFbXSA9ICR2OwoJICB9CiAgICAgIH0KCiAgICAkcmVzID0gY2dmYjo6ZnFsX211bHRpKCRxKTsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKQogICAgICB7Cgkkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sJHJlcyk7CglyZXR1cm47CiAgICAgIH0KICAgIHJldHVybiAkcmVzOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/facebook.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkgewogIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhY2Vib29rIG5lZWRzIHRoZSBDVVJMIFBIUCBleHRlbnNpb24uJyk7Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2pzb25fZGVjb2RlJykpIHsKICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdGYWNlYm9vayBuZWVkcyB0aGUgSlNPTiBQSFAgZXh0ZW5zaW9uLicpOwp9CgovKioKICogVGhyb3duIHdoZW4gYW4gQVBJIGNhbGwgcmV0dXJucyBhbiBleGNlcHRpb24uCiAqCiAqIEBhdXRob3IgTmFpdGlrIFNoYWggPG5haXRpa0BmYWNlYm9vay5jb20+CiAqLwpjbGFzcyBGYWNlYm9va0FwaUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgp7CiAgLyoqCiAgICogVGhlIHJlc3VsdCBmcm9tIHRoZSBBUEkgc2VydmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgogICAqLwogIHByb3RlY3RlZCAkcmVzdWx0OwoKICAvKioKICAgKiBNYWtlIGEgbmV3IEFQSSBFeGNlcHRpb24gd2l0aCB0aGUgZ2l2ZW4gcmVzdWx0LgogICAqCiAgICogQHBhcmFtIEFycmF5ICRyZXN1bHQgdGhlIHJlc3VsdCBmcm9tIHRoZSBBUEkgc2VydmVyCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyZXN1bHQpIHsKICAgICR0aGlzLT5yZXN1bHQgPSAkcmVzdWx0OwoKICAgICRjb2RlID0gaXNzZXQoJHJlc3VsdFsnZXJyb3JfY29kZSddKSA/ICRyZXN1bHRbJ2Vycm9yX2NvZGUnXSA6IDA7CgogICAgaWYgKGlzc2V0KCRyZXN1bHRbJ2Vycm9yX2Rlc2NyaXB0aW9uJ10pKSB7CiAgICAgIC8vIE9BdXRoIDIuMCBEcmFmdCAxMCBzdHlsZQogICAgICAkbXNnID0gJHJlc3VsdFsnZXJyb3JfZGVzY3JpcHRpb24nXTsKICAgIH0gZWxzZSBpZiAoaXNzZXQoJHJlc3VsdFsnZXJyb3InXSkgJiYgaXNfYXJyYXkoJHJlc3VsdFsnZXJyb3InXSkpIHsKICAgICAgLy8gT0F1dGggMi4wIERyYWZ0IDAwIHN0eWxlCiAgICAgICRtc2cgPSAkcmVzdWx0WydlcnJvciddWydtZXNzYWdlJ107CiAgICB9IGVsc2UgaWYgKGlzc2V0KCRyZXN1bHRbJ2Vycm9yX21zZyddKSkgewogICAgICAvLyBSZXN0IHNlcnZlciBzdHlsZQogICAgICAkbXNnID0gJHJlc3VsdFsnZXJyb3JfbXNnJ107CiAgICB9IGVsc2UgewogICAgICAkbXNnID0gJ1Vua25vd24gRXJyb3IuIENoZWNrIGdldFJlc3VsdCgpJzsKICAgIH0KCiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtc2csICRjb2RlKTsKICB9CgogIC8qKgogICAqIFJldHVybiB0aGUgYXNzb2NpYXRlZCByZXN1bHQgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBBUEkgc2VydmVyLgogICAqCiAgICogQHJldHVybnMgQXJyYXkgdGhlIHJlc3VsdCBmcm9tIHRoZSBBUEkgc2VydmVyCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3VsdCgpIHsKICAgIHJldHVybiAkdGhpcy0+cmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYXNzb2NpYXRlZCB0eXBlIGZvciB0aGUgZXJyb3IuIFRoaXMgd2lsbCBkZWZhdWx0IHRvCiAgICogJ0V4Y2VwdGlvbicgd2hlbiBhIHR5cGUgaXMgbm90IGF2YWlsYWJsZS4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKSB7CiAgICBpZiAoaXNzZXQoJHRoaXMtPnJlc3VsdFsnZXJyb3InXSkpIHsKICAgICAgJGVycm9yID0gJHRoaXMtPnJlc3VsdFsnZXJyb3InXTsKICAgICAgaWYgKGlzX3N0cmluZygkZXJyb3IpKSB7CiAgICAgICAgLy8gT0F1dGggMi4wIERyYWZ0IDEwIHN0eWxlCiAgICAgICAgcmV0dXJuICRlcnJvcjsKICAgICAgfSBlbHNlIGlmIChpc19hcnJheSgkZXJyb3IpKSB7CiAgICAgICAgLy8gT0F1dGggMi4wIERyYWZ0IDAwIHN0eWxlCiAgICAgICAgaWYgKGlzc2V0KCRlcnJvclsndHlwZSddKSkgewogICAgICAgICAgcmV0dXJuICRlcnJvclsndHlwZSddOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuICdFeGNlcHRpb24nOwogIH0KCiAgLyoqCiAgICogVG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgogICAqCiAgICogQHJldHVybnMgU3RyaW5nIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKSB7CiAgICAkc3RyID0gJHRoaXMtPmdldFR5cGUoKSAuICc6ICc7CiAgICBpZiAoJHRoaXMtPmNvZGUgIT0gMCkgewogICAgICAkc3RyIC49ICR0aGlzLT5jb2RlIC4gJzogJzsKICAgIH0KICAgIHJldHVybiAkc3RyIC4gJHRoaXMtPm1lc3NhZ2U7CiAgfQp9CgovKioKICogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBGYWNlYm9vayBQbGF0Zm9ybS4KICoKICogQGF1dGhvciBOYWl0aWsgU2hhaCA8bmFpdGlrQGZhY2Vib29rLmNvbT4KICovCmNsYXNzIEZhY2Vib29rCnsKICAvKioKICAgKiBWZXJzaW9uLgogICAqLwogIGNvbnN0IFZFUlNJT04gPSAnMi4xLjInOwoKICAvKioKICAgKiBEZWZhdWx0IG9wdGlvbnMgZm9yIGN1cmwuCiAgICovCiAgcHVibGljIHN0YXRpYyAkQ1VSTF9PUFRTID0gYXJyYXkoCiAgICBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUID0+IDEwLAogICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLAogICAgQ1VSTE9QVF9USU1FT1VUICAgICAgICA9PiA2MCwKICAgIENVUkxPUFRfVVNFUkFHRU5UICAgICAgPT4gJ2ZhY2Vib29rLXBocC0yLjAnLAogICk7CgogIC8qKgogICAqIExpc3Qgb2YgcXVlcnkgcGFyYW1ldGVycyB0aGF0IGdldCBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbiByZWJ1aWxkaW5nCiAgICogdGhlIGN1cnJlbnQgVVJMLgogICAqLwogIHByb3RlY3RlZCBzdGF0aWMgJERST1BfUVVFUllfUEFSQU1TID0gYXJyYXkoCiAgICAnc2Vzc2lvbicsCiAgICAnc2lnbmVkX3JlcXVlc3QnLAogICk7CgogIC8qKgogICAqIE1hcHMgYWxpYXNlcyB0byBGYWNlYm9vayBkb21haW5zLgogICAqLwogIHB1YmxpYyBzdGF0aWMgJERPTUFJTl9NQVAgPSBhcnJheSgKICAgICdhcGknICAgICAgPT4gJ2h0dHBzOi8vYXBpLmZhY2Vib29rLmNvbS8nLAogICAgJ2FwaV9yZWFkJyA9PiAnaHR0cHM6Ly9hcGktcmVhZC5mYWNlYm9vay5jb20vJywKICAgICdncmFwaCcgICAgPT4gJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLycsCiAgICAnd3d3JyAgICAgID0+ICdodHRwczovL3d3dy5mYWNlYm9vay5jb20vJywKICApOwoKICAvKioKICAgKiBUaGUgQXBwbGljYXRpb24gSUQuCiAgICovCiAgcHJvdGVjdGVkICRhcHBJZDsKCiAgLyoqCiAgICogVGhlIEFwcGxpY2F0aW9uIEFQSSBTZWNyZXQuCiAgICovCiAgcHJvdGVjdGVkICRhcGlTZWNyZXQ7CgogIC8qKgogICAqIFRoZSBhY3RpdmUgdXNlciBzZXNzaW9uLCBpZiBvbmUgaXMgYXZhaWxhYmxlLgogICAqLwogIHByb3RlY3RlZCAkc2Vzc2lvbjsKCiAgLyoqCiAgICogVGhlIGRhdGEgZnJvbSB0aGUgc2lnbmVkX3JlcXVlc3QgdG9rZW4uCiAgICovCiAgcHJvdGVjdGVkICRzaWduZWRSZXF1ZXN0OwoKICAvKioKICAgKiBJbmRpY2F0ZXMgdGhhdCB3ZSBhbHJlYWR5IGxvYWRlZCB0aGUgc2Vzc2lvbiBhcyBiZXN0IGFzIHdlIGNvdWxkLgogICAqLwogIHByb3RlY3RlZCAkc2Vzc2lvbkxvYWRlZCA9IGZhbHNlOwoKICAvKioKICAgKiBJbmRpY2F0ZXMgaWYgQ29va2llIHN1cHBvcnQgc2hvdWxkIGJlIGVuYWJsZWQuCiAgICovCiAgcHJvdGVjdGVkICRjb29raWVTdXBwb3J0ID0gZmFsc2U7CgogIC8qKgogICAqIEJhc2UgZG9tYWluIGZvciB0aGUgQ29va2llLgogICAqLwogIHByb3RlY3RlZCAkYmFzZURvbWFpbiA9ICcnOwoKICAvKioKICAgKiBJbmRpY2F0ZXMgaWYgdGhlIENVUkwgYmFzZWQgQCBzeW50YXggZm9yIGZpbGUgdXBsb2FkcyBpcyBlbmFibGVkLgogICAqLwogIHByb3RlY3RlZCAkZmlsZVVwbG9hZFN1cHBvcnQgPSBmYWxzZTsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIEZhY2Vib29rIEFwcGxpY2F0aW9uLgogICAqCiAgICogVGhlIGNvbmZpZ3VyYXRpb246CiAgICogLSBhcHBJZDogdGhlIGFwcGxpY2F0aW9uIElECiAgICogLSBzZWNyZXQ6IHRoZSBhcHBsaWNhdGlvbiBzZWNyZXQKICAgKiAtIGNvb2tpZTogKG9wdGlvbmFsKSBib29sZWFuIHRydWUgdG8gZW5hYmxlIGNvb2tpZSBzdXBwb3J0CiAgICogLSBkb21haW46IChvcHRpb25hbCkgZG9tYWluIGZvciB0aGUgY29va2llCiAgICogLSBmaWxlVXBsb2FkOiAob3B0aW9uYWwpIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBmaWxlIHVwbG9hZHMgYXJlIGVuYWJsZWQKICAgKgogICAqIEBwYXJhbSBBcnJheSAkY29uZmlnIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25maWcpIHsKICAgICR0aGlzLT5zZXRBcHBJZCgkY29uZmlnWydhcHBJZCddKTsKICAgICR0aGlzLT5zZXRBcGlTZWNyZXQoJGNvbmZpZ1snc2VjcmV0J10pOwogICAgaWYgKGlzc2V0KCRjb25maWdbJ2Nvb2tpZSddKSkgewogICAgICAkdGhpcy0+c2V0Q29va2llU3VwcG9ydCgkY29uZmlnWydjb29raWUnXSk7CiAgICB9CiAgICBpZiAoaXNzZXQoJGNvbmZpZ1snZG9tYWluJ10pKSB7CiAgICAgICR0aGlzLT5zZXRCYXNlRG9tYWluKCRjb25maWdbJ2RvbWFpbiddKTsKICAgIH0KICAgIGlmIChpc3NldCgkY29uZmlnWydmaWxlVXBsb2FkJ10pKSB7CiAgICAgICR0aGlzLT5zZXRGaWxlVXBsb2FkU3VwcG9ydCgkY29uZmlnWydmaWxlVXBsb2FkJ10pOwogICAgfQogIH0KCiAgLyoqCiAgICogU2V0IHRoZSBBcHBsaWNhdGlvbiBJRC4KICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJGFwcElkIHRoZSBBcHBsaWNhdGlvbiBJRAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzZXRBcHBJZCgkYXBwSWQpIHsKICAgICR0aGlzLT5hcHBJZCA9ICRhcHBJZDsKICAgIHJldHVybiAkdGhpczsKICB9CgogIC8qKgogICAqIEdldCB0aGUgQXBwbGljYXRpb24gSUQuCiAgICoKICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgQXBwbGljYXRpb24gSUQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBwSWQoKSB7CiAgICByZXR1cm4gJHRoaXMtPmFwcElkOwogIH0KCiAgLyoqCiAgICogU2V0IHRoZSBBUEkgU2VjcmV0LgogICAqCiAgICogQHBhcmFtIFN0cmluZyAkYXBwSWQgdGhlIEFQSSBTZWNyZXQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc2V0QXBpU2VjcmV0KCRhcGlTZWNyZXQpIHsKICAgICR0aGlzLT5hcGlTZWNyZXQgPSAkYXBpU2VjcmV0OwogICAgcmV0dXJuICR0aGlzOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBBUEkgU2VjcmV0LgogICAqCiAgICogQHJldHVybiBTdHJpbmcgdGhlIEFQSSBTZWNyZXQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBpU2VjcmV0KCkgewogICAgcmV0dXJuICR0aGlzLT5hcGlTZWNyZXQ7CiAgfQoKICAvKioKICAgKiBTZXQgdGhlIENvb2tpZSBTdXBwb3J0IHN0YXR1cy4KICAgKgogICAqIEBwYXJhbSBCb29sZWFuICRjb29raWVTdXBwb3J0IHRoZSBDb29raWUgU3VwcG9ydCBzdGF0dXMKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29va2llU3VwcG9ydCgkY29va2llU3VwcG9ydCkgewogICAgJHRoaXMtPmNvb2tpZVN1cHBvcnQgPSAkY29va2llU3VwcG9ydDsKICAgIHJldHVybiAkdGhpczsKICB9CgogIC8qKgogICAqIEdldCB0aGUgQ29va2llIFN1cHBvcnQgc3RhdHVzLgogICAqCiAgICogQHJldHVybiBCb29sZWFuIHRoZSBDb29raWUgU3VwcG9ydCBzdGF0dXMKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gdXNlQ29va2llU3VwcG9ydCgpIHsKICAgIHJldHVybiAkdGhpcy0+Y29va2llU3VwcG9ydDsKICB9CgogIC8qKgogICAqIFNldCB0aGUgYmFzZSBkb21haW4gZm9yIHRoZSBDb29raWUuCiAgICoKICAgKiBAcGFyYW0gU3RyaW5nICRkb21haW4gdGhlIGJhc2UgZG9tYWluCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHNldEJhc2VEb21haW4oJGRvbWFpbikgewogICAgJHRoaXMtPmJhc2VEb21haW4gPSAkZG9tYWluOwogICAgcmV0dXJuICR0aGlzOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBiYXNlIGRvbWFpbiBmb3IgdGhlIENvb2tpZS4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBiYXNlIGRvbWFpbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlRG9tYWluKCkgewogICAgcmV0dXJuICR0aGlzLT5iYXNlRG9tYWluOwogIH0KCiAgLyoqCiAgICogU2V0IHRoZSBmaWxlIHVwbG9hZCBzdXBwb3J0IHN0YXR1cy4KICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJGRvbWFpbiB0aGUgYmFzZSBkb21haW4KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc2V0RmlsZVVwbG9hZFN1cHBvcnQoJGZpbGVVcGxvYWRTdXBwb3J0KSB7CiAgICAkdGhpcy0+ZmlsZVVwbG9hZFN1cHBvcnQgPSAkZmlsZVVwbG9hZFN1cHBvcnQ7CiAgICByZXR1cm4gJHRoaXM7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGZpbGUgdXBsb2FkIHN1cHBvcnQgc3RhdHVzLgogICAqCiAgICogQHJldHVybiBTdHJpbmcgdGhlIGJhc2UgZG9tYWluCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHVzZUZpbGVVcGxvYWRTdXBwb3J0KCkgewogICAgcmV0dXJuICR0aGlzLT5maWxlVXBsb2FkU3VwcG9ydDsKICB9CgogIC8qKgogICAqIEdldCB0aGUgZGF0YSBmcm9tIGEgc2lnbmVkX3JlcXVlc3QgdG9rZW4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBiYXNlIGRvbWFpbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduZWRSZXF1ZXN0KCkgewogICAgaWYgKCEkdGhpcy0+c2lnbmVkUmVxdWVzdCkgewogICAgICBpZiAoaXNzZXQoJF9SRVFVRVNUWydzaWduZWRfcmVxdWVzdCddKSkgewogICAgICAgICR0aGlzLT5zaWduZWRSZXF1ZXN0ID0gJHRoaXMtPnBhcnNlU2lnbmVkUmVxdWVzdCgKICAgICAgICAgICRfUkVRVUVTVFsnc2lnbmVkX3JlcXVlc3QnXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkdGhpcy0+c2lnbmVkUmVxdWVzdDsKICB9CgogIC8qKgogICAqIFNldCB0aGUgU2Vzc2lvbi4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkc2Vzc2lvbiB0aGUgc2Vzc2lvbgogICAqIEBwYXJhbSBCb29sZWFuICR3cml0ZV9jb29raWUgaW5kaWNhdGUgaWYgYSBjb29raWUgc2hvdWxkIGJlIHdyaXR0ZW4uIHRoaXMKICAgKiB2YWx1ZSBpcyBpZ25vcmVkIGlmIGNvb2tpZSBzdXBwb3J0IGhhcyBiZWVuIGRpc2FibGVkLgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzZXRTZXNzaW9uKCRzZXNzaW9uPW51bGwsICR3cml0ZV9jb29raWU9dHJ1ZSkgewogICAgJHNlc3Npb24gPSAkdGhpcy0+dmFsaWRhdGVTZXNzaW9uT2JqZWN0KCRzZXNzaW9uKTsKICAgICR0aGlzLT5zZXNzaW9uTG9hZGVkID0gdHJ1ZTsKICAgICR0aGlzLT5zZXNzaW9uID0gJHNlc3Npb247CiAgICBpZiAoJHdyaXRlX2Nvb2tpZSkgewogICAgICAkdGhpcy0+c2V0Q29va2llRnJvbVNlc3Npb24oJHNlc3Npb24pOwogICAgfQogICAgcmV0dXJuICR0aGlzOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBzZXNzaW9uIG9iamVjdC4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IgYSBzaWduZWQgc2Vzc2lvbgogICAqIHNlbnQgdmlhIHRoZSBzaWduZWRfcmVxdWVzdCwgQ29va2llIG9yIFF1ZXJ5IFBhcmFtZXRlcnMgaWYgbmVlZGVkLgogICAqCiAgICogQHJldHVybiBBcnJheSB0aGUgc2Vzc2lvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXNzaW9uKCkgewogICAgaWYgKCEkdGhpcy0+c2Vzc2lvbkxvYWRlZCkgewogICAgICAkc2Vzc2lvbiA9IG51bGw7CiAgICAgICR3cml0ZV9jb29raWUgPSB0cnVlOwoKICAgICAgLy8gdHJ5IGxvYWRpbmcgc2Vzc2lvbiBmcm9tIHNpZ25lZF9yZXF1ZXN0IGluICRfUkVRVUVTVAogICAgICAkc2lnbmVkUmVxdWVzdCA9ICR0aGlzLT5nZXRTaWduZWRSZXF1ZXN0KCk7CiAgICAgIGlmICgkc2lnbmVkUmVxdWVzdCkgewogICAgICAgIC8vIHNpZyBpcyBnb29kLCB1c2UgdGhlIHNpZ25lZFJlcXVlc3QKICAgICAgICAkc2Vzc2lvbiA9ICR0aGlzLT5jcmVhdGVTZXNzaW9uRnJvbVNpZ25lZFJlcXVlc3QoJHNpZ25lZFJlcXVlc3QpOwogICAgICB9CgogICAgICAvLyB0cnkgbG9hZGluZyBzZXNzaW9uIGZyb20gJF9SRVFVRVNUCiAgICAgIGlmICghJHNlc3Npb24gJiYgaXNzZXQoJF9SRVFVRVNUWydzZXNzaW9uJ10pKSB7CiAgICAgICAgJHNlc3Npb24gPSBqc29uX2RlY29kZSgKICAgICAgICAgIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkKICAgICAgICAgICAgPyBzdHJpcHNsYXNoZXMoJF9SRVFVRVNUWydzZXNzaW9uJ10pCiAgICAgICAgICAgIDogJF9SRVFVRVNUWydzZXNzaW9uJ10sCiAgICAgICAgICB0cnVlCiAgICAgICAgKTsKICAgICAgICAkc2Vzc2lvbiA9ICR0aGlzLT52YWxpZGF0ZVNlc3Npb25PYmplY3QoJHNlc3Npb24pOwogICAgICB9CgogICAgICAvLyB0cnkgbG9hZGluZyBzZXNzaW9uIGZyb20gY29va2llIGlmIG5lY2Vzc2FyeQogICAgICBpZiAoISRzZXNzaW9uICYmICR0aGlzLT51c2VDb29raWVTdXBwb3J0KCkpIHsKICAgICAgICAkY29va2llTmFtZSA9ICR0aGlzLT5nZXRTZXNzaW9uQ29va2llTmFtZSgpOwogICAgICAgIGlmIChpc3NldCgkX0NPT0tJRVskY29va2llTmFtZV0pKSB7CiAgICAgICAgICAkc2Vzc2lvbiA9IGFycmF5KCk7CiAgICAgICAgICBwYXJzZV9zdHIodHJpbSgKICAgICAgICAgICAgZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKQogICAgICAgICAgICAgID8gc3RyaXBzbGFzaGVzKCRfQ09PS0lFWyRjb29raWVOYW1lXSkKICAgICAgICAgICAgICA6ICRfQ09PS0lFWyRjb29raWVOYW1lXSwKICAgICAgICAgICAgJyInCiAgICAgICAgICApLCAkc2Vzc2lvbik7CiAgICAgICAgICAkc2Vzc2lvbiA9ICR0aGlzLT52YWxpZGF0ZVNlc3Npb25PYmplY3QoJHNlc3Npb24pOwogICAgICAgICAgLy8gd3JpdGUgb25seSBpZiB3ZSBuZWVkIHRvIGRlbGV0ZSBhIGludmFsaWQgc2Vzc2lvbiBjb29raWUKICAgICAgICAgICR3cml0ZV9jb29raWUgPSBlbXB0eSgkc2Vzc2lvbik7CiAgICAgICAgfQogICAgICB9CgogICAgICAkdGhpcy0+c2V0U2Vzc2lvbigkc2Vzc2lvbiwgJHdyaXRlX2Nvb2tpZSk7CiAgICB9CgogICAgcmV0dXJuICR0aGlzLT5zZXNzaW9uOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBVSUQgZnJvbSB0aGUgc2Vzc2lvbi4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBVSUQgaWYgYXZhaWxhYmxlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXIoKSB7CiAgICAkc2Vzc2lvbiA9ICR0aGlzLT5nZXRTZXNzaW9uKCk7CiAgICByZXR1cm4gJHNlc3Npb24gPyAkc2Vzc2lvblsndWlkJ10gOiBudWxsOwogIH0KCiAgLyoqCiAgICogR2V0cyBhIE9BdXRoIGFjY2VzcyB0b2tlbi4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY2Nlc3MgdG9rZW4KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW4oKSB7CiAgICAkc2Vzc2lvbiA9ICR0aGlzLT5nZXRTZXNzaW9uKCk7CiAgICAvLyBlaXRoZXIgdXNlciBzZXNzaW9uIHNpZ25lZCwgb3IgYXBwIHNpZ25lZAogICAgaWYgKCRzZXNzaW9uKSB7CiAgICAgIHJldHVybiAkc2Vzc2lvblsnYWNjZXNzX3Rva2VuJ107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPmdldEFwcElkKCkgLid8Jy4gJHRoaXMtPmdldEFwaVNlY3JldCgpOwogICAgfQogIH0KCiAgLyoqCiAgICogR2V0IGEgTG9naW4gVVJMIGZvciB1c2Ugd2l0aCByZWRpcmVjdHMuIEJ5IGRlZmF1bHQsIGZ1bGwgcGFnZSByZWRpcmVjdCBpcwogICAqIGFzc3VtZWQuIElmIHlvdSBhcmUgdXNpbmcgdGhlIGdlbmVyYXRlZCBVUkwgd2l0aCBhIHdpbmRvdy5vcGVuKCkgY2FsbCBpbgogICAqIEphdmFTY3JpcHQsIHlvdSBjYW4gcGFzcyBpbiBkaXNwbGF5PXBvcHVwIGFzIHBhcnQgb2YgdGhlICRwYXJhbXMuCiAgICoKICAgKiBUaGUgcGFyYW1ldGVyczoKICAgKiAtIG5leHQ6IHRoZSB1cmwgdG8gZ28gdG8gYWZ0ZXIgYSBzdWNjZXNzZnVsIGxvZ2luCiAgICogLSBjYW5jZWxfdXJsOiB0aGUgdXJsIHRvIGdvIHRvIGFmdGVyIHRoZSB1c2VyIGNhbmNlbHMKICAgKiAtIHJlcV9wZXJtczogY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcmVxdWVzdGVkIGV4dGVuZGVkIHBlcm1zCiAgICogLSBkaXNwbGF5OiBjYW4gYmUgInBhZ2UiIChkZWZhdWx0LCBmdWxsIHBhZ2UpIG9yICJwb3B1cCIKICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHByb3ZpZGUgY3VzdG9tIHBhcmFtZXRlcnMKICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgVVJMIGZvciB0aGUgbG9naW4gZmxvdwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2dpblVybCgkcGFyYW1zPWFycmF5KCkpIHsKICAgICRjdXJyZW50VXJsID0gJHRoaXMtPmdldEN1cnJlbnRVcmwoKTsKICAgIHJldHVybiAkdGhpcy0+Z2V0VXJsKAogICAgICAnd3d3JywKICAgICAgJ2xvZ2luLnBocCcsCiAgICAgIGFycmF5X21lcmdlKGFycmF5KAogICAgICAgICdhcGlfa2V5JyAgICAgICAgID0+ICR0aGlzLT5nZXRBcHBJZCgpLAogICAgICAgICdjYW5jZWxfdXJsJyAgICAgID0+ICRjdXJyZW50VXJsLAogICAgICAgICdkaXNwbGF5JyAgICAgICAgID0+ICdwYWdlJywKICAgICAgICAnZmJjb25uZWN0JyAgICAgICA9PiAxLAogICAgICAgICduZXh0JyAgICAgICAgICAgID0+ICRjdXJyZW50VXJsLAogICAgICAgICdyZXR1cm5fc2Vzc2lvbicgID0+IDEsCiAgICAgICAgJ3Nlc3Npb25fdmVyc2lvbicgPT4gMywKICAgICAgICAndicgICAgICAgICAgICAgICA9PiAnMS4wJywKICAgICAgKSwgJHBhcmFtcykKICAgICk7CiAgfQoKICAvKioKICAgKiBHZXQgYSBMb2dvdXQgVVJMIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCByZWRpcmVjdHMuCiAgICoKICAgKiBUaGUgcGFyYW1ldGVyczoKICAgKiAtIG5leHQ6IHRoZSB1cmwgdG8gZ28gdG8gYWZ0ZXIgYSBzdWNjZXNzZnVsIGxvZ291dAogICAqCiAgICogQHBhcmFtIEFycmF5ICRwYXJhbXMgcHJvdmlkZSBjdXN0b20gcGFyYW1ldGVycwogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBVUkwgZm9yIHRoZSBsb2dvdXQgZmxvdwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2dvdXRVcmwoJHBhcmFtcz1hcnJheSgpKSB7CiAgICByZXR1cm4gJHRoaXMtPmdldFVybCgKICAgICAgJ3d3dycsCiAgICAgICdsb2dvdXQucGhwJywKICAgICAgYXJyYXlfbWVyZ2UoYXJyYXkoCiAgICAgICAgJ25leHQnICAgICAgICAgPT4gJHRoaXMtPmdldEN1cnJlbnRVcmwoKSwKICAgICAgICAnYWNjZXNzX3Rva2VuJyA9PiAkdGhpcy0+Z2V0QWNjZXNzVG9rZW4oKSwKICAgICAgKSwgJHBhcmFtcykKICAgICk7CiAgfQoKICAvKioKICAgKiBHZXQgYSBsb2dpbiBzdGF0dXMgVVJMIHRvIGZldGNoIHRoZSBzdGF0dXMgZnJvbSBmYWNlYm9vay4KICAgKgogICAqIFRoZSBwYXJhbWV0ZXJzOgogICAqIC0gb2tfc2Vzc2lvbjogdGhlIFVSTCB0byBnbyB0byBpZiBhIHNlc3Npb24gaXMgZm91bmQKICAgKiAtIG5vX3Nlc3Npb246IHRoZSBVUkwgdG8gZ28gdG8gaWYgdGhlIHVzZXIgaXMgbm90IGNvbm5lY3RlZAogICAqIC0gbm9fdXNlcjogdGhlIFVSTCB0byBnbyB0byBpZiB0aGUgdXNlciBpcyBub3Qgc2lnbmVkIGludG8gZmFjZWJvb2sKICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHByb3ZpZGUgY3VzdG9tIHBhcmFtZXRlcnMKICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgVVJMIGZvciB0aGUgbG9nb3V0IGZsb3cKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9naW5TdGF0dXNVcmwoJHBhcmFtcz1hcnJheSgpKSB7CiAgICByZXR1cm4gJHRoaXMtPmdldFVybCgKICAgICAgJ3d3dycsCiAgICAgICdleHRlcm4vbG9naW5fc3RhdHVzLnBocCcsCiAgICAgIGFycmF5X21lcmdlKGFycmF5KAogICAgICAgICdhcGlfa2V5JyAgICAgICAgID0+ICR0aGlzLT5nZXRBcHBJZCgpLAogICAgICAgICdub19zZXNzaW9uJyAgICAgID0+ICR0aGlzLT5nZXRDdXJyZW50VXJsKCksCiAgICAgICAgJ25vX3VzZXInICAgICAgICAgPT4gJHRoaXMtPmdldEN1cnJlbnRVcmwoKSwKICAgICAgICAnb2tfc2Vzc2lvbicgICAgICA9PiAkdGhpcy0+Z2V0Q3VycmVudFVybCgpLAogICAgICAgICdzZXNzaW9uX3ZlcnNpb24nID0+IDMsCiAgICAgICksICRwYXJhbXMpCiAgICApOwogIH0KCiAgLyoqCiAgICogTWFrZSBhbiBBUEkgY2FsbC4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHRoZSBBUEkgY2FsbCBwYXJhbWV0ZXJzCiAgICogQHJldHVybiB0aGUgZGVjb2RlZCByZXNwb25zZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBhcGkoLyogcG9seW1vcnBoaWMgKi8pIHsKICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgaWYgKGlzX2FycmF5KCRhcmdzWzBdKSkgewogICAgICByZXR1cm4gJHRoaXMtPl9yZXN0c2VydmVyKCRhcmdzWzBdKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkdGhpcywgJ19ncmFwaCcpLCAkYXJncyk7CiAgICB9CiAgfQoKICAvKioKICAgKiBJbnZva2UgdGhlIG9sZCByZXN0c2VydmVyLnBocCBlbmRwb2ludC4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIG1ldGhvZCBjYWxsIG9iamVjdAogICAqIEByZXR1cm4gdGhlIGRlY29kZWQgcmVzcG9uc2Ugb2JqZWN0CiAgICogQHRocm93cyBGYWNlYm9va0FwaUV4Y2VwdGlvbgogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBfcmVzdHNlcnZlcigkcGFyYW1zKSB7CiAgICAvLyBnZW5lcmljIGFwcGxpY2F0aW9uIGxldmVsIHBhcmFtZXRlcnMKICAgICRwYXJhbXNbJ2FwaV9rZXknXSA9ICR0aGlzLT5nZXRBcHBJZCgpOwogICAgJHBhcmFtc1snZm9ybWF0J10gPSAnanNvbi1zdHJpbmdzJzsKCiAgICAkcmVzdWx0ID0ganNvbl9kZWNvZGUoJHRoaXMtPl9vYXV0aFJlcXVlc3QoCiAgICAgICR0aGlzLT5nZXRBcGlVcmwoJHBhcmFtc1snbWV0aG9kJ10pLAogICAgICAkcGFyYW1zCiAgICApLCB0cnVlKTsKCiAgICAvLyByZXN1bHRzIGFyZSByZXR1cm5lZCwgZXJyb3JzIGFyZSB0aHJvd24KICAgIGlmIChpc19hcnJheSgkcmVzdWx0KSAmJiBpc3NldCgkcmVzdWx0WydlcnJvcl9jb2RlJ10pKSB7CiAgICAgIHRocm93IG5ldyBGYWNlYm9va0FwaUV4Y2VwdGlvbigkcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgLyoqCiAgICogSW52b2tlIHRoZSBHcmFwaCBBUEkuCiAgICoKICAgKiBAcGFyYW0gU3RyaW5nICRwYXRoIHRoZSBwYXRoIChyZXF1aXJlZCkKICAgKiBAcGFyYW0gU3RyaW5nICRtZXRob2QgdGhlIGh0dHAgbWV0aG9kIChkZWZhdWx0ICdHRVQnKQogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHRoZSBxdWVyeS9wb3N0IGRhdGEKICAgKiBAcmV0dXJuIHRoZSBkZWNvZGVkIHJlc3BvbnNlIG9iamVjdAogICAqIEB0aHJvd3MgRmFjZWJvb2tBcGlFeGNlcHRpb24KICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2dyYXBoKCRwYXRoLCAkbWV0aG9kPSdHRVQnLCAkcGFyYW1zPWFycmF5KCkpIHsKICAgIGlmIChpc19hcnJheSgkbWV0aG9kKSAmJiBlbXB0eSgkcGFyYW1zKSkgewogICAgICAkcGFyYW1zID0gJG1ldGhvZDsKICAgICAgJG1ldGhvZCA9ICdHRVQnOwogICAgfQogICAgJHBhcmFtc1snbWV0aG9kJ10gPSAkbWV0aG9kOyAvLyBtZXRob2Qgb3ZlcnJpZGUgYXMgd2UgYWx3YXlzIGRvIGEgUE9TVAoKICAgICRyZXN1bHQgPSBqc29uX2RlY29kZSgkdGhpcy0+X29hdXRoUmVxdWVzdCgKICAgICAgJHRoaXMtPmdldFVybCgnZ3JhcGgnLCAkcGF0aCksCiAgICAgICRwYXJhbXMKICAgICksIHRydWUpOwoKICAgIC8vIHJlc3VsdHMgYXJlIHJldHVybmVkLCBlcnJvcnMgYXJlIHRocm93bgogICAgaWYgKGlzX2FycmF5KCRyZXN1bHQpICYmIGlzc2V0KCRyZXN1bHRbJ2Vycm9yJ10pKSB7CiAgICAgICRlID0gbmV3IEZhY2Vib29rQXBpRXhjZXB0aW9uKCRyZXN1bHQpOwogICAgICBzd2l0Y2ggKCRlLT5nZXRUeXBlKCkpIHsKICAgICAgICAvLyBPQXV0aCAyLjAgRHJhZnQgMDAgc3R5bGUKICAgICAgICBjYXNlICdPQXV0aEV4Y2VwdGlvbic6CiAgICAgICAgLy8gT0F1dGggMi4wIERyYWZ0IDEwIHN0eWxlCiAgICAgICAgY2FzZSAnaW52YWxpZF90b2tlbic6CiAgICAgICAgICAkdGhpcy0+c2V0U2Vzc2lvbihudWxsKTsKICAgICAgfQogICAgICB0aHJvdyAkZTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgLyoqCiAgICogTWFrZSBhIE9BdXRoIFJlcXVlc3QKICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJHBhdGggdGhlIHBhdGggKHJlcXVpcmVkKQogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHRoZSBxdWVyeS9wb3N0IGRhdGEKICAgKiBAcmV0dXJuIHRoZSBkZWNvZGVkIHJlc3BvbnNlIG9iamVjdAogICAqIEB0aHJvd3MgRmFjZWJvb2tBcGlFeGNlcHRpb24KICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX29hdXRoUmVxdWVzdCgkdXJsLCAkcGFyYW1zKSB7CiAgICBpZiAoIWlzc2V0KCRwYXJhbXNbJ2FjY2Vzc190b2tlbiddKSkgewogICAgICAkcGFyYW1zWydhY2Nlc3NfdG9rZW4nXSA9ICR0aGlzLT5nZXRBY2Nlc3NUb2tlbigpOwogICAgfQoKICAgIC8vIGpzb25fZW5jb2RlIGFsbCBwYXJhbXMgdmFsdWVzIHRoYXQgYXJlIG5vdCBzdHJpbmdzCiAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgIGlmICghaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAkcGFyYW1zWyRrZXldID0ganNvbl9lbmNvZGUoJHZhbHVlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICR0aGlzLT5tYWtlUmVxdWVzdCgkdXJsLCAkcGFyYW1zKTsKICB9CgogIC8qKgogICAqIE1ha2VzIGFuIEhUVFAgcmVxdWVzdC4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRlbiBieSBzdWJjbGFzc2VzIGlmCiAgICogZGV2ZWxvcGVycyB3YW50IHRvIGRvIGZhbmNpZXIgdGhpbmdzIG9yIHVzZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBjdXJsIHRvCiAgICogbWFrZSB0aGUgcmVxdWVzdC4KICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJHVybCB0aGUgVVJMIHRvIG1ha2UgdGhlIHJlcXVlc3QgdG8KICAgKiBAcGFyYW0gQXJyYXkgJHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBQT1NUIGJvZHkKICAgKiBAcGFyYW0gQ3VybEhhbmRsZXIgJGNoIG9wdGlvbmFsIGluaXRpYWxpemVkIGN1cmwgaGFuZGxlCiAgICogQHJldHVybiBTdHJpbmcgdGhlIHJlc3BvbnNlIHRleHQKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gbWFrZVJlcXVlc3QoJHVybCwgJHBhcmFtcywgJGNoPW51bGwpIHsKICAgIGlmICghJGNoKSB7CiAgICAgICRjaCA9IGN1cmxfaW5pdCgpOwogICAgfQoKICAgICRvcHRzID0gc2VsZjo6JENVUkxfT1BUUzsKICAgIGlmICgkdGhpcy0+dXNlRmlsZVVwbG9hZFN1cHBvcnQoKSkgewogICAgICAkb3B0c1tDVVJMT1BUX1BPU1RGSUVMRFNdID0gJHBhcmFtczsKICAgIH0gZWxzZSB7CiAgICAgICRvcHRzW0NVUkxPUFRfUE9TVEZJRUxEU10gPSBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMsIG51bGwsICcmJyk7CiAgICB9CiAgICAkb3B0c1tDVVJMT1BUX1VSTF0gPSAkdXJsOwoKICAgIC8vIGRpc2FibGUgdGhlICdFeHBlY3Q6IDEwMC1jb250aW51ZScgYmVoYXZpb3VyLiBUaGlzIGNhdXNlcyBDVVJMIHRvIHdhaXQKICAgIC8vIGZvciAyIHNlY29uZHMgaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaGVhZGVyLgogICAgaWYgKGlzc2V0KCRvcHRzW0NVUkxPUFRfSFRUUEhFQURFUl0pKSB7CiAgICAgICRleGlzdGluZ19oZWFkZXJzID0gJG9wdHNbQ1VSTE9QVF9IVFRQSEVBREVSXTsKICAgICAgJGV4aXN0aW5nX2hlYWRlcnNbXSA9ICdFeHBlY3Q6JzsKICAgICAgJG9wdHNbQ1VSTE9QVF9IVFRQSEVBREVSXSA9ICRleGlzdGluZ19oZWFkZXJzOwogICAgfSBlbHNlIHsKICAgICAgJG9wdHNbQ1VSTE9QVF9IVFRQSEVBREVSXSA9IGFycmF5KCdFeHBlY3Q6Jyk7CiAgICB9CgogICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLCAkb3B0cyk7CiAgICAkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7CgogICAgaWYgKGN1cmxfZXJybm8oJGNoKSA9PSA2MCkgeyAvLyBDVVJMRV9TU0xfQ0FDRVJUCiAgICAgIHNlbGY6OmVycm9yTG9nKCdJbnZhbGlkIG9yIG5vIGNlcnRpZmljYXRlIGF1dGhvcml0eSBmb3VuZCwgdXNpbmcgYnVuZGxlZCBpbmZvcm1hdGlvbicpOwogICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ0FJTkZPLAogICAgICAgICAgICAgICAgICBkaXJuYW1lKF9fRklMRV9fKSAuICcvZmJfY2FfY2hhaW5fYnVuZGxlLmNydCcpOwogICAgICAkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7CiAgICB9CgogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICRlID0gbmV3IEZhY2Vib29rQXBpRXhjZXB0aW9uKGFycmF5KAogICAgICAgICdlcnJvcl9jb2RlJyA9PiBjdXJsX2Vycm5vKCRjaCksCiAgICAgICAgJ2Vycm9yJyAgICAgID0+IGFycmF5KAogICAgICAgICAgJ21lc3NhZ2UnID0+IGN1cmxfZXJyb3IoJGNoKSwKICAgICAgICAgICd0eXBlJyAgICA9PiAnQ3VybEV4Y2VwdGlvbicsCiAgICAgICAgKSwKICAgICAgKSk7CiAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgICAgdGhyb3cgJGU7CiAgICB9CiAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICByZXR1cm4gJHJlc3VsdDsKICB9CgogIC8qKgogICAqIFRoZSBuYW1lIG9mIHRoZSBDb29raWUgdGhhdCBjb250YWlucyB0aGUgc2Vzc2lvbi4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBjb29raWUgbmFtZQogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTZXNzaW9uQ29va2llTmFtZSgpIHsKICAgIHJldHVybiAnZmJzXycgLiAkdGhpcy0+Z2V0QXBwSWQoKTsKICB9CgogIC8qKgogICAqIFNldCBhIEpTIENvb2tpZSBiYXNlZCBvbiB0aGUgX3Bhc3NlZCBpbl8gc2Vzc2lvbi4gSXQgZG9lcyBub3QgdXNlIHRoZQogICAqIGN1cnJlbnRseSBzdG9yZWQgc2Vzc2lvbiAtLSB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHBhc3MgaXQgaW4uCiAgICoKICAgKiBAcGFyYW0gQXJyYXkgJHNlc3Npb24gdGhlIHNlc3Npb24gdG8gdXNlIGZvciBzZXR0aW5nIHRoZSBjb29raWUKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0Q29va2llRnJvbVNlc3Npb24oJHNlc3Npb249bnVsbCkgewogICAgaWYgKCEkdGhpcy0+dXNlQ29va2llU3VwcG9ydCgpKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAkY29va2llTmFtZSA9ICR0aGlzLT5nZXRTZXNzaW9uQ29va2llTmFtZSgpOwogICAgJHZhbHVlID0gJ2RlbGV0ZWQnOwogICAgJGV4cGlyZXMgPSB0aW1lKCkgLSAzNjAwOwogICAgJGRvbWFpbiA9ICR0aGlzLT5nZXRCYXNlRG9tYWluKCk7CiAgICBpZiAoJHNlc3Npb24pIHsKICAgICAgJHZhbHVlID0gJyInIC4gaHR0cF9idWlsZF9xdWVyeSgkc2Vzc2lvbiwgbnVsbCwgJyYnKSAuICciJzsKICAgICAgaWYgKGlzc2V0KCRzZXNzaW9uWydiYXNlX2RvbWFpbiddKSkgewogICAgICAgICRkb21haW4gPSAkc2Vzc2lvblsnYmFzZV9kb21haW4nXTsKICAgICAgfQogICAgICAkZXhwaXJlcyA9ICRzZXNzaW9uWydleHBpcmVzJ107CiAgICB9CgogICAgLy8gcHJlcGVuZCBkb3QgaWYgYSBkb21haW4gaXMgZm91bmQKICAgIGlmICgkZG9tYWluKSB7CiAgICAgICRkb21haW4gPSAnLicgLiAkZG9tYWluOwogICAgfQoKICAgIC8vIGlmIGFuIGV4aXN0aW5nIGNvb2tpZSBpcyBub3Qgc2V0LCB3ZSBkb250IG5lZWQgdG8gZGVsZXRlIGl0CiAgICBpZiAoJHZhbHVlID09ICdkZWxldGVkJyAmJiBlbXB0eSgkX0NPT0tJRVskY29va2llTmFtZV0pKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaGVhZGVyc19zZW50KCkpIHsKICAgICAgc2VsZjo6ZXJyb3JMb2coJ0NvdWxkIG5vdCBzZXQgY29va2llLiBIZWFkZXJzIGFscmVhZHkgc2VudC4nKTsKCiAgICAvLyBpZ25vcmUgZm9yIGNvZGUgY292ZXJhZ2UgYXMgd2Ugd2lsbCBuZXZlciBiZSBhYmxlIHRvIHNldGNvb2tpZSBpbiBhIENMSQogICAgLy8gZW52aXJvbm1lbnQKICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgfSBlbHNlIHsKICAgICAgc2V0Y29va2llKCRjb29raWVOYW1lLCAkdmFsdWUsICRleHBpcmVzLCAnLycsICRkb21haW4pOwogICAgfQogICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAogIH0KCiAgLyoqCiAgICogVmFsaWRhdGVzIGEgc2Vzc2lvbl92ZXJzaW9uPTMgc3R5bGUgc2Vzc2lvbiBvYmplY3QuCiAgICoKICAgKiBAcGFyYW0gQXJyYXkgJHNlc3Npb24gdGhlIHNlc3Npb24gb2JqZWN0CiAgICogQHJldHVybiBBcnJheSB0aGUgc2Vzc2lvbiBvYmplY3QgaWYgaXQgdmFsaWRhdGVzLCBudWxsIG90aGVyd2lzZQogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZVNlc3Npb25PYmplY3QoJHNlc3Npb24pIHsKICAgIC8vIG1ha2Ugc3VyZSBzb21lIGVzc2VudGlhbCBmaWVsZHMgZXhpc3QKICAgIGlmIChpc19hcnJheSgkc2Vzc2lvbikgJiYKICAgICAgICBpc3NldCgkc2Vzc2lvblsndWlkJ10pICYmCiAgICAgICAgaXNzZXQoJHNlc3Npb25bJ2FjY2Vzc190b2tlbiddKSAmJgogICAgICAgIGlzc2V0KCRzZXNzaW9uWydzaWcnXSkpIHsKICAgICAgLy8gdmFsaWRhdGUgdGhlIHNpZ25hdHVyZQogICAgICAkc2Vzc2lvbl93aXRob3V0X3NpZyA9ICRzZXNzaW9uOwogICAgICB1bnNldCgkc2Vzc2lvbl93aXRob3V0X3NpZ1snc2lnJ10pOwogICAgICAkZXhwZWN0ZWRfc2lnID0gc2VsZjo6Z2VuZXJhdGVTaWduYXR1cmUoCiAgICAgICAgJHNlc3Npb25fd2l0aG91dF9zaWcsCiAgICAgICAgJHRoaXMtPmdldEFwaVNlY3JldCgpCiAgICAgICk7CiAgICAgIGlmICgkc2Vzc2lvblsnc2lnJ10gIT0gJGV4cGVjdGVkX3NpZykgewogICAgICAgIHNlbGY6OmVycm9yTG9nKCdHb3QgaW52YWxpZCBzZXNzaW9uIHNpZ25hdHVyZSBpbiBjb29raWUuJyk7CiAgICAgICAgJHNlc3Npb24gPSBudWxsOwogICAgICB9CiAgICAgIC8vIGNoZWNrIGV4cGlyeSB0aW1lCiAgICB9IGVsc2UgewogICAgICAkc2Vzc2lvbiA9IG51bGw7CiAgICB9CiAgICByZXR1cm4gJHNlc3Npb247CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2Ugb3VyIEpTIHNlc3Npb24gb2JqZWN0IGZyb20gdGhlCiAgICogc2lnbmVkIHRva2VuJ3MgZGF0YQogICAqCiAgICogVE9ETzogTnVrZSB0aGlzIG9uY2UgdGhlIGxvZ2luIGZsb3cgdXNlcyBPQXV0aDIKICAgKgogICAqIEBwYXJhbSBBcnJheSB0aGUgb3V0cHV0IG9mIGdldFNpZ25lZFJlcXVlc3QKICAgKiBAcmV0dXJuIEFycmF5IFNvbWV0aGluZyB0aGF0IHdpbGwgd29yayBhcyBhIHNlc3Npb24KICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbkZyb21TaWduZWRSZXF1ZXN0KCRkYXRhKSB7CiAgICBpZiAoIWlzc2V0KCRkYXRhWydvYXV0aF90b2tlbiddKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAkc2Vzc2lvbiA9IGFycmF5KAogICAgICAndWlkJyAgICAgICAgICA9PiAkZGF0YVsndXNlcl9pZCddLAogICAgICAnYWNjZXNzX3Rva2VuJyA9PiAkZGF0YVsnb2F1dGhfdG9rZW4nXSwKICAgICAgJ2V4cGlyZXMnICAgICAgPT4gJGRhdGFbJ2V4cGlyZXMnXSwKICAgICk7CgogICAgLy8gcHV0IGEgcmVhbCBzaWcsIHNvIHRoYXQgdmFsaWRhdGVTaWduYXR1cmUgd29ya3MKICAgICRzZXNzaW9uWydzaWcnXSA9IHNlbGY6OmdlbmVyYXRlU2lnbmF0dXJlKAogICAgICAkc2Vzc2lvbiwKICAgICAgJHRoaXMtPmdldEFwaVNlY3JldCgpCiAgICApOwoKICAgIHJldHVybiAkc2Vzc2lvbjsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhIHNpZ25lZF9yZXF1ZXN0IGFuZCB2YWxpZGF0ZXMgdGhlIHNpZ25hdHVyZS4KICAgKiBUaGVuIHNhdmVzIGl0IGluICR0aGlzLT5zaWduZWRfZGF0YQogICAqCiAgICogQHBhcmFtIFN0cmluZyBBIHNpZ25lZCB0b2tlbgogICAqIEBwYXJhbSBCb29sZWFuIFNob3VsZCB3ZSByZW1vdmUgdGhlIHBhcnRzIG9mIHRoZSBwYXlsb2FkIHRoYXQKICAgKiAgICAgICAgICAgICAgICBhcmUgdXNlZCBieSB0aGUgYWxnb3JpdGhtPwogICAqIEByZXR1cm4gQXJyYXkgdGhlIHBheWxvYWQgaW5zaWRlIGl0IG9yIG51bGwgaWYgdGhlIHNpZyBpcyB3cm9uZwogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZVNpZ25lZFJlcXVlc3QoJHNpZ25lZF9yZXF1ZXN0KSB7CiAgICBsaXN0KCRlbmNvZGVkX3NpZywgJHBheWxvYWQpID0gZXhwbG9kZSgnLicsICRzaWduZWRfcmVxdWVzdCwgMik7CgogICAgLy8gZGVjb2RlIHRoZSBkYXRhCiAgICAkc2lnID0gc2VsZjo6YmFzZTY0VXJsRGVjb2RlKCRlbmNvZGVkX3NpZyk7CiAgICAkZGF0YSA9IGpzb25fZGVjb2RlKHNlbGY6OmJhc2U2NFVybERlY29kZSgkcGF5bG9hZCksIHRydWUpOwoKICAgIGlmIChzdHJ0b3VwcGVyKCRkYXRhWydhbGdvcml0aG0nXSkgIT09ICdITUFDLVNIQTI1NicpIHsKICAgICAgc2VsZjo6ZXJyb3JMb2coJ1Vua25vd24gYWxnb3JpdGhtLiBFeHBlY3RlZCBITUFDLVNIQTI1NicpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvLyBjaGVjayBzaWcKICAgICRleHBlY3RlZF9zaWcgPSBoYXNoX2htYWMoJ3NoYTI1NicsICRwYXlsb2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0QXBpU2VjcmV0KCksICRyYXcgPSB0cnVlKTsKICAgIGlmICgkc2lnICE9PSAkZXhwZWN0ZWRfc2lnKSB7CiAgICAgIHNlbGY6OmVycm9yTG9nKCdCYWQgU2lnbmVkIEpTT04gc2lnbmF0dXJlIScpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXR1cm4gJGRhdGE7CiAgfQoKICAvKioKICAgKiBCdWlsZCB0aGUgVVJMIGZvciBhcGkgZ2l2ZW4gcGFyYW1ldGVycy4KICAgKgogICAqIEBwYXJhbSAkbWV0aG9kIFN0cmluZyB0aGUgbWV0aG9kIG5hbWUuCiAgICogQHJldHVybiBTdHJpbmcgdGhlIFVSTCBmb3IgdGhlIGdpdmVuIHBhcmFtZXRlcnMKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QXBpVXJsKCRtZXRob2QpIHsKICAgIHN0YXRpYyAkUkVBRF9PTkxZX0NBTExTID0KICAgICAgYXJyYXkoJ2FkbWluLmdldGFsbG9jYXRpb24nID0+IDEsCiAgICAgICAgICAgICdhZG1pbi5nZXRhcHBwcm9wZXJ0aWVzJyA9PiAxLAogICAgICAgICAgICAnYWRtaW4uZ2V0YmFubmVkdXNlcnMnID0+IDEsCiAgICAgICAgICAgICdhZG1pbi5nZXRsaXZlc3RyZWFtdmlhbGluaycgPT4gMSwKICAgICAgICAgICAgJ2FkbWluLmdldG1ldHJpY3MnID0+IDEsCiAgICAgICAgICAgICdhZG1pbi5nZXRyZXN0cmljdGlvbmluZm8nID0+IDEsCiAgICAgICAgICAgICdhcHBsaWNhdGlvbi5nZXRwdWJsaWNpbmZvJyA9PiAxLAogICAgICAgICAgICAnYXV0aC5nZXRhcHBwdWJsaWNrZXknID0+IDEsCiAgICAgICAgICAgICdhdXRoLmdldHNlc3Npb24nID0+IDEsCiAgICAgICAgICAgICdhdXRoLmdldHNpZ25lZHB1YmxpY3Nlc3Npb25kYXRhJyA9PiAxLAogICAgICAgICAgICAnY29tbWVudHMuZ2V0JyA9PiAxLAogICAgICAgICAgICAnY29ubmVjdC5nZXR1bmNvbm5lY3RlZGZyaWVuZHNjb3VudCcgPT4gMSwKICAgICAgICAgICAgJ2Rhc2hib2FyZC5nZXRhY3Rpdml0eScgPT4gMSwKICAgICAgICAgICAgJ2Rhc2hib2FyZC5nZXRjb3VudCcgPT4gMSwKICAgICAgICAgICAgJ2Rhc2hib2FyZC5nZXRnbG9iYWxuZXdzJyA9PiAxLAogICAgICAgICAgICAnZGFzaGJvYXJkLmdldG5ld3MnID0+IDEsCiAgICAgICAgICAgICdkYXNoYm9hcmQubXVsdGlnZXRjb3VudCcgPT4gMSwKICAgICAgICAgICAgJ2Rhc2hib2FyZC5tdWx0aWdldG5ld3MnID0+IDEsCiAgICAgICAgICAgICdkYXRhLmdldGNvb2tpZXMnID0+IDEsCiAgICAgICAgICAgICdldmVudHMuZ2V0JyA9PiAxLAogICAgICAgICAgICAnZXZlbnRzLmdldG1lbWJlcnMnID0+IDEsCiAgICAgICAgICAgICdmYm1sLmdldGN1c3RvbXRhZ3MnID0+IDEsCiAgICAgICAgICAgICdmZWVkLmdldGFwcGZyaWVuZHN0b3JpZXMnID0+IDEsCiAgICAgICAgICAgICdmZWVkLmdldHJlZ2lzdGVyZWR0ZW1wbGF0ZWJ1bmRsZWJ5aWQnID0+IDEsCiAgICAgICAgICAgICdmZWVkLmdldHJlZ2lzdGVyZWR0ZW1wbGF0ZWJ1bmRsZXMnID0+IDEsCiAgICAgICAgICAgICdmcWwubXVsdGlxdWVyeScgPT4gMSwKICAgICAgICAgICAgJ2ZxbC5xdWVyeScgPT4gMSwKICAgICAgICAgICAgJ2ZyaWVuZHMuYXJlZnJpZW5kcycgPT4gMSwKICAgICAgICAgICAgJ2ZyaWVuZHMuZ2V0JyA9PiAxLAogICAgICAgICAgICAnZnJpZW5kcy5nZXRhcHB1c2VycycgPT4gMSwKICAgICAgICAgICAgJ2ZyaWVuZHMuZ2V0bGlzdHMnID0+IDEsCiAgICAgICAgICAgICdmcmllbmRzLmdldG11dHVhbGZyaWVuZHMnID0+IDEsCiAgICAgICAgICAgICdnaWZ0cy5nZXQnID0+IDEsCiAgICAgICAgICAgICdncm91cHMuZ2V0JyA9PiAxLAogICAgICAgICAgICAnZ3JvdXBzLmdldG1lbWJlcnMnID0+IDEsCiAgICAgICAgICAgICdpbnRsLmdldHRyYW5zbGF0aW9ucycgPT4gMSwKICAgICAgICAgICAgJ2xpbmtzLmdldCcgPT4gMSwKICAgICAgICAgICAgJ25vdGVzLmdldCcgPT4gMSwKICAgICAgICAgICAgJ25vdGlmaWNhdGlvbnMuZ2V0JyA9PiAxLAogICAgICAgICAgICAncGFnZXMuZ2V0aW5mbycgPT4gMSwKICAgICAgICAgICAgJ3BhZ2VzLmlzYWRtaW4nID0+IDEsCiAgICAgICAgICAgICdwYWdlcy5pc2FwcGFkZGVkJyA9PiAxLAogICAgICAgICAgICAncGFnZXMuaXNmYW4nID0+IDEsCiAgICAgICAgICAgICdwZXJtaXNzaW9ucy5jaGVja2F2YWlsYWJsZWFwaWFjY2VzcycgPT4gMSwKICAgICAgICAgICAgJ3Blcm1pc3Npb25zLmNoZWNrZ3JhbnRlZGFwaWFjY2VzcycgPT4gMSwKICAgICAgICAgICAgJ3Bob3Rvcy5nZXQnID0+IDEsCiAgICAgICAgICAgICdwaG90b3MuZ2V0YWxidW1zJyA9PiAxLAogICAgICAgICAgICAncGhvdG9zLmdldHRhZ3MnID0+IDEsCiAgICAgICAgICAgICdwcm9maWxlLmdldGluZm8nID0+IDEsCiAgICAgICAgICAgICdwcm9maWxlLmdldGluZm9vcHRpb25zJyA9PiAxLAogICAgICAgICAgICAnc3RyZWFtLmdldCcgPT4gMSwKICAgICAgICAgICAgJ3N0cmVhbS5nZXRjb21tZW50cycgPT4gMSwKICAgICAgICAgICAgJ3N0cmVhbS5nZXRmaWx0ZXJzJyA9PiAxLAogICAgICAgICAgICAndXNlcnMuZ2V0aW5mbycgPT4gMSwKICAgICAgICAgICAgJ3VzZXJzLmdldGxvZ2dlZGludXNlcicgPT4gMSwKICAgICAgICAgICAgJ3VzZXJzLmdldHN0YW5kYXJkaW5mbycgPT4gMSwKICAgICAgICAgICAgJ3VzZXJzLmhhc2FwcHBlcm1pc3Npb24nID0+IDEsCiAgICAgICAgICAgICd1c2Vycy5pc2FwcHVzZXInID0+IDEsCiAgICAgICAgICAgICd1c2Vycy5pc3ZlcmlmaWVkJyA9PiAxLAogICAgICAgICAgICAndmlkZW8uZ2V0dXBsb2FkbGltaXRzJyA9PiAxKTsKICAgICRuYW1lID0gJ2FwaSc7CiAgICBpZiAoaXNzZXQoJFJFQURfT05MWV9DQUxMU1tzdHJ0b2xvd2VyKCRtZXRob2QpXSkpIHsKICAgICAgJG5hbWUgPSAnYXBpX3JlYWQnOwogICAgfQogICAgcmV0dXJuIHNlbGY6OmdldFVybCgkbmFtZSwgJ3Jlc3RzZXJ2ZXIucGhwJyk7CiAgfQoKICAvKioKICAgKiBCdWlsZCB0aGUgVVJMIGZvciBnaXZlbiBkb21haW4gYWxpYXMsIHBhdGggYW5kIHBhcmFtZXRlcnMuCiAgICoKICAgKiBAcGFyYW0gJG5hbWUgU3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBkb21haW4KICAgKiBAcGFyYW0gJHBhdGggU3RyaW5nIG9wdGlvbmFsIHBhdGggKHdpdGhvdXQgYSBsZWFkaW5nIHNsYXNoKQogICAqIEBwYXJhbSAkcGFyYW1zIEFycmF5IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMKICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgVVJMIGZvciB0aGUgZ2l2ZW4gcGFyYW1ldGVycwogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRVcmwoJG5hbWUsICRwYXRoPScnLCAkcGFyYW1zPWFycmF5KCkpIHsKICAgICR1cmwgPSBzZWxmOjokRE9NQUlOX01BUFskbmFtZV07CiAgICBpZiAoJHBhdGgpIHsKICAgICAgaWYgKCRwYXRoWzBdID09PSAnLycpIHsKICAgICAgICAkcGF0aCA9IHN1YnN0cigkcGF0aCwgMSk7CiAgICAgIH0KICAgICAgJHVybCAuPSAkcGF0aDsKICAgIH0KICAgIGlmICgkcGFyYW1zKSB7CiAgICAgICR1cmwgLj0gJz8nIC4gaHR0cF9idWlsZF9xdWVyeSgkcGFyYW1zLCBudWxsLCAnJicpOwogICAgfQogICAgcmV0dXJuICR1cmw7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBDdXJyZW50IFVSTCwgc3RyaXBwaW5nIGl0IG9mIGtub3duIEZCIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQKICAgKiBub3QgcGVyc2lzdC4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBjdXJyZW50IFVSTAogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRDdXJyZW50VXJsKCkgewogICAgJHByb3RvY29sID0gaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09ICdvbicKICAgICAgPyAnaHR0cHM6Ly8nCiAgICAgIDogJ2h0dHA6Ly8nOwogICAgJGN1cnJlbnRVcmwgPSAkcHJvdG9jb2wgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICAgICRwYXJ0cyA9IHBhcnNlX3VybCgkY3VycmVudFVybCk7CgogICAgLy8gZHJvcCBrbm93biBmYiBwYXJhbXMKICAgICRxdWVyeSA9ICcnOwogICAgaWYgKCFlbXB0eSgkcGFydHNbJ3F1ZXJ5J10pKSB7CiAgICAgICRwYXJhbXMgPSBhcnJheSgpOwogICAgICBwYXJzZV9zdHIoJHBhcnRzWydxdWVyeSddLCAkcGFyYW1zKTsKICAgICAgZm9yZWFjaChzZWxmOjokRFJPUF9RVUVSWV9QQVJBTVMgYXMgJGtleSkgewogICAgICAgIHVuc2V0KCRwYXJhbXNbJGtleV0pOwogICAgICB9CiAgICAgIGlmICghZW1wdHkoJHBhcmFtcykpIHsKICAgICAgICAkcXVlcnkgPSAnPycgLiBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMsIG51bGwsICcmJyk7CiAgICAgIH0KICAgIH0KCiAgICAvLyB1c2UgcG9ydCBpZiBub24gZGVmYXVsdAogICAgJHBvcnQgPQogICAgICBpc3NldCgkcGFydHNbJ3BvcnQnXSkgJiYKICAgICAgKCgkcHJvdG9jb2wgPT09ICdodHRwOi8vJyAmJiAkcGFydHNbJ3BvcnQnXSAhPT0gODApIHx8CiAgICAgICAoJHByb3RvY29sID09PSAnaHR0cHM6Ly8nICYmICRwYXJ0c1sncG9ydCddICE9PSA0NDMpKQogICAgICA/ICc6JyAuICRwYXJ0c1sncG9ydCddIDogJyc7CgogICAgLy8gcmVidWlsZAogICAgcmV0dXJuICRwcm90b2NvbCAuICRwYXJ0c1snaG9zdCddIC4gJHBvcnQgLiAkcGFydHNbJ3BhdGgnXSAuICRxdWVyeTsKICB9CgogIC8qKgogICAqIEdlbmVyYXRlIGEgc2lnbmF0dXJlIGZvciB0aGUgZ2l2ZW4gcGFyYW1zIGFuZCBzZWNyZXQuCiAgICoKICAgKiBAcGFyYW0gQXJyYXkgJHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byBzaWduCiAgICogQHBhcmFtIFN0cmluZyAkc2VjcmV0IHRoZSBzZWNyZXQgdG8gc2lnbiB3aXRoCiAgICogQHJldHVybiBTdHJpbmcgdGhlIGdlbmVyYXRlZCBzaWduYXR1cmUKICAgKi8KICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlU2lnbmF0dXJlKCRwYXJhbXMsICRzZWNyZXQpIHsKICAgIC8vIHdvcmsgd2l0aCBzb3J0ZWQgZGF0YQogICAga3NvcnQoJHBhcmFtcyk7CgogICAgLy8gZ2VuZXJhdGUgdGhlIGJhc2Ugc3RyaW5nCiAgICAkYmFzZV9zdHJpbmcgPSAnJzsKICAgIGZvcmVhY2goJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAkYmFzZV9zdHJpbmcgLj0gJGtleSAuICc9JyAuICR2YWx1ZTsKICAgIH0KICAgICRiYXNlX3N0cmluZyAuPSAkc2VjcmV0OwoKICAgIHJldHVybiBtZDUoJGJhc2Vfc3RyaW5nKTsKICB9CgogIC8qKgogICAqIFByaW50cyB0byB0aGUgZXJyb3IgbG9nIGlmIHlvdSBhcmVuJ3QgaW4gY29tbWFuZCBsaW5lIG1vZGUuCiAgICoKICAgKiBAcGFyYW0gU3RyaW5nIGxvZyBtZXNzYWdlCiAgICovCiAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBlcnJvckxvZygkbXNnKSB7CiAgICAvLyBkaXNhYmxlIGVycm9yIGxvZyBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIENMSSBlbnZpcm9ubWVudAogICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICBpZiAocGhwX3NhcGlfbmFtZSgpICE9ICdjbGknKSB7CiAgICAgIGVycm9yX2xvZygkbXNnKTsKICAgIH0KICAgIC8vIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgZXJyb3JzIG9uIHRoZSBwYWdlCiAgICAvLyBwcmludCAnZXJyb3JfbG9nOiAnLiRtc2cuIlxuIjsKICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKICB9CgogIC8qKgogICAqIEJhc2U2NCBlbmNvZGluZyB0aGF0IGRvZXNuJ3QgbmVlZCB0byBiZSB1cmxlbmNvZGUoKWVkLgogICAqIEV4YWN0bHkgdGhlIHNhbWUgYXMgYmFzZTY0X2VuY29kZSBleGNlcHQgaXQgdXNlcwogICAqICAgLSBpbnN0ZWFkIG9mICsKICAgKiAgIF8gaW5zdGVhZCBvZiAvCiAgICoKICAgKiBAcGFyYW0gU3RyaW5nIGJhc2U2NFVybEVuY29kZWRlZCBzdHJpbmcKICAgKi8KICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGJhc2U2NFVybERlY29kZSgkaW5wdXQpIHsKICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKHN0cnRyKCRpbnB1dCwgJy1fJywgJysvJykpOwogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCiR0bXAgPSBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL3RlbXBsYXRlcy9vcmlnX2ZiaW5pdF9hc3luYy50cGwnKTsKaWYoICR0bXAgKQogIHsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmJpbml0X2FzeW5jJywkdG1wKTsKICB9CgokdG1wID0gZmlsZV9nZXRfY29udGVudHMoZGlybmFtZShfX0ZJTEVfXykuJy90ZW1wbGF0ZXMvb3JpZ19mYmluaXRfc3luYy50cGwnKTsKaWYoICR0bXAgKQogIHsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmJpbml0X3N5bmMnLCR0bXApOwogIH0KCiR0bXAgPSBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL3RlbXBsYXRlcy9vcmlnX2ludml0ZS50cGwnKTsKaWYoICR0bXAgKQogIHsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKENHRkJBcHA6OlBSRUZfSU5WSVRFX1RFTVBMQVRFLCdzdGQnKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZShDR0ZCQXBwOjpUUExfU1lTREZMVF9JTlZJVEUsJHRtcCk7CiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2ludml0ZV9zdGQnLCR0bXApOwogIH0KIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRkJBcHAgKGMpIDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgdG9vbGJveCBvZiBjb252ZW5pZW5jZXMgdG8gYnVpbGQgZmFjZWJvb2sgaW50ZWdyYXRpb24gaW50byBhIHdlYnNpdGUKIyAgZm9yIENNUyBtb2R1bGVzIGFuZCB3ZWJzaXRlIGRlc2lnbmVycy4KIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CiR0aGlzLT5EZWxldGVUZW1wbGF0ZSgpOwokdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDb3JlJywnQ29udGVudFBvc3RSZW5kZXInKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_fbsettings_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnZmJfYXBwaWQnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9ZmJfYXBwaWQiIHZhbHVlPSJ7JGZiX2FwcGlkfSIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iMjAiLz4KICA8L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2ZiX2FwcHNlY3JldCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1mYl9hcHBzZWNyZXQiIHZhbHVlPSJ7JGZiX2FwcHNlY3JldH0iIHNpemU9IjQwIiBtYXhsZW5ndGg9IjQwIi8+CiAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdmYl9wZXJtcycpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7Y2FwdHVyZSBhc3NpZ249J3RtcCd9eyRhY3Rpb25pZH1mYl9wZXJtc3svY2FwdHVyZX0KICAgIHtodG1sX2NoZWNrYm94ZXMgbmFtZT0kdG1wIG9wdGlvbnM9JHBlcm1fbGlzdCBzZXBhcmF0b3I9Jzxici8+JyBzZWxlY3RlZD0kZmJfcGVybXN9CiAgICA8YnIvPgogICAgeyRtb2QtPkxhbmcoJ2luZm9fZmJfcGVybXMnKX0KICA8L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnc3VibWl0Jyl9Ii8+CiAgPC9wPgo8L2Rpdj4KeyRmb3JtZW5kfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/orig_fbinit_async.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogZmFjZWJvb2sgYXN5bmNocm9ub3VzIGluaXQgdGVtcGxhdGUgKn0KPGRpdiBpZD0iZmItcm9vdCI+PC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4Ke2xpdGVyYWx9CiAgd2luZG93LmZiQXN5bmNJbml0ID0gZnVuY3Rpb24oKSB7CiAgICBGQi5pbml0KHthcHBJZDogey9saXRlcmFsfSd7JGZiX2FwcGlkfSd7bGl0ZXJhbH0sIHN0YXR1czogdHJ1ZSwgY29va2llOiB0cnVlLCB4ZmJtbDogdHJ1ZX0pOwogIH07CiAgKGZ1bmN0aW9uKCkgewogICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgZS5hc3luYyA9IHRydWU7CiAgICBlLnNyYyA9IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICsKICAgICAgJy8vY29ubmVjdC5mYWNlYm9vay5uZXQvZW5fVVMvYWxsLmpzJzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYi1yb290JykuYXBwZW5kQ2hpbGQoZSk7CiAgfSgpKTsKey9saXRlcmFsfQo8L3NjcmlwdD4K]]></data>
	</file>
	<file>
	  <filename>/templates/orig_fbinit_sync.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogZmFjZWJvb2sgc3luY2hyb25vdXMgaW5pdGlhbGl6YXRpb24gKn0KPGRpdiBpZD0iZmItcm9vdCI+PC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9jb25uZWN0LmZhY2Vib29rLm5ldC9lbl9VUy9hbGwuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgRkIuaW5pdCh7bGRlbGltfQogICAgYXBwSWQgIDogJ3skZmJfYXBwaWR9JywKICAgIHN0YXR1cyA6IHRydWUsIC8vIGNoZWNrIGxvZ2luIHN0YXR1cwogICAgY29va2llIDogdHJ1ZSwgLy8gZW5hYmxlIGNvb2tpZXMgdG8gYWxsb3cgdGhlIHNlcnZlciB0byBhY2Nlc3MgdGhlIHNlc3Npb24KICAgIHhmYm1sICA6IHRydWUgIC8vIHBhcnNlIFhGQk1MCiAge3JkZWxpbX0pOwo8L3NjcmlwdD4=]]></data>
	</file>
	<file>
	  <filename>/templates/orig_invite.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogPHNwYW4gb25jbGljaz0iamF2YXNjcmlwdDpmeyRoYXNofSgpOyI+Y2xpY2sgbWU8L3NwYW4+ICp9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gZnskaGFzaH0oKSB7bGRlbGltfQpGQi51aSh7bGRlbGltfW1ldGhvZDogJ2ZibWwuZGlhbG9nJywgZmJtbDogJzxmYjpyZXF1ZXN0LWZvcm0gYWN0aW9uPSJ7JGRlc3RfdXJsfSIgbWV0aG9kPSJ7JG1ldGhvZH0iIGludml0ZT0idHJ1ZSIgdHlwZT0ieyRhcHBfbmFtZX0iIGNvbnRlbnQ9InskY29udGVudH0iPjxmYjptdWx0aS1mcmllbmQtc2VsZWN0b3IgYWN0aW9udGV4dD0ieyRhY3Rpb25fdGV4dH0iIHNob3dib3JkZXI9InskYm9yZGVyfGRlZmF1bHQ6dHJ1ZX0iIHJvd3M9Inskcm93c3xkZWZhdWx0OjV9IiBjb2xzPSJ7JGNvbHN8ZGVmYXVsdDo1fSIgbWF4PSJ7JG1heF91c2Vyc3xkZWZhdWx0OjEwfSIge2lmIGlzc2V0KCRleGNsdWRlX2lkcyl9ZXhjbHVkZV9pZHM9InskZXhjbHVkZV9pZHN9InsvaWZ9IHtpZiBpc3NldCgkYnlwYXNzKX1ieXBhc3M9InskYnlwYXNzfSJ7L2lmfSB7aWYgaXNzZXQoJGNvbmRlbnNlZCl9Y29uZGVuc2VkPSJ7JGNvbmRlbnNlZH0iey9pZn0gZW1haWxfaW52aXRlPSJ7JGVtYWlsX2ludml0ZXxkZWZhdWx0OiJmYWxzZSJ9IiBpbXBvcnRfZXh0ZXJuYWxfZnJpZW5kcz0ieyRpbXBvcnRfZXh0ZXJuYWxfZnJpZW5kc3xkZWZhdWx0OiJmYWxzZSJ9Ii8+PC9mYjpyZXF1ZXN0LWZvcm0+J3tyZGVsaW19KTsKe3JkZWxpbX0KPC9zY3JpcHQ+Cg==]]></data>
	</file>
</module>
