<?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>Skeleton</name>
	<version>1.3</version>
  <mincmsversion>0.13</mincmsversion>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPk5vdGhpbmcuIEl0J3MgZGVzaWduZWQgdG8gYmUgYSBzdGFydGluZyBwb2ludCBmb3IgeW91IHRvIGRldmVsb3AgeW91ciBvd24gbW9kdWxlcy48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5XZWxsLCB5b3UgY291bGQgYWN0dWFsbHkgaW5zdGFsbCBpdCBieSBwbGFjaW5nIHRoZSBtb2R1bGUgaW4gYSBwYWdlIG9yIHRlbXBsYXRlIHVzaW5nIHRoZSBzbWFydHkgdGFnICYjMTIzO2Ntc19tb2R1bGUgbW9kdWxlPSdTa2VsZXRvbid9PC9wPgo8cD5Zb3Ugd291bGQgYmUgd2lzZXIsIGhvd2V2ZXIsIHRvIHVzZSB0aGUgbW9kdWxlIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCBlZGl0aW5nIHRoZSBjb2RlIHRvIGRvIHdoYXRldmVyIGl0IGlzIHlvdSBhcmUgd2FudGluZyB0byBkby48L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgU2pHJ3MKbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuY21zbW9kdWxlcy5jb20iPkNNU01vZHVsZXMuY29tPC9hPi48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBTakcsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgCjwvdWw+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA2LCBTYW11ZWwgR29sZHN0ZWluIDxhIGhyZWY9Im1haWx0bzpzamdAY21zbW9kdWxlcy5jb20iPiZsdDtzamdAY21zbW9kdWxlcy5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==</help>
	<about>PGJyIC8+QXV0aG9yOiBTakcgJmx0O3NqZ0BjbXNtb2R1bGVzLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjM8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CjxsaT5WZXJzaW9uIDEuMi4gMjkgRGVjZW1iZXIgMjAwNS4gRml4ZXMgdG8gYnVncyBwb2ludGVkIG91dCBieSBQYXRyaWNrIExvc2NobWlkdC4gVXBkYXRlcyB0byBiZSBjb3JyZWN0IGZvciBDTVMgTWFkZSBTaW1wbGUgdmVyc2lvbnMgMC4xMS54LjwvbGk+CjxsaT5WZXJzaW9uIDEuMS4gMTEgU2VwdGVtYmVyIDIwMDUuIENsZWFuZWQgdXAgcmVmZXJlbmNlcyB0aGF0IGNhdXNlZCBwcm9ibGVtcyBmb3IgUEhQIDQuNC54IG9yIDUuMC41LjwvbGk+CjxsaT5WZXJzaW9uIDEuMC4gNiBBdWd1c3QgMjAwNS4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+PC91bD48YnIgLz4=</about>
	<description>This module is a skeleton module that does nothing.</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_prefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5QWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5pZCkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBwcmVzZW50IGFuIEFkbWluCgkgICBmb3JtIHRoYXQgY29udGFpbnMgcHJlZmVyZW5jZSBpbmZvcm1hdGlvbi4KCSAgIAoJICAgSXQgc2V0cyBzbWFydHkgdGFnIHZhbHVlcywgYW5kIHRoZW4gY2FsbHMgdGhlCgkgICBjb2RlIG5lY2Vzc2FyeSB0byByZW5kZXIgdGhlIHRlbXBsYXRlLgoJICAgCgkgICBZb3Ugd2lsbCBzZWUgdGhhdCB0aGUgbWV0aG9kIGNhbGxzIGFuIEFQSSBtZXRob2QgdG8KCSAgIGNyZWF0ZSBhIGNoZWNrYm94LiBUaGlzIGlzIGp1c3Qgb25lIG9mIG1hbnkgYXZhaWxhYmxlCgkgICBtZXRob2RzIGZvciBmb3JtIGNyZWF0aW9uLgoJICAgCgkgICBUYWtlIGEgbG9vayBhdCBDTVNST09UL2xpYi9jbGFzc2VzL2NsYXNzLm1vZHVsZS5pbmMucGhwIGZvciBhCgkgICBsYXJnZSBjb2xsZWN0aW9uIG9mIG1ldGhvZHMgdG8gY3JlYXRlIEhUTUwgYW5kIGZvcm0gd2lkZ2V0czoKCQkgICAKCQkgICAtIENyZWF0ZUlucHV0UGFzc3dvcmQgICAgICAgLSBDcmVhdGVJbnB1dFRleHQKCQkgICAtIENyZWF0ZUxpbmsgICAgICAgICAgICAgICAgICAgICAgIC0gQ3JlYXRlRmlsZVVwbG9hZElucHV0CgkJICAgLSBDcmVhdGVUZXh0QXJlYSAgICAgICAgICAgICAgICAtIENyZWF0ZUlucHV0U3VibWl0CgkJICAgLSBDcmVhdGVJbnB1dFJhZGlvR3JvdXAgICAgLSBDcmVhdGVJbnB1dENoZWNrYm94CgkJICAgLSBDcmVhdGVJbnB1dFNlbGVjdExpc3QgICAgICAgLSBDcmVhdGVJbnB1dEhpZGRlbgoJCSAgIAoJCSAgIFRoZXJlIGFyZSBhbHNvIG1ldGhvZHMgZm9yIG1ha2luZyB0YWJiZWQgaW50ZXJmYWNlczoKCQkgICAtIFN0YXJ0VGFiSGVhZGVycyAgICAgICAgICAgICAgLSBTZXRUYWJIZWFkZXIKCQkgICAtIEVuZFRhYkhlYWRlcnMgICAgICAgICAgICAgICAgLSBTdGFydFRhYkNvbnRlbnQKCQkgICAtIEVuZFRhYkNvbnRlbnQgICAgICAgICAgICAgICAgLSBTdGFydFRhYgoJCSAgIC0gRW5kVGFiCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKgogICAgRm9yIHNlcGFyYXRlZCBtZXRob2RzLCB5b3UnbGwgYWx3YXlzIHdhbnQgdG8gc3RhcnQgd2l0aCB0aGUgZm9sbG93aW5nCiAgICBsaW5lIHdoaWNoIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG1ldGhvZCB3YXMgY2FsbGVkIGZyb20gdGhlIG1vZHVsZQogICAgQVBJLCBhbmQgdGhhdCBldmVyeXRoaW5nJ3Mgc2FmZSB0byBjb250aW51ZToKKi8gCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLyoKICAgIEZvciBzZXBhcmF0ZWQgbWV0aG9kcywgeW91IHdvbid0IGJlIGFibGUgdG8gZG8gcGVybWlzc2lvbiBjaGVja3MgaW4KICAgIHRoZSBEb0FjdGlvbiBtZXRob2QsIHNvIHlvdSdsbCBuZWVkIHRvIGRvIHRoZW0gYXMgbmVlZGVkIGluIHlvdXIKICAgIG1ldGhvZDoKKi8gCmlmICghICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBTa2VsZXRvbicpKSBleGl0OwoKLyogQWZ0ZXIgdGhpcywgdGhlIGNvZGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBjb2RlIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlCiAgICB3cmFwcGVkIGluIHRoZSBEaXNwbGF5QWRtaW5QcmVmcygpIG1ldGhvZCBpbiB0aGUgbW9kdWxlIGJvZHkuCiovCgogICAgCS8vIHNpbXBsZSB3YXkgdG8gaGF2ZSBjb21tb24gbmF2IGF2YWlsYWJsZSB0byBhbGwgYWRtaW4gcGFnZXMKICAgIAkkdGhpcy0+RGlzcGxheUFkbWluTmF2KCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKCiAgICAJLy8gQ3JlYXRlRm9ybVN0YXJ0IHNldHMgdXAgYSBwcm9wZXIgZm9ybSB0YWcgdGhhdCB3aWxsIGNhdXNlIHRoZSBzdWJtaXQgdG8KICAgIAkvLyByZXR1cm4gY29udHJvbCB0byB0aGlzIG1vZHVsZSBmb3IgcHJvY2Vzc2luZy4KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnc2F2ZV9hZG1pbl9wcmVmcycsICRyZXR1cm5pZCkpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsICdTdWJtaXQnKSk7CgoKCQkvLyBpdCdzIGdvb2QgcHJhY3RpY2UgdG8gc2V0IGV2ZW4gc3RhdGljIHRpdGxlcyB1c2luZyBzbWFydHksIHNvIGxvY2FsaXphdGlvbiBpcwoJCS8vIGVhc2llci4KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX3NpbmdfbG91ZGx5JywgJHRoaXMtPkxhbmcoJ3RpdGxlX3NpbmdfbG91ZGx5JykpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc2VjdGlvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9tb2RfcHJlZnMnKSk7CgkJCgkJLy8geW91J2xsIG9mdGVuIHdhbnQgdG8gZG8gdGhpbmdzIGxpa2UgdGhpcyB0byBwcm92aWRlIGZlZWRiYWNrOgoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsIChpc3NldCgkcGFyYW1zWydtZXNzYWdlJ10pPyRwYXJhbXNbJ21lc3NhZ2UnXTonJykpOwoKCQkvLyBwcmVzZW50IGEgY29udHJvbCBvZiB0aGUgcHJlZmVyZW5jZTsgaW4gdGhpcyBjYXNlLCBpdCdzIGEKCQkvLyBjaGVja2JveCBmb3Igb3VyICJTaW5nIExvdWRseSIgb3B0aW9uLgoJCSAgIAogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfc2luZ19sb3VkbHknLAogICAgICAgIAkkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzaW5nX2xvdWRseScsIDEsCiAgICAgICAgCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2luZ19sb3VkbHknLCAnMScpKS4nICcuCiAgICAgICAgCQkkdGhpcy0+TGFuZygndGl0bGVfc2luZ19sb3VkbHknKSk7CgogICAgICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5wcmVmcy50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5TW9kdWxlT3V0cHV0KCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBkaXNwbGF5CgkgICBzb21ldGhpbmcgd2hlcmUgYSBwYWdlIG9yIHRlbXBsYXRlIGhhcyBhIHRhZyBjYWxsaW5nCgkgICB0aGlzIG1vZHVsZS4KCSAgIAoJICAgTm90ZSB0aGF0IGl0IHVzZXMgYSB0ZW1wbGF0ZSwgYW5kIGlzIHRodXMgdmVyeSBwb3dlcmZ1bCwKCSAgIGV2ZW4gaWYgaXQncyBzaW1wbGUuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKgogICAgRm9yIHNlcGFyYXRlZCBtZXRob2RzLCB5b3UnbGwgYWx3YXlzIHdhbnQgdG8gc3RhcnQgd2l0aCB0aGUgZm9sbG93aW5nCiAgICBsaW5lIHdoaWNoIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG1ldGhvZCB3YXMgY2FsbGVkIGZyb20gdGhlIG1vZHVsZQogICAgQVBJLCBhbmQgdGhhdCBldmVyeXRoaW5nJ3Mgc2FmZSB0byBjb250aW51ZToKKi8gCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLyogQWZ0ZXIgdGhpcywgdGhlIGNvZGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBjb2RlIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlCiAgICB3cmFwcGVkIGluIHRoZSBEaXNwbGF5QWRtaW5QcmVmcygpIG1ldGhvZCBpbiB0aGUgbW9kdWxlIGJvZHkuCiovCgoJCWlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2luZ19sb3VkbHknLDEpID09IDEpCgkJCXsKCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsb3VkbmVzcycsICR0aGlzLT5MYW5nKCdsb3VkJykpOwoJCQl9CgkJZWxzZQoJCQl7CgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbignbG91ZG5lc3MnLCAkdGhpcy0+TGFuZygncXVpZXQnKSk7CgkJCX0KCiAgICAgICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdwbHVnaW4udHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5QWRtaW5QYW5lbCgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCgkgICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKCSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gcHJlc2VudCBhbiBBZG1pbgoJICAgcGFuZWwuCgkgICAKCSAgIEl0IHNldHMgc21hcnR5IHRhZyB2YWx1ZXMsIGFuZCB0aGVuIGNhbGxzIHRoZQoJICAgY29kZSBuZWNlc3NhcnkgdG8gcmVuZGVyIHRoZSB0ZW1wbGF0ZS4gICAKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qCiAgICBGb3Igc2VwYXJhdGVkIG1ldGhvZHMsIHlvdSdsbCBhbHdheXMgd2FudCB0byBzdGFydCB3aXRoIHRoZSBmb2xsb3dpbmcKICAgIGxpbmUgd2hpY2ggY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQgZnJvbSB0aGUgbW9kdWxlCiAgICBBUEksIGFuZCB0aGF0IGV2ZXJ5dGhpbmcncyBzYWZlIHRvIGNvbnRpbnVlOgoqLyAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLyoKICAgIEZvciBzZXBhcmF0ZWQgbWV0aG9kcywgeW91IHdvbid0IGJlIGFibGUgdG8gZG8gcGVybWlzc2lvbiBjaGVja3MgaW4KICAgIHRoZSBEb0FjdGlvbiBtZXRob2QsIHNvIHlvdSdsbCBuZWVkIHRvIGRvIHRoZW0gYXMgbmVlZGVkIGluIHlvdXIKICAgIG1ldGhvZDoKKi8gCmlmICghICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBTa2VsZXRvbicpKQoJewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7Cgl9CgovKiBBZnRlciB0aGlzLCB0aGUgY29kZSBpcyBpZGVudGljYWwgdG8gdGhlIGNvZGUgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUKICAgIHdyYXBwZWQgaW4gdGhlIERpc3BsYXlBZG1pblBhbmVsKCkgbWV0aG9kIGluIHRoZSBtb2R1bGUgYm9keS4KKi8KCiAgICAJLy8gc2ltcGxlIHdheSB0byBoYXZlIGNvbW1vbiBuYXYgYXZhaWxhYmxlIHRvIGFsbCBhZG1pbiBwYWdlcwogICAgCSR0aGlzLT5EaXNwbGF5QWRtaW5OYXYoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwogICAgCiAgICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zZWN0aW9uJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2FkbWluX3BhbmVsJykpOwogICAgCSR0aGlzLT5zbWFydHktPmFzc2lnbignd2VsY29tZV90ZXh0JywgJHRoaXMtPkxhbmcoJ3dlbGNvbWVfdGV4dCcpKTsKICAgIAogICAgICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5wYW5lbC50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.save_admin_prefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBTYXZlQWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCgkgICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKCSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gc2F2ZSBBZG1pbgoJICAgcHJlZnMgZnJvbSB0aGUgZm9ybSBjcmVhdGVkIGJ5IERpc3BsYXlBZG1pblByZWZzLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyoKICAgIEZvciBzZXBhcmF0ZWQgbWV0aG9kcywgeW91J2xsIGFsd2F5cyB3YW50IHRvIHN0YXJ0IHdpdGggdGhlIGZvbGxvd2luZwogICAgbGluZSB3aGljaCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCBtZXRob2Qgd2FzIGNhbGxlZCBmcm9tIHRoZSBtb2R1bGUKICAgIEFQSSwgYW5kIHRoYXQgZXZlcnl0aGluZydzIHNhZmUgdG8gY29udGludWU6CiovIAppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCi8qCiAgICBGb3Igc2VwYXJhdGVkIG1ldGhvZHMsIHlvdSB3b24ndCBiZSBhYmxlIHRvIGRvIHBlcm1pc3Npb24gY2hlY2tzIGluCiAgICB0aGUgRG9BY3Rpb24gbWV0aG9kLCBzbyB5b3UnbGwgbmVlZCB0byBkbyB0aGVtIGFzIG5lZWRlZCBpbiB5b3VyCiAgICBtZXRob2Q6CiovIAppZiAoISAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgU2tlbGV0b24nKSkKCXsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJfQoJCi8qIEFmdGVyIHRoaXMsIHRoZSBjb2RlIGlzIGlkZW50aWNhbCB0byB0aGUgY29kZSB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZQogICAgd3JhcHBlZCBpbiB0aGUgRGlzcGxheUFkbWluUHJlZnMoKSBtZXRob2QgaW4gdGhlIG1vZHVsZSBib2R5LgoqLwoKCQkvLyBzZXQgdGhlIHByZWZlcmVuY2UKICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2luZ19sb3VkbHknLCBpc3NldCgkcGFyYW1zWydzaW5nX2xvdWRseSddKT8kcGFyYW1zWydzaW5nX2xvdWRseSddOicwJyk7CgoJCS8vIHNlbmQgYW4gZXZlbnQgdG8gYW55IHN1YnNjcmliaW5nIHVzZXIgdGFncyBvciBtb2R1bGVzCgkJJHBhcm1zID0gYXJyYXkoKTsKICAgIAkkcGFybXNbJ3NpbmdfbG91ZGx5J10gPSAoaXNzZXQoJHBhcmFtc1snc2luZ19sb3VkbHknXSk/dHJ1ZTpmYWxzZSk7CiAgICAJJHRoaXMtPlNlbmRFdmVudCgnT25Ta2VsZXRvblByZWZlcmVuY2VDaGFuZ2UnLCRwYXJtcyk7CgoKICAgICAgICAvLyBpZiB5b3Ugd2FudGVkIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIGF1ZGl0IGxvZywgeW91IGNvdWxkIHdyaXRlIHNvbWV0aGluZyBoZXJlLgogICAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdwcmVmc3VwZGF0ZWQnKTsKICAgICAgICAkdGhpcy0+RG9BY3Rpb24oJ2FkbWluX3ByZWZzJywgJGlkLCAkcGFyYW1zKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAPcAAO3t7evr6/v7++7u7vHx8fz8/C8vL+np6RYWFkRERO/v7+rq6jg4OEBAQObm5vb29ikpKezs7PDw8ENDQ0tLSzU1NS0tLfj4+DExMfLy8h0dHUhISGdnZywsLCcnJx4eHgwMDA8PDwYGBklJSfn5+Q0NDVVVVVFRUWJiYl9fXzQ0ND4+PvPz8zMzM+Pj4xcXFzk5OSAgIE1NTRsbGyMjIxkZGQ4ODhISEhUVFQcHBwkJCQgICE9PTxoaGnx8fOfn58nJydnZ2VRUVFBQUHt7e29vb0JCQkxMTF1dXQQEBBMTE3Z2dlNTU2xsbC4uLrGxsTAwMDo6OkVFRTs7OzIyMiYmJisrKxwcHCEhIX19fbi4uMDAwMPDw/r6+kFBQcbGxhgYGJGRkWVlZZqamrm5uUpKSlxcXD8/P2RkZHJyclJSUn9/fz09Paampvf390dHR93d3VtbW5aWlhAQEN/f3yoqKuXl5Wtrazc3NyUlJQAAAAUFBf39/eTk5EZGRsLCws3NzdDQ0GFhYdPT0+Dg4KysrAMDA4WFhVlZWc7OzrOzs8rKyujo6K6urpycnJCQkF5eXq2trZ6entTU1NHR0YSEhCIiInNzc2BgYCgoKKKiom5ubnV1dZWVlVZWVqurq2hoaGNjY7y8vB8fH3BwcMHBwY2NjfX19aGhoVdXV+Li4qCgoBEREXh4eMvLy21tbU5OTmlpadzc3LKysrCwsPT09DY2NpmZmVpaWiQkJNfX14CAgK+vr8fHx4ODg5+fnwsLC1hYWGZmZtXV1QoKCv7+/hQUFJubm+Hh4bu7u7S0tHd3d35+fo+Pj5KSktbW1piYmHR0dDw8PI6OjpOTk8/Pz4yMjNjY2IaGhnp6etvb28XFxdra2sjIyNLS0qqqqqmpqb+/v2pqaoGBgbe3t4KCgr6+vqSkpImJiXFxcYeHhwEBAYiIiAICAqioqKOjo8TExLW1taenp6WlpYuLi8zMzJSUlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAgACAAAAj/APMgGPiix5UPBlL4cqTlT6RAq3Zx8AOFxoceNWqA0TDjBQ5LN5Ik0VFiDg4EHVCMAado0S1eyqy9EgKjwygESuaEoMJDxhtcStbpULKRRp1Uh6ipawTknJYvnYQ1MIBhChsruZxAWhKLAygLBqh4sBJlSJY7JxKsEKNFXqNujxp8mFOixhskpDRBu7PEFKkiRZKiYxZGmAEsPSAwIPKETJAsM0KUAKHDQKFw6cJMmqSFVqEwt765OtDJ0oeOeaQhOTZLFQcENnLswRJNzhgi44AQgqMrQoYnlSLFc2QGyosSODyYcLSNAK4ke3JgWNMqTx13khrBcxAAQJBPkcjB/7KFZNMlFMGQtOLFRUGzOCiaEJHBysYNFFySfXER4MCwei74gMcGENRggBdChGKKLow8QAYRTYyQxw0l5KADA20Ash93fTgwiCBMxKADMMZAUAEFaQQxAAv2yHACLGqYwAMGWGBRRBCA2EHHAAco8AUoo9yQSQUtWGGBEdggowABT6gw1w5JiACCFRPAsAUyP1AyAAAsKCINA1N0gMAOIoSgRAJwSKAAFxZAkEADHdwAwh6ZICIHAA4AEQGevqCxARgivACBBS1M4QkhAyzgwDGQUOCHFFRMYYsSUEgywA9cdDeIM3F8gEMHFXiARRUGqLHjAgNksUM7euhhCDAQrP/gxBIE/FAKAAP0UQkDDXhhhQ17iLBDCVAEQkAAAaxxEAIgGNIqDmX4MMwBWwwgwTXZcHDCDCLkQAwrV0DAAxwEEJCBMhvcsQEeLdBAjAg0LAHEAqIAoMAzbYgRQwgxqLDCGQkIcYksGZBwgSgTVFADCAhQsYIHM5zxBwCKdOeCHAxkMkECHfSAQwwYmECHBBcIsMUETlTRbBIaHLGBAWMMoMkACiQSih+IqKBDtzvU0UAKB0RAggAH/GKEF1fYAEIOCJyARhZ2/AJABppwwAkbIdgQggZOmPGGOA4IzccpkySAQQVghHCDDTGAcsggqADwwzvTHEFDD7lsMIIUgsD/UEYiClxQjBvacGLACgxUgcAVHrRQRB+fBLCAK6FYUEUDiMBQQxVSYDBBNRI8MPgC5qRAgwYW4BGFEWwwocofERBQihBSpOCJB8ZooIIMMqTSBwEkFHABAJQ0c0QLL8ywAhqQoAAINwoA0MYaawxhiQYxGFAGBWygMUAGAhTQBZ60oGDCBHWMUkETzixihwKMPCFJLDBY0AEDG5xRRhRpZMBCAQUQAAAWIAt2GOAII1ABBCgAjSAEYEWByMIQNsYBMQihLEboxAUeID4BsABZT2gBBKhAgRMwgRSJKJcbqrEMJpiAGZvwgwVGEAc1rOIBFwig8CIwADikQAMecEIw0NLgg1JIIAMPoMQ0dvEITOABAwxAAg+MIIcHBI8PYzvAAVxQiQpAQQUMiEMYFhG7B+DrE2k4QwUSwAEKUGAChbhAF8LHh1rY4QcBQMUbEuCFKTQgGkAIgARqQYgtmMIMPPBEE9QgBRlQoBcPEEAXAPgARhxgAWQYAQxGMIITNGEeATBXBMhwhxRgwgeCiEIDhlAOF7BAALAUAAkk54BkYAIDDWCCGIpAj5FFbxZEuAQnNmGCV4yhFwcAgARiWQA3HEByovBBAo5ghiUs4xHeCAgAOw==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1BlZGFudGljIFNrZWxldG9uIE1vZHVsZSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1Bvc3QgSW5zdGFsbCBNZXNzYWdlLCBlLmcuLCBCZSBzdXJlIHRvIHNldCAiVXNlIFNrZWxldG9ucyIgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnUG9zdCBVbmluc3RhbGwgTWVzc2FnZSwgZS5nLiwgIkN1cnNlcyEgRm9pbGVkIEFnYWluISInOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gWW91XCdyZSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGlzIGZpbmUgbW9kdWxlPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOwokbGFuZ1snbG91ZCddID0gJ0xPVUQuJzsKJGxhbmdbJ3F1aWV0J10gPSAncXVpZXQnOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsKJGxhbmdbJ3RpdGxlX3NpbmdfbG91ZGx5J10gPSAnU2luZyBMb3VkbHk/JzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ01vZHVsZSBQcmVmZXJlbmNlcyc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bGUgQWRtaW4gUGFuZWwnOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdTa2VsZXRvbiBNb2R1bGUnOwokbGFuZ1snZXZlbnRfaW5mb19PblNrZWxldG9uUHJlZmVyZW5jZUNoYW5nZSddID0gJ0FuIGV2ZW50IGdlbmVyYXRlZCB3aGVuICB0aGUgcHJlZmVyZW5jZXMgdG8gdGhlIFNrZWxldG9uIE1vZHVsZSBnZXQgY2hhbmdlZCc7CiRsYW5nWydldmVudF9oZWxwX09uU2tlbGV0b25QcmVmZXJlbmNlQ2hhbmdlJ10gPSAnPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gdGhlIHByZWZlcmVuY2VzIHRvIHRoZSBTa2VsZXRvbiBNb2R1bGUgZ2V0IGNoYW5nZWQ8L3A+CjxoND5QYXJhbWV0ZXJzPC9oND4KPHVsPgo8bGk+PGVtPnNpbmdfbG91ZGx5PC9lbT4gLSBUaGUgbmV3IHNldHRpbmcgb2YgdGhlICJTaW5nIExvdWRseSIgcHJlZmVyZW5jZTsgYm9vbGVhbjwvbGk+CjwvdWw+IAonOwoKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgaXMgYSBza2VsZXRvbiBtb2R1bGUgdGhhdCBkb2VzIG5vdGhpbmcuJzsKJGxhbmdbJ3dlbGNvbWVfdGV4dCddID0gJzxwPldlbGNvbWUgdG8gdGhlIFBlZGFudGljIFNrZWxldG9uIE1vZHVsZSBhZG1pbiBzZWN0aW9uLiBTb21ldGhpbmcgZWxzZSB3b3VsZCBwcm9iYWJseSBnbyBoZXJlIGlmIHRoZSBtb2R1bGUgYWN0dWFsbHkgZGlkIHNvbWV0aGluZy48L3A+JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMS4yLiAyOSBEZWNlbWJlciAyMDA1LiBGaXhlcyB0byBidWdzIHBvaW50ZWQgb3V0IGJ5IFBhdHJpY2sgTG9zY2htaWR0LiBVcGRhdGVzIHRvIGJlIGNvcnJlY3QgZm9yIENNUyBNYWRlIFNpbXBsZSB2ZXJzaW9ucyAwLjExLnguPC9saT4KPGxpPlZlcnNpb24gMS4xLiAxMSBTZXB0ZW1iZXIgMjAwNS4gQ2xlYW5lZCB1cCByZWZlcmVuY2VzIHRoYXQgY2F1c2VkIHByb2JsZW1zIGZvciBQSFAgNC40Lnggb3IgNS4wLjUuPC9saT4KPGxpPlZlcnNpb24gMS4wLiA2IEF1Z3VzdCAyMDA1LiBJbml0aWFsIFJlbGVhc2UuPC9saT48L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPk5vdGhpbmcuIEl0XCdzIGRlc2lnbmVkIHRvIGJlIGEgc3RhcnRpbmcgcG9pbnQgZm9yIHlvdSB0byBkZXZlbG9wIHlvdXIgb3duIG1vZHVsZXMuPC9wPgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+V2VsbCwgeW91IGNvdWxkIGFjdHVhbGx5IGluc3RhbGwgaXQgYnkgcGxhY2luZyB0aGUgbW9kdWxlIGluIGEgcGFnZSBvciB0ZW1wbGF0ZSB1c2luZyB0aGUgc21hcnR5IHRhZyAmIzEyMztjbXNfbW9kdWxlIG1vZHVsZT1cJ1NrZWxldG9uXCd9PC9wPgo8cD5Zb3Ugd291bGQgYmUgd2lzZXIsIGhvd2V2ZXIsIHRvIHVzZSB0aGUgbW9kdWxlIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCBlZGl0aW5nIHRoZSBjb2RlIHRvIGRvIHdoYXRldmVyIGl0IGlzIHlvdSBhcmUgd2FudGluZyB0byBkby48L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgU2pHXCdzCm1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmNtc21vZHVsZXMuY29tIj5DTVNNb2R1bGVzLmNvbTwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgU2pHLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIAo8L3VsPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgU2FtdWVsIEdvbGRzdGVpbiA8YSBocmVmPSJtYWlsdG86c2pnQGNtc21vZHVsZXMuY29tIj4mbHQ7c2pnQGNtc21vZHVsZXMuY29tJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KJzsKPz4K]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNrZWxldG9uIC0gYSBwZWRhbnRpYyAic3RhcnRpbmcgcG9pbnQiIG1vZHVsZQojIFZlcnNpb246IDEuMywgU2pHCiMgTWV0aG9kOiBJbnN0YWxsCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoKICAgIEZvciBzZXBhcmF0ZWQgbWV0aG9kcywgeW91J2xsIGFsd2F5cyB3YW50IHRvIHN0YXJ0IHdpdGggdGhlIGZvbGxvd2luZwogICAgbGluZSB3aGljaCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCBtZXRob2Qgd2FzIGNhbGxlZCBmcm9tIHRoZSBtb2R1bGUKICAgIEFQSSwgYW5kIHRoYXQgZXZlcnl0aGluZydzIHNhZmUgdG8gY29udGludWU6CiovIAppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCgovKiBBZnRlciB0aGlzLCB0aGUgY29kZSBpcyBpZGVudGljYWwgdG8gdGhlIGNvZGUgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUKICAgIHdyYXBwZWQgaW4gdGhlIEluc3RhbGwoKSBtZXRob2QgaW4gdGhlIG1vZHVsZSBib2R5LgoqLwoKCQkkZGIgPSYgJGdDbXMtPkdldERiKCk7CgkJCgkJLy8gbXlzcWwtc3BlY2lmaWMsIGJ1dCBpZ25vcmVkIGJ5IG90aGVyIGRhdGFiYXNlCgkJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJCQogICAgICAgIC8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgogICAgICAgICRmbGRzID0gIgoJCQlza2VsZXRvbl9pZCBJIEtFWSwKCQkJZGVzY3JpcHRpb24gQyg4MCkKCQkJIjsKCgkJLy8gY3JlYXRlIGl0LiBUaGlzIHNob3VsZCBkbyBlcnJvciBjaGVja2luZywgYnV0IEknbSBhIGxhenkgc29kLgoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9za2VsZXRvbiIsCgkJCQkkZmxkcywgJHRhYm9wdGFycmF5KTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJCS8vIGNyZWF0ZSBhIHNlcXVlbmNlCgkJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9za2VsZXRvbl9zZXEiKTsKCgkJLy8gY3JlYXRlIGEgcGVybWlzc2lvbgogICAgICAgICR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdVc2UgU2tlbGV0b24nLCAnVXNlIFNrZWxldG9uJyk7CiAgICAgICAgCiAgICAgICAgLy8gY3JlYXRlIGEgcHJlZmVyZW5jZQogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJzaW5nX2xvdWRseSIsIHRydWUpOwoKCQkvLyByZWdpc3RlciBhbiBldmVudCB0aGF0IHRoZSBTa2VsZXRvbiB3aWxsIGlzc3VlLiBPdGhlciBtb2R1bGVzCgkJLy8gb3IgdXNlciB0YWdzIHdpbGwgYmUgYWJsZSB0byBzdWJzY3JpYmUgdG8gdGhpcyBldmVudCwgYW5kIHRyaWdnZXIKCQkvLyBvdGhlciBhY3Rpb25zIHdoZW4gaXQgZ2V0cyBjYWxsZWQuCgkJJHRoaXMtPkNyZWF0ZUV2ZW50KCAnT25Ta2VsZXRvblByZWZlcmVuY2VDaGFuZ2UnICk7CgoJCS8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwoJCSR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNrZWxldG9uIC0gYSBwZWRhbnRpYyAic3RhcnRpbmcgcG9pbnQiIG1vZHVsZQojIFZlcnNpb246IDEuMywgU2pHCiMgTWV0aG9kOiBVbmluc3RhbGwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NrZWxldG9uLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovKgogICAgRm9yIHNlcGFyYXRlZCBtZXRob2RzLCB5b3UnbGwgYWx3YXlzIHdhbnQgdG8gc3RhcnQgd2l0aCB0aGUgZm9sbG93aW5nCiAgICBsaW5lIHdoaWNoIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG1ldGhvZCB3YXMgY2FsbGVkIGZyb20gdGhlIG1vZHVsZQogICAgQVBJLCBhbmQgdGhhdCBldmVyeXRoaW5nJ3Mgc2FmZSB0byBjb250aW51ZToKKi8gCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKCi8qIEFmdGVyIHRoaXMsIHRoZSBjb2RlIGlzIGlkZW50aWNhbCB0byB0aGUgY29kZSB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZQogICAgd3JhcHBlZCBpbiB0aGUgVW5pbnN0YWxsKCkgbWV0aG9kIGluIHRoZSBtb2R1bGUgYm9keS4KKi8KCgkJJGRiID0mICRnQ21zLT5HZXREYigpOwoJCQoJCS8vIHJlbW92ZSB0aGUgZGF0YWJhc2UgdGFibGUKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9za2VsZXRvbiIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJCS8vIHJlbW92ZSB0aGUgc2VxdWVuY2UKCQkkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2tlbGV0b25fc2VxIiApOwoKCQkvLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCgkJJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ1VzZSBTa2VsZXRvbicpOwoJCQoJCS8vIHJlbW92ZSB0aGUgcHJlZmVyZW5jZQoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJzaW5nX2xvdWRseSIpOwoJCQoJCS8vIHJlbW92ZSB0aGUgZXZlbnQKCQkkdGhpcy0+UmVtb3ZlRXZlbnQoICdPblNrZWxldG9uUHJlZmVyZW5jZUNoYW5nZScgKTsKCQkKCQkvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKCQkkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNrZWxldG9uIC0gYSBwZWRhbnRpYyAic3RhcnRpbmcgcG9pbnQiIG1vZHVsZQojIFZlcnNpb246IDEuMywgU2pHCiMgTWV0aG9kOiBVcGdyYWRlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoKICAgIEZvciBzZXBhcmF0ZWQgbWV0aG9kcywgeW91J2xsIGFsd2F5cyB3YW50IHRvIHN0YXJ0IHdpdGggdGhlIGZvbGxvd2luZwogICAgbGluZSB3aGljaCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCBtZXRob2Qgd2FzIGNhbGxlZCBmcm9tIHRoZSBtb2R1bGUKICAgIEFQSSwgYW5kIHRoYXQgZXZlcnl0aGluZydzIHNhZmUgdG8gY29udGludWU6CiovIAppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCgovKiBBZnRlciB0aGlzLCB0aGUgY29kZSBpcyBpZGVudGljYWwgdG8gdGhlIGNvZGUgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUKICAgIHdyYXBwZWQgaW4gdGhlIFVwZ3JhZGUoKSBtZXRob2QgaW4gdGhlIG1vZHVsZSBib2R5LgoqLwoKCQkkY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CgkJc3dpdGNoKCRjdXJyZW50X3ZlcnNpb24pCgkJewoJCQljYXNlICIxLjAiOgoJCQkgICAgIGJyZWFrOwoJCQljYXNlICIxLjEiOgoJCQkgICAgIGJyZWFrOwoJCX0KCQkKCQkvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKCQkkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VwZ3JhZGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/Skeleton.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgTk9URVMgRk9SIFRIRSBBU1BJUklORywgVU5FWFBFUklFTkNFRCwgT1IgRk9SR0VURlVMIE1PRFVMRSBERVZFTE9QRVIKCkFzIG9uZSBvZiB0aGUgbGF0dGVyLCBJIHB1dCB0b2dldGhlciB0aGVzZSBub3RlcyB0byBoZWxwIG1lIHdoZW4gSSBuZWVkCnRvIHN0YXJ0IHdvcmsgb24gYSBuZXcgbW9kdWxlLiBJIHRha2UgdGhpcyBTa2VsZXRvbiBmaWxlLCBkZWxldGUgbW9zdCBvZgp0aGUgY29tbWVudHMsIGFuZCBjdXN0b21pemUgaXQgdG8gZG8gd2hhdGV2ZXIgaXQgaXMgSSBuZWVkIGRvbmUuCgpLZWVwIGluIG1pbmQgdGhhdCB0aGUgbW9kdWxlIGludGVyZmFjZSBoYXMgYSBodWdlIG51bWJlciBvZiBob29rcwphdmFpbGFibGUgdG8gY29udHJvbCBtYW55LCBtYW55IGFzcGVjdHMgb2YgaG93IENNUyBNYWRlIFNpbXBsZSB3b3Jrcy4KVGhpcyBtb2R1bGUgZG9lcyBub3QgZXZlbiBiZWdpbiB0byBzY3JhdGNoIHRoZSBzdXJmYWNlLCBleGNlcHQsCnBlcmhhcHMsIGFzIGFuIGV4YW1wbGUgb2YgYSAicGx1Zy1pbiIgdHlwZSBtb2R1bGUuIFRoZXJlIGFyZQptYW55IGZ1bmN0aW9uYWwgaG9va3MgZm9yIG1vZGlmeWluZyB1c2VycywgZ3JvdXBzLCBjb250ZW50LCB0ZW1wbGF0ZXMsCmdsb2JhbCBjb250ZW50IGJsb2Nrcywgb24gaW5zZXJ0aW9uLCBkZWxldGlvbiwgY2hhbmdlLCBhbmQgbXVjaCwgbXVjaCBtb3JlLgpGb3IgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiB0aGVzZSBmdW5jdGlvbnMsIGxvb2sgYXQgdGhlIGJhc2UgY2xhc3M6CgpDTVNfUk9PVC9saWIvY2xhc3Nlcy9jbGFzcy5tb2R1bGUuaW5jLnBocAoKSXQncyBnb29kIHJlYWRpbicsIGFuZCBpdCB0ZWxscyB5b3UgZXZlcnl0aGluZyB5b3UgbmVlZCB0byBrbm93LiBJCmxlYXJuIHNvbWV0aGluZyBuZXcgZXZlcnkgdGltZSBJIGxvb2sgYXQgaXQuCgpGdXJ0aGVybW9yZSwgd2hlbiB0aGlzIFNrZWxldG9uIG1vZHVsZSB3YXMgc3RhcnRlZCwgdGhlcmUgd2FzIGEgcGF1Y2l0eQpvZiBkb2N1bWVudGF0aW9uIG9uIHRoZSBDTVMgTWFkZSBTaW1wbGUgc2l0ZS4gVGhpcyBpcyBubyBsb25nZXIgdGhlCmNhc2UuIEF1dG9tYXRpYyBBUEkgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYXQKaHR0cDovL2Ntc21hZGVzaW1wbGUub3JnL2FwaWRvYy9DTVMvQ01TTW9kdWxlLmh0bWwKCkFsc28sIGEgY29udGludW91c2x5IGltcHJvdmluZyBkb2N1bWVudGF0aW9uIHByb2plY3QgY2FuIGJlIGZvdW5kCmF0IGh0dHA6Ly93aWtpLmNtc21hZGVzaW1wbGUub3JnL2luZGV4LnBocC9DcmVhdGluZ19Nb2R1bGVzCgoxLiBEaXJlY3RvcnkgU3RydWN0dXJlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClVuZGVybmVhdGggdGhpcyBjdXJyZW50IGRpcmVjdG9yeSwgdGhlcmUgYXJlICJsYW5nIiBhbmQgInRlbXBsYXRlcyIKZGlyZWN0b3JpZXMuIFRoZSBtYWdpYyBvZiB0aGUgQ01TIG1vZHVsZSBpbnRlcmZhY2Ugc3lzdGVtIGlzIHN1Y2gKdGhhdCBmaWxlcyB3aXRoaW4gdGhvc2UgZGlyZWN0b3JpZXMgYXJlIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIHRvCnlvdXIgbW9kdWxlLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCBjb21lcyB0byBsb2NhbGl6YXRpb24gYW5kCnNtYXJ0eSB0ZW1wbGF0ZXMuCgoyLiBMb2NhbGl6YXRpb24KLS0tLS0tLS0tLS0tLS0tCgpJbiB0aGUgImxhbmciIGRpcmVjdG9yeSwgeW91IGNhbiBjcmVhdGUgeW91ciBsYW5ndWFnZSBmaWxlcy4KTm90ZSB0aGF0IHRoZSBuZXdlc3Qgc3RydWN0dXJlIGludm9sdmVzIGEgZGlyZWN0b3J5IHBlciBsYW5ndWFnZSwKd2l0aCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpbiB0aGUgdG9wIGxldmVsLCBzbywgZm9yIGV4YW1wbGUsCmlmIHlvdSdyZSB3cml0aW5nIHRoZSBtb2R1bGUgaW4gVVMgRW5nbGlzaCwgeW91ciBVUyBFbmdsaXNoCmxhbmd1YWdlIGZpbGVzIHdvdWxkIGJlIGluIGxhbmcvZW5fVVMucGhwLCB3aGlsZSB5b3VyClN3ZWRpc2ggbGFuZ3VhZ2UgZmlsZXMgd291bGQgYmUgaW4gbGFuZy9leHQvc3ZfU0UucGhwLgoKUmVhZCBtb3JlIGFib3V0IGxvY2FsaXphdGlvbiBhdApodHRwOi8vd2lraS5jbXNtYWRlc2ltcGxlLm9yZy9pbmRleC5waHAvQ3JlYXRpbmdfTW9kdWxlcyNFbmFibGVfdHJhbnNsYXRpb25zX2Zyb21fdGhlX1RyYW5zbGF0aW9uX0NlbnRlcgoKRm9yIGVhY2ggbG9jYWxpemVkIHdvcmQsIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGF0IGZpbGUgb2YgdGhlIGZvcm06CgokbGFuZ1snd29yZCddID0gJ0xvY2FsaXplZCBWZXJzaW9uIG9mIFdvcmQnOwoKTm93LCB3aXRoaW5nIHlvdXIgbW9kdWxlLCBhbnkgdGltZSB5b3Ugd2FudCBhIGxvY2FsaXplZCB2ZXJzaW9uIG9mIHRoZQp3b3JkLCB5b3Ugc2ltcGx5IHJlZmVyIHRvOgoKJHRoaXMtPkxhbmcoJ3dvcmQnKQoKU3Vic3RpdHV0aW9uIGlzIGFsc28gcG9zc2libGUgZm9yIHlvdXIgbG9jYWxpemVkIHBocmFzZS4gU2F5IHlvdSB3YW50IHRvCmluY2x1ZGUgYSBudW1iZXIgaW4gYSBzdHJpbmcuIFlvdSBjb3VsZCB0aGVuIHVzZSBzeW50YXggbGlrZToKCiRsYW5nWydudW1iZXJfcGhyYXNlJ10gPSAnTG9jYWxpemVkIFZlcnNpb24gaGFzICVzIG51bWJlcnMuJzsKCmFuZCBpbiB5b3VyIGNvZGUsIHJlZmVyIHRvIAoKJHRoaXMtPkxhbmcoJ251bWJlcl9waHJhc2UnLCAkbnVtYmVyKQoKd2hlcmUgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSAkbnVtYmVyIHdpbGwgcmVwbGFjZSB0aGUgJXMgaW4KdGhlIGxvY2FsaXplZCBzdHJpbmcuCgoKMy4gVGVtcGxhdGVzCi0tLS0tLS0tLS0tLQoKU21hcnR5IGlzIGJ1aWx0LWluIHRvIHRoZSBtb2R1bGUgQVBJLiBUZW1wbGF0ZXMgYXJlIGFzc3VtZWQgdG8gYmUgaW4gdGhlCiJ0ZW1wbGF0ZXMiIGRpcmVjdG9yeSBvZiB0aGUgbW9kdWxlLiBTZWUgdGhlIERpc3BsYXlBZG1pblByZWZzIG1ldGhvZApiZWxvdyAob3IgdGhlIGZpbGUgbWV0aG9kLmFkbWluX3ByZWZzLnBocCkuCgo0LiBBZG1pbiBJY29ucwotLS0tLS0tLS0tLS0tLQoKSWYgeW91ciBtb2R1bGUgaGFzIGFuIEFkbWluIHBhbmVsLCBhbmQgeW91J2QgbGlrZSB0byBnaXZlIGl0IGEgY3VzdG9tCmljb24sIHNpbXBseSBjcmVhdGUgYSBkaXJlY3RvcnkgY2FsbGVkICJpbWFnZXMiIGFuZCBwbGFjZSB5b3VyIGljb24gaW4KdGhhdCBkaXJlY3Rvcnkgd2l0aCB0aGUgbmFtZSAiaWNvbi5naWYiIFRoaXMgaXMgb25seSBndWFyYW50ZWVkIHRvIHdvcmsKd2l0aCB0aGUgZGVmYXVsdCBhZG1pbiB0aGVtZS4KCjUuIFNlcGFyYXRpb24gb2YgRmlsZXMKLS0tLS0tLS0tLS0tLS0KCldpdGggdGhlIHJlbGVhc2Ugb2YgQ01TIE1hZGUgU2ltcGxlIDAuMTIgb3IgdGhlcmVhYm91dHMsIGl0IGJlY2FtZQpwb3NzaWJsZSB0byBzcGxpdCBhIGxvdCBvZiB0aGUgbW9kdWxlIGZ1bmN0aW9uYWxpdHkgaW50byBzZXBhcmF0ZSBmaWxlcywgcmF0aGVyCnRoYW4gcmVxdWlyaW5nIGFsbCBvZiB0aGUgbW9kdWxlIHRvIGJlIGltcGxlbWVudGVkIGluIG9uZSBiaWcgbW9ub2xpdGhpYwpjaHVuay4gVGhpcyByZWR1Y2VzIHRoZSBvdmVyYWxsIG1lbW9yeSBmb290cHJpbnQgb2YgdGhlIG1vZHVsZSwgd2hpY2gKYmVjb21lcyBpbXBvcnRhbnQgZm9yIGh1Z2UgbW9kdWxlcy4KClRoaXMgaXMgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGJlbG93IGluIHRoZSBTZXBhcmFibGUgTWV0aG9kcyBjb21tZW50CmFzIHdlbGwgYXMgdGhlIGNvbW1lbnQgZm9yIHRoZSBEb0FjdGlvbi4KCk5vdGUgdGhhdCB5b3UgZG8gbm90IGhhdmUgdG8gc3BsaXQgeW91ciBtb2R1bGUgaW50byBtdWx0aXBsZSBmaWxlcy4gSXQncwp5b3VyIGNob2ljZSEgSWYgeW91ciBtb2R1bGUgaXMgc21hbGwsIGl0J3MgcHJvYmFibHkgbm90IG5lY2Vzc2FyeS4gVGhlbiBhZ2FpbiwKZ29vZCBjb2RpbmcgKGZvciBhIG5vbmNvbXBpbGVkIGxhbmd1YWdlLCBhbnl3YXkpIHN1Z2dlc3RzIHRoYXQgeW91IGRvbid0CmluY2x1ZGUgYSBidW5jaCBvZiBleHRyYW5lb3VzIGNvZGUgZWFjaCB0aW1lIHlvdXIgbW9kdWxlIGxvYWRzLiBJbiB0aGUKZW5kLCBpdCdzIHlvdXIgY2FsbC4KCjYuIEV2ZW50cyAvIEV2ZW50IEhvb2tzCi0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGFuIGV4Y2l0aW5nIG5ldyBmZWF0dXJlIHRoYXQncyBiZWVuIGFkZGVkIHRvIHRoZSBDTVMgTWFkZSBTaW1wbGUKY29yZS4gSXQgYWxsb3dzIG1vZHVsZXMgdG8gY3JlYXQgZXZlbnRzLCBpc3N1ZSBldmVudHMsIGFuZCBzdWJzY3JpYmUgdG8KZXZlbnRzLiBXaGF0IHRoaXMgZG9lcyBpcyBlbmFibGUgYW4gdW5wcmVjZWRlbnRlZCBkZWdyZWUgb2YgZmxleGliaWxpdHkKYW5kIGludGVyYWN0aW9uIGJldHdlZW4gbW9kdWxlcy4gWW91J2xsIHNlZSBlbGVtZW50cyBvZiB0aGlzIHNwcmlua2xlZAp0aHJvdWdob3V0IHRoaXMgZmlsZS4KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiovCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogU2tlbGV0b24gLSBhIHBlZGFudGljICJzdGFydGluZyBwb2ludCIgbW9kdWxlCiMgVmVyc2lvbjogMS4zLCBTakcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvc2tlbGV0b24vCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8qIFlvdXIgaW5pdGlhbCBDbGFzcyBkZWNsYXJhdGlvbi4gVGhpcyBmaWxlJ3MgbmFtZSBtdXN0CiAgIGJlICJbY2xhc3MncyBuYW1lXS5tb2R1bGUucGhwIiwgb3IsIGluIHRoaXMgY2FzZSwKICAgU2tlbGV0b24ubW9kdWxlLnBocAoqLyAKY2xhc3MgU2tlbGV0b24gZXh0ZW5kcyBDTVNNb2R1bGUKewoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBHZXROYW1lKCkKCSAgIG11c3QgcmV0dXJuIHRoZSBleGFjdCBjbGFzcyBuYW1lIG9mIHRoZSBtb2R1bGUuCgkgICBJZiB0aGVzZSBkbyBub3QgbWF0Y2gsIGJhZCB0aGluZ3MgaGFwcGVuLgoJICAgCgkgICBUaGlzIGlzIHRoZSBuYW1lIHRoYXQncyBzaG93biBpbiB0aGUgbWFpbiBNb2R1bGVzCgkgICBwYWdlIGluIHRoZSBBZG1pbi4KCSAgIAoJICAgSWYgeW91IHdhbnQgdG8gYmUgc2FmZSwgeW91IGNhbiBqdXN0IHJlcGxhY2UgdGhlIGJvZHkKCSAgIG9mIHRoaXMgZnVuY3Rpb24gd2l0aDoKCSAgIHJldHVybiBnZXRfY2xhc3MoJHRoaXMpOyAKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEdldE5hbWUoKQoJewoJCXJldHVybiAnU2tlbGV0b24nOwoJfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBHZXRGcmllbmRseU5hbWUoKQoJICAgVGhpcyBjYW4gcmV0dXJuIGFueSBzdHJpbmcsIHByZWZlcmFibHkgYSBsb2NhbGl6ZWQgbmFtZQoJICAgb2YgdGhlIG1vZHVsZS4gVGhpcyBpcyB0aGUgbmFtZSB0aGF0J3Mgc2hvd24gaW4gdGhlCgkgICBBZG1pbiBNZW51cyBhbmQgc2VjdGlvbiBwYWdlcyAoaWYgdGhlIG1vZHVsZSBoYXMgYW4gYWRtaW4KCSAgIGNvbXBvbmVudCkuCgkgICAKCSAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7Cgl9CgoJCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgR2V0VmVyc2lvbigpCgkgICBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZywgcHJlZmVyYWJseSBhIG51bWJlciBvcgoJICAgc29tZXRoaW5nIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGRlc2lnbmF0aW5nIGEgdmVyc2lvbi4KCSAgIFRoZSBDTVMgd2lsbCB1c2UgdGhpcyB0byBpZGVudGlmeSB3aGV0aGVyIG9yIG5vdAoJICAgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUgaXMgY3VycmVudCwgYW5kCgkgICB0aGUgbW9kdWxlIHdpbGwgdXNlIGl0IHRvIGZpZ3VyZSBvdXQgaG93IHRvIHVwZ3JhZGUKCSAgIGl0c2VsZiBpZiByZXF1ZXN0ZWQuCSAgIAoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gR2V0VmVyc2lvbigpCgl7CgkJcmV0dXJuICcxLjMnOwoJfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBHZXRIZWxwKCkKCSAgIFRoaXMgcmV0dXJucyBIVE1MIGluZm9ybWF0aW9uIG9uIHRoZSBtb2R1bGUuCgkgICBUeXBpY2FsbHksIHlvdSdsbCB3YW50IHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gb24gaG93IHRvCgkgICB1c2UgdGhlIG1vZHVsZS4KCSAgIAoJICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEdldEhlbHAoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwoJfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBHZXRBdXRob3IoKQoJICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBNb2R1bGUKCSAgIEFkbWluIGlmIHlvdSBjbGljayBvbiB0aGUgIkFib3V0IiBsaW5rLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gR2V0QXV0aG9yKCkKCXsKCQlyZXR1cm4gJ1NqRyc7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEdldEF1dGhvckVtYWlsKCkKCSAgIFRoaXMgcmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHByZXNlbnRlZCBpbiB0aGUgTW9kdWxlCgkgICBBZG1pbiBpZiB5b3UgY2xpY2sgb24gdGhlICJBYm91dCIgbGluay4gSXQgaGVscHMgdXNlcnMKCSAgIG9mIHlvdXIgbW9kdWxlIGdldCBpbiB0b3VjaCB3aXRoIHlvdSB0byBzZW5kIGJ1ZyByZXBvcnRzLAoJICAgcXVlc3Rpb25zLCBjYXNlcyBvZiBiZWVyLCBhbmQvb3IgbGFyZ2Ugc3VtcyBvZiBtb25leS4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKCXsKCQlyZXR1cm4gJ3NqZ0BjbXNtb2R1bGVzLmNvbSc7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEdldENoYW5nZUxvZygpCgkgICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIG1vZHVsZQoJICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSBBYm91dCBsaW5rLiBJdCBoZWxwcyB1c2VycwoJICAgZmlndXJlIG91dCB3aGF0J3MgY2hhbmdlZCBiZXR3ZWVuIHJlbGVhc2VzLgoJICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEdldENoYW5nZUxvZygpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsKCX0KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgSXNQbHVnaW5Nb2R1bGUoKQoJICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UsIGRlcGVuZGluZyB1cG9uCgkgICB3aGV0aGVyIHVzZXJzIGNhbiBpbmNsdWRlIHRoZSBtb2R1bGUgaW4gYSBwYWdlIG9yCgkgICB0ZW1wbGF0ZSB1c2luZyBhIHNtYXJ0eSB0YWcgb2YgdGhlIGZvcm0KCSAgIHtjbXNfbW9kdWxlIG1vZHVsZT0nU2tlbGV0b24nIHBhcmFtMT12YWwgcGFyYW0yPXZhbC4uLn0KCSAgIAoJICAgSWYgeW91ciBtb2R1bGUgZG9lcyBub3QgZ2V0IGluY2x1ZGVkIGluIHBhZ2VzIG9yCgkgICB0ZW1wbGF0ZXMsIHJldHVybiAiZmFsc2UiIGhlcmUuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCgl7CgkJcmV0dXJuIHRydWU7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEhhc0FkbWluKCkKCSAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUsIGRlcGVuZGluZyBvbgoJICAgd2hldGhlciB5b3VyIG1vZHVsZSBhZGRzIGFueXRoaW5nIHRvIHRoZSBBZG1pbiBhcmVhIG9mCgkgICB0aGUgc2l0ZS4gRm9yIHRoZSByZXN0IG9mIHRoZXNlIGNvbW1lbnRzLCBJJ2xsIGJlIGNhbGxpbmcKCSAgIHRoZSBhZG1pbiBwYXJ0IG9mIHlvdXIgbW9kdWxlIHRoZSAiQWRtaW4gUGFuZWwiIGZvcgoJICAgd2FudCBvZiBhIGJldHRlciB0ZXJtLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gSGFzQWRtaW4oKQoJewoJCXJldHVybiB0cnVlOwoJfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBHZXRBZG1pblNlY3Rpb24oKQoJICAgSWYgeW91ciBtb2R1bGUgaGFzIGFuIEFkbWluIFBhbmVsLCB5b3UgY2FuIHNwZWNpZnkKCSAgIHdoaWNoIEFkbWluIFNlY3Rpb24gKG9yIHRvcC1sZXZlbCBBZG1pbiBNZW51KSBpdCBzaG93cwoJICAgdXAgaW4uIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgdG8gc3BlY2lmeSB0aGF0CgkgICBzZWN0aW9uLiBWYWxpZCByZXR1cm4gdmFsdWVzIGFyZToKCgkgICBtYWluICAgICAgICAtIHRoZSBNYWluIG1lbnUgdGFiLgoJICAgY29udGVudCAgICAgLSB0aGUgQ29udGVudCBtZW51CgkgICBsYXlvdXQgICAgICAtIHRoZSBMYXlvdXQgbWVudQoJICAgdXNlcnNncm91cHMgLSB0aGUgVXNlcnMgYW5kIEdyb3VwcyBtZW51CgkgICBleHRlbnNpb25zICAtIHRoZSBFeHRlbnNpb25zIG1lbnUgKHRoaXMgaXMgdGhlIGRlZmF1bHQpCgkgICBzaXRlYWRtaW4gICAtIHRoZSBTaXRlIEFkbWluIG1lbnUKCSAgIHZpZXdzaXRlICAgIC0gdGhlIFZpZXcgU2l0ZSBtZW51IHRhYgoJICAgbG9nb3V0ICAgICAgLSB0aGUgTG9nb3V0IG1lbnUgdGFiCgkgICAKCSAgIE5vdGUgdGhhdCBpZiB5b3UgcGxhY2UgeW91ciBtb2R1bGUgaW4gdGhlIG1haW4sCgkgICB2aWV3c2l0ZSwgb3IgbG9nb3V0IHNlY3Rpb25zLCBpdCB3aWxsIHNob3cgdXAgaW4gdGhlCgkgICBtZW51cywgYnV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gYW55IHRvcC1sZXZlbAoJICAgc2VjdGlvbiBwYWdlcy4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCgl7CgkJcmV0dXJuICdleHRlbnNpb25zJzsKCX0KCgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEdldEFkbWluRGVzY3JpcHRpb24oKQoJICAgSWYgeW91ciBtb2R1bGUgZG9lcyBoYXZlIGFuIEFkbWluIFBhbmVsLCB5b3UKCSAgIGNhbiBoYXZlIGl0IHJldHVybiBhIGRlc2NyaXB0aW9uIHN0cmluZyB0aGF0IGdldHMgc2hvd24KCSAgIGluIHRoZSBBZG1pbiBTZWN0aW9uIHBhZ2UgdGhhdCBjb250YWlucyB0aGUgbW9kdWxlLgoJICAgCgkgICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwoJfQoKCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgVmlzaWJsZVRvQWRtaW5Vc2VyKCkKCSAgIElmIHlvdXIgbW9kdWxlIGRvZXMgaGF2ZSBhbiBBZG1pbiBQYW5lbCwgeW91CgkgICBjYW4gY29udHJvbCB3aGV0aGVyIG9yIG5vdCBpdCdzIGRpc3BsYXllZCBieSB0aGUgYm9vbGVhbgoJICAgdGhhdCBpcyByZXR1cm5lZCBieSB0aGlzIG1ldGhvZC4gVGhpcyBpcyBwcmltYXJpbHkgdXNlZAoJICAgdG8gaGlkZSBtb2R1bGVzIGZyb20gYWRtaW5zIHdobyBsYWNrIHBlcm1pc3Npb24gdG8gdXNlCgkgICB0aGVtLgoJICAgSW4gdGhpcyBjYXNlLCB0aGUgbW9kdWxlIHdpbGwgb25seSBiZSB2aXNpYmxlIHRvIGFkbWlucwoJICAgd2hvIGhhdmUgIlVzZSBTa2VsZXRvbiIgcGVybWlzc2lvbnMuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQoJewogICAgICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgU2tlbGV0b24nKTsKCX0KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgR2V0RGVwZW5kZW5jaWVzKCkKCSAgIFlvdXIgbW9kdWxlIG1heSBuZWVkIGFub3RoZXIgbW9kdWxlIHRvIGFscmVhZHkgYmUgaW5zdGFsbGVkCgkgICBiZWZvcmUgeW91IGNhbiBpbnN0YWxsIGl0LgoJICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZAoJICAgbWluaW11bSB2ZXJzaW9uIG51bWJlcnMgdGhhdCB0aGlzIG1vZHVsZSByZXF1aXJlcy4KCSAgIAoJICAgSXQgc2hvdWxkIHJldHVybiBhbiBoYXNoLCBlZy4KCSAgIHJldHVybiBhcnJheSgnc29tZW1vZHVsZSc9PicxLjAnLCAnb3RoZXJtb2R1bGUnPT4nMS4xJyk7CgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBNaW5pbXVtQ01TVmVyc2lvbigpCgkgICBZb3VyIG1vZHVsZSBtYXkgcmVxdWlyZSBmdW5jdGlvbnMgb3Igb2JqZWN0cyBmcm9tCgkgICBhIHNwZWNpZmljIHZlcnNpb24gb2YgQ01TIE1hZGUgU2ltcGxlLgoJICAgRXZlciBzaW5jZSB2ZXJzaW9uIDAuMTEsIHlvdSBjYW4gc3BlY2lmeSB3aGljaCBtaW5pbXVtCgkgICBDTVMgTVMgdmVyc2lvbiBpcyByZXF1aXJlZCBmb3IgeW91ciBtb2R1bGUsIHdoaWNoIHdpbGwKCSAgIHByZXZlbnQgaXQgZnJvbSBiZWluZyBpbnN0YWxsZWQgYnkgYSB2ZXJzaW9uIG9mIENNUyB0aGF0CgkgICBjYW4ndCBydW4gaXQuCgkgICAKCSAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZQoJICAgbWluaW11bSB2ZXJzaW9uIHRoYXQgdGhpcyBtb2R1bGUgcmVxdWlyZXMuCgkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQoJewoJCXJldHVybiAiMC4xMyI7Cgl9CgkKCQoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFNldFBhcmFtZXRlcnMoKQoJICAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBjcmVhdGUgbWFwcGluZ3MgZm9yCgkgICB5b3VyIG1vZHVsZSB3aGVuIHVzaW5nICJQcmV0dHkgVXJscyIuCgkgICAKCSAgIFR5cGljYWxseSwgbW9kdWxlcyBjcmVhdGUgaW50ZXJuYWwgbGlua3MgdGhhdCBoYXZlCgkgICBiaWcgdWdseSBzdHJpbmdzIGFsb25nIHRoZSBsaW5lcyBvZjoKCSAgIGluZGV4LnBocD9tYWN0PU1vZE5hbWUsY250bnQwMSxhY3Rpb25OYW1lLDAmY250bnQwMXBhcmFtMT0xJmNudG50MDFwYXJhbTI9MiZjbnRudDAxcmV0dXJuaWQ9MwoJICAgCgkgICBZb3UgbWlnaHQgcHJlZmVyIHRoZXNlIHRvIGxvb2sgbGlrZToKCSAgIC9Nb2R1bGVGdW5jdGlvbi8yLzMKCSAgIAoJICAgVG8gZG8gdGhpcywgeW91IGhhdmUgdG8gcmVnaXN0ZXIgcm91dGVzIGFuZCBtYXAKCSAgIHlvdXIgcGFyYW1ldGVycyBpbiBhIHdheSB0aGF0IHRoZSBBUEkgd2lsbCBiZSBhYmxlCgkgICB0byB1bmRlcnN0YW5kLgoKCSAgIEFsc28gbm90ZSB0aGF0IGFueSBjYWxscyB0byBDcmVhdGVMaW5rIHdpbGwgbmVlZCB0bwoJICAgYmUgdXBkYXRlZCB0byBwYXNzIHRoZSBwcmV0dHkgdXJsIHBhcmFtZXRlci4KCSAgIAoJICAgU2luY2UgdGhlIFNrZWxldG9uIGRvZXNuJ3QgcmVhbGx5IGNyZWF0ZSBhbnkgbGlua3MsCgkgICB0aGUgc2VjdGlvbiBiZWxvdyBpcyBjb21tZW50ZWQgb3V0LCBidXQgeW91IGNhbgoJICAgdXNlIGl0IHRvIGZpZ3VyZSBvdXQgcHJldHR5IHVybHMuCgkgICAKCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkKCXsKCS8qCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignc2tlbGV0b24nLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfc2tlbGV0b24nKSk7CgkJLy8gRm9yIHZpZXdpbmcgYSBwaWN0dXJlCgkJJHRoaXMtPlJlZ2lzdGVyUm91dGUoJy9za2VsZXRvblwvKD9QPG51bWVyaWNfcGFyYW1fbmFtZT5bMC05XSspXC8oP1A8c3RyaW5nX3BhcmFtX25hbWU+W2EtekEtWl0rKVwvKD9QPHJldHVybmlkPlswLTldKykkLycsIAphcnJheSgnYWN0aW9uJz0+J2RlZmF1bHQnKSk7CgoJCS8vIG5vdywgYW55IHVybCB0aGF0IGxvb2tzIGxpa2U6CgkJLy8gICAgL3NrZWxldG9uLzMvZm9vLzUKCQkvLyB3aWxsIGNhbGwgdGhlIGRlZmF1bHQgYWN0aW9uLCB3aXRoOgoJCS8vICAgICBwYXJhbXNbJ251bWVyaWNfcGFyYW1fbmFtZSddIHNldCB0byAzCgkJLy8gICAgIHBhcmFtc1snc3RyaW5nX3BhcmFtX25hbWUnXSBzZXQgdG8gImZvbyIKCQkvLyAgICBhbmQgcmV0dXJuaWQgc2V0IHRvIDUKCQkKCSovCgl9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudERlc2NyaXB0aW9uKCkKICAgSWYgeW91ciBtb2R1bGUgY2FuIGNyZWF0ZSBldmVudHMsIHlvdSB3aWxsIG5lZWQKICAgdG8gcHJvdmlkZSB0aGUgQVBJIHdpdGggZG9jdW1lbnRhdGlvbiBvZiB3aGF0CiAgIHRoYXQgZXZlbnQgZG9lcy4gVGhpcyBtZXRob2Qgd3JhcHMgdXAgYSBzaW1wbGUKICAgcmV0dXJuIG9mIHRoZSBsb2NhbGl6ZWQgZGVzY3JpcHRpb24uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RXZlbnREZXNjcmlwdGlvbiAoICRldmVudG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZXZlbnRfaW5mb18nLiRldmVudG5hbWUgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudEhlbHAoKQogICBJZiB5b3VyIG1vZHVsZSBjYW4gY3JlYXRlIGV2ZW50cywgeW91IHdpbGwgbmVlZAogICB0byBwcm92aWRlIHRoZSBBUEkgd2l0aCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0bwogICB1c2UgdGhlIGV2ZW50LiBUaGlzIG1ldGhvZCB3cmFwcyB1cCBhIHNpbXBsZQogICByZXR1cm4gb2YgdGhlIGxvY2FsaXplZCBkZXNjcmlwdGlvbi4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRFdmVudEhlbHAgKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2hlbHBfJy4kZXZlbnRuYW1lICk7CiAgfQoKCQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBTZXBhcmFibGUgTWV0aG9kcwoJICAgVG8gbWluaW1pemUgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgbW9kdWxlcywgYW5kIG1ha2UKCSAgIENNUyBNYWRlIFNpbXBsZSBydW4gbW9yZSBlZmZpY2llbnRseSwgdGhlcmUgYXJlIGEgbnVtYmVyCgkgICBvZiBtb2R1bGUgbWV0aG9kcyB0aGF0IGNhbiBiZSBzcGxpdCBvdXQgaW50byBzZXBhcmF0ZSBmaWxlcy4KCSAgIAoJICAgQXMgb2YgMC4xMywgdGhlc2UgbWV0aG9kcyBhcmU6CgkgICAKCSAgIEluc3RhbGwKCSAgIFVwZ3JhZGUKCSAgIFVuaW5zdGFsbAoJICAgCgkgICBJZiB5b3UgYXJlIHdyaXRpbmcgYSBzbWFsbCBtb2R1bGUsIG9uZSB0aGF0IGRvZXNuJ3QgZG8gbXVjaAoJICAgaW4gdGhlc2UgbWV0aG9kcywgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBzcGxpdCB0aGVtIG91dCwKCSAgIGJ1dCBjYW4gaW5jbHVkZSB0aGVtIGRpcmVjdGx5IGluIHRoZSBtYWluIG1vZHVsZSBmaWxlLgoKCSAgIEluIHRoaXMgZmlsZSwgdGhlIG1ldGhvZHMgYXJlIGluY2x1ZGVkLCBidXQgY29tbWVudGVkIG91dC4KCSAgIAoJICAgIlNvIHdoZXJlL2hvdyBhcmUgdGhleSBpbXBsZW1lbnRlZD8iIHlvdSBtaWdodCBhc2suCgkJRm9yIGVhY2ggbWV0aG9kLCB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcgZmlsZSB0aGF0IGdldHMKCQljYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgbW9kdWxlIEFQSSBpZiBpdCBleGlzdHMgYW5kIHRoYXQKCQltZXRob2QgaXMgY2FsbGVkOgoJCQoJCU1ldGhvZCAgICAgICAgICAgICAgICBGaWxlCgkJSW5zdGFsbCAgICAgICAgICAgICAgICAgIG1ldGhvZC5pbnN0YWxsLnBocAoJCVVuaW5zdGFsbCAgICAgICAgICAgICAgbWV0aG9kLnVuaW5zdGFsbC5waHAKCQlVcGdyYWRlICAgICAgICAgICAgICAgbWV0aG9kLnVwZ3JhZGUucGhwCgkJCgkJVGhlc2UgZmlsZXMgbGl2ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG1vZHVsZSBpdHNlbGYuCgkJCgkJQXMgeW91J2xsIHNlZSBiZWxvdywgdGhlcmUgaXMgYWxzbyBzb21lIHNwZWNpYWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlCgkJRG9BY3Rpb24gbWV0aG9kIHdoaWNoIGlzIHNpbWlsYXIuCgkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBJbnN0YWxsKCkKCSAgIFdoZW4geW91ciBtb2R1bGUgaXMgaW5zdGFsbGVkLCB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZQoJICAgc2V0dXAuIFR5cGljYWwgdGhpbmdzIHRoYXQgaGFwcGVuIGhlcmUgYXJlIHRoZSBjcmVhdGlvbgoJICAgYW5kIHByZXBvcHVsYXRpb24gb2YgZGF0YWJhc2UgdGFibGVzLCBkYXRhYmFzZSBzZXF1ZW5jZXMsCgkgICBwZXJtaXNzaW9ucywgcHJlZmVyZW5jZXMsIGV0Yy4KCSAgIAoJICAgVGhpcyBleGFtcGxlIGNyZWF0ZXMgYSBTa2VsZXRvbiBkYXRhYmFzZSB0YWJsZSBhbmQKCSAgIHNlcXVlbmNlLCBpdCBjcmVhdGVzIHRoZSAiVXNlIFNrZWxldG9uIiBwZXJtaXNzaW9uLAoJICAgYW5kIHNldHMgdGhlICJTaW5nIExvdWRseSIgcHJlZmVyZW5jZS4KCSAgIAoJICAgVGhlIGRhdGFiYXNlIGlzIG5vdCBhY3R1YWxseSB1c2VkIGluIHRoaXMgZXhhbXBsZTsKCSAgIGNoZWNrIGFueSBvbmUgb2YgdGhlIG90aGVyIG1vZHVsZXMgaWYgeW91IHdhbnQgdG8gc2VlCgkgICBtZXRob2QgY29kZSB0aGF0IHVzZXMgdGhlIGRhdGFiYXNlLgoJICAgCgkgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIGNyZWF0aW9uIG9mIGRhdGFiYXNlIHRhYmxlcywKCSAgIGNoZWNrIG91dCB0aGUgQURPREIgRGF0YSBEaWN0aW9uYXJ5IHBhZ2UgYXQKCSAgIGh0dHA6Ly9waHBsZW5zLmNvbS9sZW5zL2Fkb2RiL2RvY3MtZGF0YWRpY3QuaHRtCgkgICAKCSAgIFRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiBhIHN0cmluZyBpbiBjYXNlIG9mIGFueSBlcnJvciwKCSAgIGFuZCBDTVMgd2lsbCBub3QgY29uc2lkZXIgdGhlIG1vZHVsZSBpbnN0YWxsZWQuCgkgICBTdWNjZXNzZnVsIGluc3RhbGxzIHNob3VsZCByZXR1cm4gRkFMU0Ugb3Igbm90aGluZyBhdCBhbGwuCgkgICAKCSAgIEFzIGRvY3VtZW50ZWQgYWJvdmUsIHRoaXMgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlCgkgICBpdCBpcyBpbXBsZW1lbnRlZCBpbiBtZXRob2QuaW5zdGFsbC5waHAKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBJbnN0YWxsKCkKCXsKCQkkZGIgPSYgJGdDbXMtPkdldERiKCk7CgkJCgkJLy8gbXlzcWwtc3BlY2lmaWMsIGJ1dCBpZ25vcmVkIGJ5IG90aGVyIGRhdGFiYXNlCgkJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJCQogICAgICAgIC8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgogICAgICAgICRmbGRzID0gIgoJCQlza2VsZXRvbl9pZCBJIEtFWSwKCQkJZGVzY3JpcHRpb24gQyg4MCkKCQkJIjsKCgkJLy8gY3JlYXRlIGl0LiBUaGlzIHNob3VsZCBkbyBlcnJvciBjaGVja2luZywgYnV0IEknbSBhIGxhenkgc29kLgoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9za2VsZXRvbiIsCgkJCQkkZmxkcywgJHRhYm9wdGFycmF5KTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJCS8vIGNyZWF0ZSBhIHNlcXVlbmNlCgkJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9za2VsZXRvbl9zZXEiKTsKCgkJLy8gY3JlYXRlIGEgcGVybWlzc2lvbgogICAgICAgICR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdVc2UgU2tlbGV0b24nLCAnVXNlIFNrZWxldG9uJyk7CiAgICAgICAgCiAgICAgICAgLy8gY3JlYXRlIGEgcHJlZmVyZW5jZQogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJzaW5nX2xvdWRseSIsIHRydWUpOwoKCQkvLyByZWdpc3RlciBhbiBldmVudCB0aGF0IHRoZSBTa2VsZXRvbiB3aWxsIGlzc3VlLiBPdGhlciBtb2R1bGVzCgkJLy8gb3IgdXNlciB0YWdzIHdpbGwgYmUgYWJsZSB0byBzdWJzY3JpYmUgdG8gdGhpcyBldmVudCwgYW5kIHRyaWdnZXIKCQkvLyBvdGhlciBhY3Rpb25zIHdoZW4gaXQgZ2V0cyBjYWxsZWQuCgkJJHRoaXMtPkNyZWF0ZUV2ZW50KCAnT25Ta2VsZXRvblByZWZlcmVuY2VDaGFuZ2UnICk7CgoJCS8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwoJCSR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cgl9CiovCgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEluc3RhbGxQb3N0TWVzc2FnZSgpCgkgICBBZnRlciBpbnN0YWxsYXRpb24sIHRoZXJlIG1heSBiZSB0aGluZ3MgeW91IHdhbnQgdG8KCSAgIGNvbW11bmljYXRlIHRvIHlvdXIgYWRtaW4uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCgkgICBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQuCgkgICAKCSAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKCX0KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQoJICAgQWZ0ZXIgcmVtb3ZpbmcgYSBtb2R1bGUsIHRoZXJlIG1heSBiZSB0aGluZ3MgeW91IHdhbnQgdG8KCSAgIGNvbW11bmljYXRlIHRvIHlvdXIgYWRtaW4uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCgkgICBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQuCgkgICAKCSAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7Cgl9CgoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBVcGdyYWRlKCkKCSAgIElmIHlvdXIgbW9kdWxlIHZlcnNpb24gbnVtYmVyIGRvZXMgbm90IG1hdGNoIHRoZSB2ZXJzaW9uCgkgICBudW1iZXIgb2YgdGhlIGluc3RhbGxlZCBtb2R1bGUsIHRoZSBDTVMgQWRtaW4gd2lsbCBnaXZlCgkgICB5b3UgYSBjaGFuY2UgdG8gdXBncmFkZSB0aGUgbW9kdWxlLiBUaGlzIGlzIHRoZSBmdW5jdGlvbgoJICAgdGhhdCBhY3R1YWxseSBoYW5kbGVzIHRoZSB1cGdyYWRlLgoJICAgSWRlYWxseSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgaGFuZGxlIHVwZ3JhZGVzIGluY3JlbWVudGFsbHksCgkgICBzbyB5b3UgY291bGQgdXBncmFkZSBmcm9tIHZlcnNpb24gMC4wLjEgdG8gMTAuNS43IHdpdGgKCSAgIGEgc2luZ2xlIGNhbGwuIEZvciBhIGdyZWF0IGV4YW1wbGUgb2YgdGhpcywgc2VlIHRoZSBOZXdzCgkgICBtb2R1bGUgaW4gdGhlIHN0YW5kYXJkIENNUyBpbnN0YWxsLgoKCSAgIEFzIGRvY3VtZW50ZWQgYWJvdmUsIHRoaXMgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlCgkgICBpdCBpcyBpbXBsZW1lbnRlZCBpbiBtZXRob2QudXBncmFkZS5waHAKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBVcGdyYWRlKCRvbGR2ZXJzaW9uLCAkbmV3dmVyc2lvbikKCXsKCQkkY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CgkJc3dpdGNoKCRjdXJyZW50X3ZlcnNpb24pCgkJewoJCQljYXNlICIxLjAiOgoJCQkgICAgIGJyZWFrOwoJCQljYXNlICIxLjEiOgoJCQkgICAgIGJyZWFrOwoJCX0KCQkKCQkvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKCQkkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VwZ3JhZGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cgl9CiovCgoJLyoqCgkgKiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKCSAqIFRoaXMgYWxsb3dzIHlvdSB0byBkaXNwbGF5IGEgbWVzc2FnZSBhbG9uZyB3aXRoIGEgWWVzL05vIGRpYWxvZyBib3guIElmIHRoZSB1c2VyIHJlc3BvbmRzCgkgKiBpbiB0aGUgYWZmaXJtYXRpdmUgdG8geW91ciBtZXNzYWdlLCB0aGUgdW5pbnN0YWxsIHdpbGwgcHJvY2VlZC4gSWYgdGhleSByZXNwb25kIGluIHRoZQoJICogbmVnYXRpdmUsIHRoZSB1bmluc3RhbGwgd2lsbCBiZSBjYW5jZWxlZC4gVGh1cywgeW91ciBtZXNzYWdlIHNob3VsZCBiZSBvZiB0aGUgZm9ybQoJICogIkFsbCBtb2R1bGUgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhpcyBtb2R1bGU/IgoJICoKCSAqIElmIHlvdSBkb24ndCB3YW50IHRoZSBkaWFsb2csIGhhdmUgdGhpcyBtZXRob2QgcmV0dXJuIGEgRkFMU0UsIHdoaWNoIHdpbGwgY2F1c2UgdGhlCgkgKiBtb2R1bGUgdG8gdW5pbnN0YWxsIGltbWVkaWF0ZWx5IGlmIHRoZSB1c2VyIGNsaWNrcyB0aGUgInVuaW5zdGFsbCIgbGluay4KCSAqLwoJZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7Cgl9CgkKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBVbmluc3RhbGwoKQoJICAgU29tZXRpbWVzLCBhbiBleGNlcHRpb25hbGx5IHVuZW5saWdodGVuZWQgb3IgaWdub3JhbnQKCSAgIGFkbWluIHdpbGwgd2lzaCB0byB1bmluc3RhbGwgeW91ciBtb2R1bGUuIFdoaWxlIGl0CgkgICB3b3VsZCBiZSBiZXN0IHRvIGxheSBpbnRvIHRoZXNlIGlkaW90cyB3aXRoIGEgY2x1ZXN0aWNrLAoJICAgd2Ugd2lsbCBkbyB0aGUgbWFnbmFuaW1vdXMgdGhpbmcgYW5kIHJlbW92ZSB0aGUgbW9kdWxlCgkgICBhbmQgY2xlYW4gdXAgdGhlIGRhdGFiYXNlLCBwZXJtaXNzaW9ucywgYW5kIHByZWZlcmVuY2VzCgkgICB0aGF0IGFyZSBzcGVjaWZpYyB0byBpdC4KCSAgIFRoaXMgaXMgdGhlIG1ldGhvZCB3aGVyZSB3ZSBkbyB0aGlzLgoKCSAgIEFzIGRvY3VtZW50ZWQgYWJvdmUsIHRoaXMgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlCgkgICBpdCBpcyBpbXBsZW1lbnRlZCBpbiBtZXRob2QudW5pbnN0YWxsLnBocAoKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBVbmluc3RhbGwoKQoJewoJCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCQkKCQkvLyByZW1vdmUgdGhlIGRhdGFiYXNlIHRhYmxlCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2tlbGV0b24iICk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKCQkvLyByZW1vdmUgdGhlIHNlcXVlbmNlCgkJJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3NrZWxldG9uX3NlcSIgKTsKCgkJLy8gcmVtb3ZlIHRoZSBwZXJtaXNzaW9ucwoJCSR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgU2tlbGV0b24nKTsKCQkKCQkvLyByZW1vdmUgdGhlIHByZWZlcmVuY2UKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgic2luZ19sb3VkbHkiKTsKCgkJLy8gcmVtb3ZlIHRoZSBldmVudAoJCSR0aGlzLT5SZW1vdmVFdmVudCggJ09uU2tlbGV0b25QcmVmZXJlbmNlQ2hhbmdlJyApOwoJCQoJCS8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwoJCSR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7Cgl9CiovCgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkKQoJICAgVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGlmIHlvdXIgbW9kdWxlCgkgICBpcyBhIHBsdWctaW4gdHlwZSBtb2R1bGUuCgkgICAKCSAgIEluIGdlbmVyYWwsIHlvdSdsbCB3YW50IHRvIGNhbGwgdmFyaW91cyBkaWZmZXJlbnQKCSAgIG1ldGhvZHMsIGRlcGVuZGluZyB1cG9uIHRoZSByZXF1ZXN0ZWQgImFjdGlvbi4iCgkgICAKCSAgIFRoZXJlIGFyZSB0d28gYnVpbHQtaW4gYWN0aW9uczogImRlZmF1bHQiIHdoaWNoIGdldHMKCSAgIGNhbGxlZCBpZiB0aGUgbW9kdWxlIGlzIGFjY2Vzc2VkIGZyb20gYSBwYWdlIG9yIHRlbXBsYXRlLAoJICAgYW5kICJkZWZhdWx0YWRtaW4iIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gdGhlIEFkbWluCgkgICBwYW5lbC4KCSAgIAoJICAgVGhlIEFjdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGEgZGlmZmVyZW50CgkgICBhY3Rpb24gZWl0aGVyIGluIHlvdXIgdGFnLCBlLmcuLAoJICAge2Ntc19tb2R1bGUgbW9kdWxlPSdTa2VsZXRvbicgYWN0aW9uPSdzb21ldGhpbmcnfQoJICAgb3IgYnkgcGFzc2luZyBpdCBpbiBhIGxpbmsgY3JlYXRlIGJ5IHRoZSBDcmVhdGVMaW5rCgkgICBtZXRob2QuIE1vcmUgb24gdGhhdCBjYW4gYmUgc2VlbiBiZWxvdyBpbiB0aGUKCSAgIERpc3BsYXlBZG1pbk5hdiBtZXRob2QuCgkgICAKCSAgIFNpbWlsYXIgdG8gdGhlIFNlcGFyYWJsZSBNZXRob2RzIGRlc2NyaWJlZCBhYm92ZSwKCSAgIHlvdSBjYW4gYWN0dWFsbHkgcmVtb3ZlIGFsbCBvZiB0aGUgYWN0aW9ucyBpbnRvIHNlcGFyYXRlCgkgICBmaWxlcyBhcyB3ZWxsLiBXaGVuIHRoZSBtb2R1bGUgQVBJIGNhbGxzIHlvdXIgbW9kdWxlCgkgICB3aXRoIGFuIGFjdGlvbiwgaXQgY2hlY2tzIGZpcnN0IHRvIHNlZSBpZiB0aGUgRG9BY3Rpb24gbWV0aG9kCgkgICBleGlzdHMuIElmIGl0IGRvZXMsIGl0IGdldHMgdXNlZCBub3JtYWxseS4gSWYgaXQgZG9lc24ndCBleGlzdHMsCgkgICB0aGUgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgbWV0aG9kIGdldHMgbG9hZGVkIGFuZCBjYWxsZWQuCgkgICAKCSAgIEZvciBleGFtcGxlLCB0aGUgZGVmYXVsdCBtZXRob2Qgd291bGQgZWl0aGVyIGJlIGFjY2Vzc2VkCgkgICB2aWEgdGhlIERvQWN0aW9uIG1ldGhvZCBiZWluZyBjYWxsZWQgd2l0aCBhbiBhY3Rpb24gb2YgJ2RlZmF1bHQnLCBvciwKCSAgIGlmIG5vIERvQWN0aW9uIG1ldGhvZCBleGlzdHMgaW4gdGhlIG1vZHVsZSwgdGhlIEFQSSB3b3VsZAoJICAgZXhlY3V0ZSB0aGUgZmlsZSBuYW1lZCAiYWN0aW9uLmRlZmF1bHQucGhwIiBpbiB0aGlzIG1vZHVsZQoJICAgZGlyZWN0b3J5LgoJICAgCgkgICBBcyB3aXRoIHRoZSBvdGhlciBTZXBhcmFibGUgTWV0aG9kcyBhYm92ZSwgSSdtIGxlYXZpbmcKCSAgIHRoZSBtZXRob2RzIGluIHRoaXMgbWFpbiBmaWxlLCBidXQgY29tbWVudGluZyB0aGVtIG91dCwKCSAgIGFuZCBkb2luZyB0aGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIHNlcGFyYXRlIGZpbGVzLgoJICAgCgkgICBZb3UgY2FuIGltcGxlbWVudCB5b3VyIG1vZHVsZSBlaXRoZXIgd2F5LgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkPS0xKQoJewoJCXN3aXRjaCAoJGFjdGlvbikKCQl7CiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHQnOgogICAgICAgICAgICAJewogICAgICAgICAgICAJLy8gdGhpcyBpcyB0aGUgcGx1Zy1pbiBzaWRlLCBpLmUuLCBub24tQWRtaW4KICAgICAgICAgICAgCSR0aGlzLT5EaXNwbGF5TW9kdWxlT3V0cHV0KCRhY3Rpb24sICRpZCwgJHBhcmFtcyk7CiAgICAgICAgICAgIAlicmVhazsKICAgICAgICAgICAgCX0KICAgICAgICAgICAgY2FzZSAnZGVmYXVsdGFkbWluJzoKICAgICAgICAgICAgCXsKICAgICAgICAgICAgCS8vIG9ubHkgbGV0IHBlb3BsZSBhY2Nlc3MgbW9kdWxlIHByZWZlcmVuY2VzIGlmIHRoZXkgaGF2ZSBwZXJtaXNzaW9uCiAgICAgICAgICAgIAlpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIFNrZWxldG9uJykpCiAgICAgICAgICAgIAkJewogICAgICAgICAgICAJCSR0aGlzLT5EaXNwbGF5QWRtaW5QYW5lbCgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7CiAgICAgICAgICAgIAkJfQogICAgICAgICAgICAJZWxzZQogICAgICAgICAgICAJCXsKICAgICAgICAgICAgCQkkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKICAgICAgICAgICAgCQkJJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKICAgICAgICAgICAgCQl9CiAgICAgICAgICAgIAlicmVhazsKICAgICAgICAgICAgCX0KICAgICAgICAgICAgY2FzZSAnYWRtaW5fcHJlZnMnOgogICAgICAgICAgICAJewogICAgICAgICAgICAJLy8gb25seSBsZXQgcGVvcGxlIGFjY2VzcyBtb2R1bGUgcHJlZmVyZW5jZXMgaWYgdGhleSBoYXZlIHBlcm1pc3Npb24KICAgICAgICAgICAgCWlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgU2tlbGV0b24nKSkKICAgICAgICAgICAgCQl7CiAgICAgICAgICAgIAkJJHRoaXMtPkRpc3BsYXlBZG1pblByZWZzKCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKICAgICAgICAgICAgCQl9CiAgICAgICAgICAgIAlicmVhazsKICAgICAgICAgICAgCX0KICAgICAgICAgICAgY2FzZSAnc2F2ZV9hZG1pbl9wcmVmcyc6CiAgICAgICAgICAgIAl7CiAgICAgICAgICAgIAkvLyBvbmx5IGxldCBwZW9wbGUgc2F2ZSBtb2R1bGUgcHJlZmVyZW5jZXMgaWYgdGhleSBoYXZlIHBlcm1pc3Npb24KICAgICAgICAgICAgCWlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgU2tlbGV0b24nKSkKICAgICAgICAgICAgCQl7CiAgICAgICAgICAgIAkJJHRoaXMtPlNhdmVBZG1pblByZWZzKCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKICAgICAgICAgICAgCQl9CiAgICAgICAgICAgIAlicmVhazsKICAgICAgICAgICAgCX0KCQl9CgoJfQoqLwoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5QWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5pZCkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBwcmVzZW50IGFuIEFkbWluCgkgICBmb3JtIHRoYXQgY29udGFpbnMgcHJlZmVyZW5jZSBpbmZvcm1hdGlvbi4KCSAgIAoJICAgSXQgc2V0cyBzbWFydHkgdGFnIHZhbHVlcywgYW5kIHRoZW4gY2FsbHMgdGhlCgkgICBjb2RlIG5lY2Vzc2FyeSB0byByZW5kZXIgdGhlIHRlbXBsYXRlLgoJICAgCgkgICBZb3Ugd2lsbCBzZWUgdGhhdCB0aGUgbWV0aG9kIGNhbGxzIGFuIEFQSSBtZXRob2QgdG8KCSAgIGNyZWF0ZSBhIGNoZWNrYm94LiBUaGlzIGlzIGp1c3Qgb25lIG9mIG1hbnkgYXZhaWxhYmxlCgkgICBtZXRob2RzIGZvciBmb3JtIGNyZWF0aW9uLgoJICAgCgkgICBUYWtlIGEgbG9vayBhdCBDTVNST09UL2xpYi9jbGFzc2VzL2NsYXNzLm1vZHVsZS5pbmMucGhwIGZvciBhCgkgICBsYXJnZSBjb2xsZWN0aW9uIG9mIG1ldGhvZHMgdG8gY3JlYXRlIEhUTUwgYW5kIGZvcm0gd2lkZ2V0czoKCQkgICAKCQkgICAtIENyZWF0ZUlucHV0UGFzc3dvcmQgICAgICAgLSBDcmVhdGVJbnB1dFRleHQKCQkgICAtIENyZWF0ZUxpbmsgICAgICAgICAgICAgICAgICAgICAgIC0gQ3JlYXRlRmlsZVVwbG9hZElucHV0CgkJICAgLSBDcmVhdGVUZXh0QXJlYSAgICAgICAgICAgICAgICAtIENyZWF0ZUlucHV0U3VibWl0CgkJICAgLSBDcmVhdGVJbnB1dFJhZGlvR3JvdXAgICAgLSBDcmVhdGVJbnB1dENoZWNrYm94CgkJICAgLSBDcmVhdGVJbnB1dFNlbGVjdExpc3QgICAgICAgLSBDcmVhdGVJbnB1dEhpZGRlbgoJCSAgIAoJCSAgIFRoZXJlIGFyZSBhbHNvIG1ldGhvZHMgZm9yIG1ha2luZyB0YWJiZWQgaW50ZXJmYWNlczoKCQkgICAtIFN0YXJ0VGFiSGVhZGVycyAgICAgICAgICAgICAgLSBTZXRUYWJIZWFkZXIKCQkgICAtIEVuZFRhYkhlYWRlcnMgICAgICAgICAgICAgICAgLSBTdGFydFRhYkNvbnRlbnQKCQkgICAtIEVuZFRhYkNvbnRlbnQgICAgICAgICAgICAgICAgLSBTdGFydFRhYgoJCSAgIC0gRW5kVGFiCgoJICAgCgkgICBTaW5jZSBpdCBpcyBjYWxsZWQgd2hlbiB0aGlzIG1vZHVsZSBpcyBjYWxsZWQgd2l0aCBhbiBhY3Rpb24KCSAgICdhZG1pbl9wcmVmcycsIHRoZSBjb2RlIGlzIGltcGxlbWVudGVkIGluIHRoZSBmaWxlCgkgICBjYWxsZWQgbWV0aG9kLmFkbWluX3ByZWZzLnBocCAgCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gRGlzcGxheUFkbWluUHJlZnMoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICAgIHsKCiAgICAJLy8gc2ltcGxlIHdheSB0byBoYXZlIGNvbW1vbiBuYXYgYXZhaWxhYmxlIHRvIGFsbCBhZG1pbiBwYWdlcwogICAgCSR0aGlzLT5EaXNwbGF5QWRtaW5OYXYoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwoKICAgIAkvLyBDcmVhdGVGb3JtU3RhcnQgc2V0cyB1cCBhIHByb3BlciBmb3JtIHRhZyB0aGF0IHdpbGwgY2F1c2UgdGhlIHN1Ym1pdCB0bwogICAgCS8vIHJldHVybiBjb250cm9sIHRvIHRoaXMgbW9kdWxlIGZvciBwcm9jZXNzaW5nLgoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlX2FkbWluX3ByZWZzJywgJHJldHVybmlkKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJ1N1Ym1pdCcpKTsKCgoJCS8vIGl0J3MgZ29vZCBwcmFjdGljZSB0byBzZXQgZXZlbiBzdGF0aWMgdGl0bGVzIHVzaW5nIHNtYXJ0eSwgc28gbG9jYWxpemF0aW9uIGlzCgkJLy8gZWFzaWVyLgoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc2luZ19sb3VkbHknLCAkdGhpcy0+TGFuZygndGl0bGVfc2luZ19sb3VkbHknKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zZWN0aW9uJywgJHRoaXMtPkxhbmcoJ3RpdGxlX21vZF9wcmVmcycpKTsKCQkKCQkvLyB5b3UnbGwgb2Z0ZW4gd2FudCB0byBkbyB0aGluZ3MgbGlrZSB0aGlzIHRvIHByb3ZpZGUgZmVlZGJhY2s6CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgKGlzc2V0KCRwYXJhbXNbJ21lc3NhZ2UnXSk/JHBhcmFtc1snbWVzc2FnZSddOicnKSk7CgoJCS8vIHByZXNlbnQgYSBjb250cm9sIG9mIHRoZSBwcmVmZXJlbmNlOyBpbiB0aGlzIGNhc2UsIGl0J3MgYQoJCS8vIGNoZWNrYm94IGZvciBvdXIgIlNpbmcgTG91ZGx5IiBvcHRpb24uCgkJICAgCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zaW5nX2xvdWRseScsCiAgICAgICAgCSR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3NpbmdfbG91ZGx5JywgMSwKICAgICAgICAJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzaW5nX2xvdWRseScsICcxJykpLicgJy4KICAgICAgICAJCSR0aGlzLT5MYW5nKCd0aXRsZV9zaW5nX2xvdWRseScpKTsKCiAgICAgICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbnByZWZzLnRwbCcpOwogICAgfQoqLwoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBTYXZlQWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCgkgICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKCSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gc2F2ZSBBZG1pbgoJICAgcHJlZnMgZnJvbSB0aGUgZm9ybSBjcmVhdGVkIGJ5IERpc3BsYXlBZG1pblByZWZzLgoJICAgCgkgICBTaW5jZSBpdCBpcyBjYWxsZWQgd2hlbiB0aGlzIG1vZHVsZSBpcyBjYWxsZWQgd2l0aCBhbiBhY3Rpb24KCSAgICdzYXZlX2FkbWluX3ByZWZzJywgdGhlIGNvZGUgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGZpbGUKCSAgIGNhbGxlZCBtZXRob2Quc2F2ZV9hZG1pbl9wcmVmcy5waHAgIAkgICAKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBTYXZlQWRtaW5QcmVmcygkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgICB7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NpbmdfbG91ZGx5JywgaXNzZXQoJHBhcmFtc1snc2luZ19sb3VkbHknXSk/JHBhcmFtc1snc2luZ19sb3VkbHknXTonMCcpOwoKCQkvLyBzZW5kIGFuIGV2ZW50IHRvIGFueSBzdWJzY3JpYmluZyB1c2VyIHRhZ3Mgb3IgbW9kdWxlcwoJCSRwYXJtcyA9IGFycmF5KCk7CiAgICAJJHBhcm1zWydzaW5nX2xvdWRseSddID0gKGlzc2V0KCRwYXJhbXNbJ3NpbmdfbG91ZGx5J10pP3RydWU6ZmFsc2UpOwogICAgCSR0aGlzLT5TZW5kRXZlbnQoJ09uU2tlbGV0b25QcmVmZXJlbmNlQ2hhbmdlJywkcGFybXMpOwoKICAgICAgICAvLyBpZiB5b3Ugd2FudGVkIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIGF1ZGl0IGxvZywgeW91IGNvdWxkIHdyaXRlIHNvbWV0aGluZyBoZXJlLgogICAgICAgIAogICAgICAgIC8vIHRvIGNhbGwgYW5vdGhlciBtZXRob2Qgb2YgdGhlIG1vZHVsZSwgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3cgdGhhdAogICAgICAgIC8vIG1ldGhvZHMgY2FuIGJlIHNwbGl0IGludG8gb3RoZXIgZmlsZXMuIEhlcmUncyB0aGUgcHJlZmVyZWQgYXBwcm9hY2g6CiAgICAgICAgJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ3ByZWZzdXBkYXRlZCcpOwogICAgICAgICR0aGlzLT5Eb0FjdGlvbignYWRtaW5fcHJlZnMnLCAkaWQsICRwYXJhbXMpOwogICAgfQoqLwoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5TW9kdWxlT3V0cHV0KCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBkaXNwbGF5CgkgICBzb21ldGhpbmcgd2hlcmUgYSBwYWdlIG9yIHRlbXBsYXRlIGhhcyBhIHRhZyBjYWxsaW5nCgkgICB0aGlzIG1vZHVsZS4KCSAgIAoJICAgTm90ZSB0aGF0IGl0IHVzZXMgYSB0ZW1wbGF0ZSwgYW5kIGlzIHRodXMgdmVyeSBwb3dlcmZ1bCwKCSAgIGV2ZW4gaWYgaXQncyBzaW1wbGUuCgoJICAgU2luY2UgaXQgaXMgY2FsbGVkIHdoZW4gdGhpcyBtb2R1bGUgaXMgY2FsbGVkIHdpdGggYW4gYWN0aW9uCgkgICAnZGVmYXVsdCcsIHRoZSBjb2RlIGlzIGltcGxlbWVudGVkIGluIHRoZSBmaWxlCgkgICBjYWxsZWQgbWV0aG9kLmRlZmF1bHQucGhwICAJICAgCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gRGlzcGxheU1vZHVsZU91dHB1dCgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgICB7CgkJaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzaW5nX2xvdWRseScsMSkgPT0gMSkKCQkJewoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xvdWRuZXNzJywgJHRoaXMtPkxhbmcoJ2xvdWQnKSk7CgkJCX0KCQllbHNlCgkJCXsKCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsb3VkbmVzcycsICR0aGlzLT5MYW5nKCdxdWlldCcpKTsKCQkJfQoKICAgICAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgICAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3BsdWdpbi50cGwnKTsKICAgIH0KKi8KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCgkgICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKCSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gZGlzcGxheQoJICAgZXJyb3IgaW5mb3JtYXRpb24gb24gdGhlIGFkbWluIHNpZGUuCgkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgZnVuY3Rpb24gRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnKQogICAgewoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CgkJaWYgKCRtZXNzYWdlICE9ICcnKQoJCQl7CgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ21lc3NhZ2UnLCAkbWVzc2FnZSk7CgkJCX0KCiAgICAgICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICAgIH0KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgRGlzcGxheUFkbWluUGFuZWwoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQoJICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCgkgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIHByZXNlbnQgYW4gQWRtaW4KCSAgIHBhbmVsLgoJICAgCgkgICBJdCBzZXRzIHNtYXJ0eSB0YWcgdmFsdWVzLCBhbmQgdGhlbiBjYWxscyB0aGUKCSAgIGNvZGUgbmVjZXNzYXJ5IHRvIHJlbmRlciB0aGUgdGVtcGxhdGUuICAgCgkgICAKCSAgIFNpbmNlIGl0IGlzIGNhbGxlZCB3aGVuIHRoaXMgbW9kdWxlIGlzIGNhbGxlZCB3aXRoIGFuIGFjdGlvbgoJICAgJ2RlZmF1bHRhZG1pbicsIHRoZSBjb2RlIGlzIGltcGxlbWVudGVkIGluIHRoZSBmaWxlCgkgICBjYWxsZWQgbWV0aG9kLmRlZmF1bHRhZG1pbi5waHAgIAkgICAKCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gRGlzcGxheUFkbWluUGFuZWwoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICAgIHsKICAgIAkvLyBzaW1wbGUgd2F5IHRvIGhhdmUgY29tbW9uIG5hdiBhdmFpbGFibGUgdG8gYWxsIGFkbWluIHBhZ2VzCiAgICAJJHRoaXMtPkRpc3BsYXlBZG1pbk5hdigkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7CiAgICAKICAgIAkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX3NlY3Rpb24nLCAkdGhpcy0+TGFuZygndGl0bGVfYWRtaW5fcGFuZWwnKSk7CiAgICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd3ZWxjb21lX3RleHQnLCAkdGhpcy0+TGFuZygnd2VsY29tZV90ZXh0JykpOwogICAgCiAgICAgICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbnBhbmVsLnRwbCcpOwogICAgfQogICAgKi8KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgRGlzcGxheUFkbWluTmF2KCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBwcmVzZW50IGEKCSAgIGNvbW1vbiBhZG1pbiBtZW51LgoJICAgCSAgIAoJICAgSXQgc2ltcGx5IHNldHMgYSBjb2xsZWN0aW9uIHNtYXJ0eSB0YWcgdmFsdWVzLiAgIAoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgZnVuY3Rpb24gRGlzcGxheUFkbWluTmF2KCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICAgICAgICB7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZG1pbl9uYXYnLAoJCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCd0aXRsZV9tb2RfYWRtaW4nKSwgYXJyYXkoKSkgLgoJCQknIDogJyAuCgkJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkbWluX3ByZWZzJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygndGl0bGVfbW9kX3ByZWZzJyksIGFycmF5KCkpKTsKICAgICAgICB9CgoKCgp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+Cnskd2VsY29tZV90ZXh0fQ==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+CntpZiAkbWVzc2FnZSE9Jyd9PHA+eyRtZXNzYWdlfTwvcD57L2lmfQp7JHN0YXJ0Zm9ybX0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3NpbmdfbG91ZGx5fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zaW5nX2xvdWRseX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/plugin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbG91ZG5lc3N9PC9oMz4=]]></data>
	</file>
</module>
