<?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>Orm</name>
	<version>0.2.0</version>
  <mincmsversion>1.11.0</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5tb3JlIGluZm9ybWF0aW9ucyBvbiA6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tczwvYT48L3A+DQo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtJmVncmF2ZTt0cmUgdXRpbGlzJmVhY3V0ZTsgcG91ciBzcCZlYWN1dGU7Y2lmaWVyIGRhbnMgcXVlbGxlIGxhbmd1ZSBhZmZpY2hlciBsZSBtb2R1bGUgZGFucyBsYSBwYXJ0aWUgcHVibGlxdWUuIENlIHBhcmFtJmVncmF2ZTt0cmUgbiYjMDM5O2VzdCBwYXMgc3VwcG9ydCZlYWN1dGU7IG91IHV0aWxlIHBvdXIgdG91cyBsZXMgbW9kdWxlcy48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBLZXZpbiBEYW5lemlzIChha2EgQmVzcykgJmx0O2NvbnRhY3QgYXQgZnVyaWUgcG9pbnQgYmUmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC4yLjA8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz5zZWUgY2hhbmdlbG9nIDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zPC9hPjxiciAvPg==]]></about>
	<description><![CDATA[This module implements a small ORM layer for other modules]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_save.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCmlmIChpc3NldCgkcGFyYW1zWydkZWxldGVMb2cnXSkpew0KCWlmKGZpbGVfZXhpc3RzKE9ybVRSQUNFOjpnZXRMb2dGaWxlKCkpKXsNCgkJdW5saW5rKE9ybVRSQUNFOjpnZXRMb2dGaWxlKCkpOw0KCX0NCglPcm1UcmFjZTo6aW5mbygiUmVpbml0aWF0ZSB0aGUgbG9nIGZpbGUiKTsNCn0gZWxzZWlmIChpc3NldCgkcGFyYW1zWydkZWxldGVDYWNoZSddKSl7DQoJT3JtQ2FjaGU6OmNsZWFyQ2FjaGUoKTsNCglPcm1UcmFjZTo6aW5mbygiUmVpbml0aWF0ZSB0aGUgY2FjaGUgY29udGVudCIpOw0KfSBlbHNlIGlmIChpc3NldCgkcGFyYW1zWydsZXZlbCddKSB8fCBpc3NldCgkcGFyYW1zWydjYWNoZSddKSApew0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdsb2dsZXZlbCcsICRwYXJhbXNbJ2xldmVsJ10pOw0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjYWNoZVR5cGUnLCAkcGFyYW1zWydjYWNoZSddKTsNCgkNCgkvL1dlIHJlbG9hZCB0aGUgY2FjaGUgYW55d2F5DQoJT3JtQ2FjaGU6OmNsZWFyQ2FjaGUoKTsNCglPcm1UcmFjZTo6aW5mbygiUmVpbml0aWF0ZSB0aGUgY2FjaGUgY29udGVudCIpOw0KfQ0KDQokdGhpcy0+cmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nKTsNCg0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCiRjdXJyZW50TGV2ZWxMb2cgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnLCBPcm1UUkFDRTo6JElORk8pOw0KJGN1cnJlbnRUeXBlQ2FjaGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2FjaGVUeXBlJywgT3JtQ2FjaGU6OiROT05FKTsNCg0KJGl0ZW1zTG9nID0gYXJyYXkoIkRFQlVHIj0+T3JtVFJBQ0U6OiRERUJVRywgIklORk8iPT5Pcm1UUkFDRTo6JElORk8sIldBUk4iPT5Pcm1UUkFDRTo6JFdBUk4sIkVSUk9SIj0+T3JtVFJBQ0U6OiRFUlJPUik7DQokaXRlbXNDYWNoZSA9IGFycmF5KCJOT05FIj0+T3JtQ2FjaGU6OiROT05FLCAiU0NSSVBUIj0+T3JtQ2FjaGU6OiRTQ1JJUFQpOw0KDQokc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7DQokc21hcnR5LT5hc3NpZ24oImlkIiwkaWQpOw0KJHNtYXJ0eS0+YXNzaWduKCJmb3Jtc3RhcnQiLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnYWRtaW5fc2F2ZScpKTsNCiRzbWFydHktPmFzc2lnbigic3VibWl0IiwkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsICdTYXZlIFByZWZzJykpOw0KJHNtYXJ0eS0+YXNzaWduKCJkZWxldGVMb2ciLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnZGVsZXRlTG9nJywgJ0NsZWFuIExvZ3MnKSk7DQokc21hcnR5LT5hc3NpZ24oImRlbGV0ZUNhY2hlIiwkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2RlbGV0ZUNhY2hlJywgJ0NsZWFuIENhY2hlJykpOw0KJHNtYXJ0eS0+YXNzaWduKCJzZWxlY3RMb2ciLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93biAoJGlkLCAnbGV2ZWwnLCAkaXRlbXNMb2csIC0xLCAkY3VycmVudExldmVsTG9nKSk7DQokc21hcnR5LT5hc3NpZ24oInNlbGVjdENhY2hlIiwgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24gKCRpZCwgJ2NhY2hlJywgJGl0ZW1zQ2FjaGUsIC0xLCAkY3VycmVudFR5cGVDYWNoZSkpOw0KDQokc21hcnR5LT5hc3NpZ24oInVybExvZyIsIE9ybVRSQUNFOjpnZXRMb2dVcmwoKSk7DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW4udHBsJyk7DQoNCg0KPz4=]]></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[PD9waHANCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdTaW1wbGUgT3JtJzsNCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJyc7DQokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsZSB1bmluc3RhbGxlZCwgYnllICEiJzsNCiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnUmVhbGx5PyBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgZmluZSBtb2R1bGU/JzsNCiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOw0KJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOw0KJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIHNtYWxsIE9STSBsYXllciBmb3Igb3RoZXIgbW9kdWxlcyc7DQokbGFuZ1snY2hhbmdlbG9nJ10gPSAnc2VlIGNoYW5nZWxvZyA6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tczwvYT4nOw0KJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4NCjxwPm1vcmUgaW5mb3JtYXRpb25zIG9uIDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zPC9hPjwvcD4NCic7DQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.iormsortable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGludGVyZmFjZSBJT3JtU29ydGFibGUgd2hpY2ggYWxsb3cgdG8gc29ydCByZXN1bHRzIGZvciBhbiBlbnRpdHkNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEludGVyZmFjZSB3aWNoIGFsbG93IHRvIHNvcnQgcmVzdWx0cyBmb3IgYW4gZW50aXR5DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KaW50ZXJmYWNlIElPcm1Tb3J0YWJsZQ0Kew0KCQ0KICAgIC8qKg0KICAgICogRnVuY3Rpb24gd2hpY2ggY29tcGFyZSB0d28gZW50aXRpZXMgaW4gcGFyYW1ldGVycw0KICAgICogDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgdGhlIGZpcnN0IGVudGl0eSB3aXRoIGFsbCB2YWx1ZXMgc2V0dGVkDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IHRoZSBzZWNvbmQgZW50aXR5IHdpdGggYWxsIHZhbHVlcyBzZXR0ZWQNCgkqDQogICAgKiBAcmV0dXJuIEludGVnZXIgOiAwIGlmIGVxdWFscywgMSBpZiB0aGUgZmlyc3QgZW50aXR5IGlzIHN1cGVyaW9yLCBlbHNlIC0xDQogICAgKiANCiAgICAqIEBzZWUgT3JtRW50aXR5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBhcmVUbyhPcm1FbnRpdHkgJGVudGl0eTEsIE9ybUVudGl0eSAkZW50aXR5Mik7DQp9DQoNCg0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.myautoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGF1dG9sb2FkIHN5c3RlbSB0aGF0IHdpbGwgbWVtb3JpemUgYWxsIHRoZSBlbnRpdGllcyB1c2VkIGJ5IGFsbCB0aGUgbW9kdWxlcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCiAvKioNCiAqIFN0YXRpYyBDbGFzcyBtYW5hZ2luZyBlbnRpdGllcyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbg0KICoJVGhlIG1haW4gdXNlIGlzIHRvIG5vdCByZWRlY2xhcmF0ZSBYIGluc3RhbmNlcyBvZiBzYW1lIGNsYXNzZXMgaWYgaXQncyBub3QgbmVjZXNzYXJ5Lg0KICogQWxsIG1vZHVsZXMgaGF2ZSB0aGVpciBvd24gbmFtZXNwYWNlIHRvIGF2b2lkIHNoYXJpbmcgZW50aXRpZXMgYmV0d2VlbiB0d28gbW9kdWxlcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCmZpbmFsIGNsYXNzIE15QXV0b2xvYWQNCnsNCglwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2VzOw0KCQ0KCS8qKg0KCSAqIFByaXZhdGUgY29uc3RydWN0b3INCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXt9CQ0KCQ0KCS8qKg0KCSAqIEZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgZW50aXRpZXMgdGhlbXNlbGYgZHVyaW5nIHRoZWlyIF9jb25zdHJ1Y3QoKSBmdW5jdGlvbg0KCSAqIGl0IHdpbGwgc3RvY2sgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAoaWYgbm90IGFscmVhZHkgZXhpc3RpbmcpIGluIGhpcyBtZW1vcnkNCiAgICAgKiANCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlDQoJICogQHBhcmFtIHN0cmluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQoJICovDQoJcHVibGljIGZpbmFsIHN0YXRpYyBmdW5jdGlvbiBhZGRJbnN0YW5jZSgkbmFtZXNwYWNlLCBPcm1FbnRpdHkgJGluc3RhbmNlKQ0KCXsJDQoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOw0KCQkkbmFtZSA9ICRpbnN0YW5jZS0+Z2V0TmFtZSgpOw0KCQkkbmFtZSA9IHN0cnRvbG93ZXIoJG5hbWUpOw0KCQkJCQ0KCQlpZihpc3NldChzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdWyRuYW1lXSkpDQoJCXsNCgkJCU9ybVRyYWNlOjpkZWJ1ZygiSW5zdGFuY2UgIi4kbmFtZS4iIGFscmVhZHkgaW4gbWVtb3J5LiIpOw0KCQkJcmV0dXJuOw0KCQl9DQoJCU9ybVRyYWNlOjpkZWJ1ZygiQWRkaW5nIHRoZSBpbnN0YW5jZSAiLiRuYW1lLiIgaW50byB0aGUgbmFtZXNwYWNlICIuJG5hbWVzcGFjZSk7DQoJCXNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV1bJG5hbWVdID0gJGluc3RhbmNlOw0KCX0NCgkNCgkvKioNCgkgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgZW50aXR5IGZyb20gdGhlIG1lbW9yeS4gRWFjaCBpbnN0YW5jZSBpcyBhIGNsb25lIHRvIGF2b2lkIHVzaW5nDQoJICogdGhlIHNhbWUgb2JqZWN0IA0KICAgICAqIA0KCSAqIEBwYXJhbSBuYW1lc3BhY2UgbmFtZXNwYWNlIG9mIHRoZSBlbnRpdHkncyBtb2R1bGUNCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCgkgKg0KCSAqIEByZXR1cm4gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIGVudGl0eQ0KCSAqLw0KCXB1YmxpYyBmaW5hbCBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoJG5hbWVzcGFjZSwgJGluc3RhbmNlTmFtZSkNCgl7DQoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOw0KCQkkaW5zdGFuY2VOYW1lID0gc3RydG9sb3dlcigkaW5zdGFuY2VOYW1lKTsNCgkJbXlBdXRvbG9hZDo6aXNWYWxpZGVOYW1lc3BhY2UoJG5hbWVzcGFjZSk7DQoJCQ0KCQlPcm1UcmFjZTo6ZGVidWcoIkFza2luZyBhbiBpbnN0YW5jZSBvZiAiLiRpbnN0YW5jZU5hbWUuICIgZm9yIG5hbWVzcGFjZSAiLiRuYW1lc3BhY2UpOw0KCQlpZihteUF1dG9sb2FkOjpoYXNJbnN0YW5jZSgkbmFtZXNwYWNlLCAkaW5zdGFuY2VOYW1lKSkNCgkJew0KCQkJT3JtVHJhY2U6OmRlYnVnKCJJbnN0YW5jZSAiLiRpbnN0YW5jZU5hbWUuIiByZXR1cm5lZC4iKTsNCgkJCXJldHVybiBjbG9uZSBzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdWyRpbnN0YW5jZU5hbWVdOw0KCQl9DQoJCQ0KCQlPcm1UcmFjZTo6ZXJyb3IoIk5vIGluc3RhbmNlICRpbnN0YW5jZU5hbWUgZm91bmQgaW4gbWVtb3J5IGZvciBuYW1lc3BhY2UgIi4kbmFtZXNwYWNlKTsNCgkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm8gaW5zdGFuY2UgJGluc3RhbmNlTmFtZSBmb3VuZCBpbiBtZW1vcnkgZm9yIG5hbWVzcGFjZSAiLiRuYW1lc3BhY2UpOw0KCX0NCgkNCgkvKioNCgkgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaW5zdGFuY2UgZXhpc3RzIGluIHRoZSBtZW1vcnkgZm9yIHRoZSBzYW1lIG5hbWVzcGFjZQ0KICAgICAqIA0KCSAqIEBwYXJhbSBuYW1lc3BhY2UgbmFtZXNwYWNlIG9mIHRoZSBlbnRpdHkncyBtb2R1bGUNCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCgkgKg0KCSAqIEByZXR1cm4gQm9vbGVhbiBpZiB0aGUgaW5zdGFuY2UgZXhpc3RzDQoJICovDQoJcHVibGljIGZpbmFsIHN0YXRpYyBmdW5jdGlvbiBoYXNJbnN0YW5jZSgkbmFtZXNwYWNlLCAkaW5zdGFuY2VOYW1lKXsNCgkJJG5hbWVzcGFjZSA9IHN0cnRvbG93ZXIoJG5hbWVzcGFjZSk7DQoJCSRpbnN0YW5jZU5hbWUgPSBzdHJ0b2xvd2VyKCRpbnN0YW5jZU5hbWUpOw0KCQkNCgkJbXlBdXRvbG9hZDo6aXNWYWxpZGVOYW1lc3BhY2UoJG5hbWVzcGFjZSk7DQoJCQ0KCQlyZXR1cm4gaXNzZXQoc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskaW5zdGFuY2VOYW1lXSk7DQoJfQ0KCQ0KCS8qKg0KCSAqIFJldHVybiBhbGwgdGhlIGluc3RhbmNlcyBvZiBhbGwgdGhlIGVudGl0aWVzIGZyb20gYSBzaW5nbGUgbmFtZXNwYWNlDQogICAgICogDQoJICogQHBhcmFtIG5hbWVzcGFjZSBuYW1lc3BhY2Ugb2YgdGhlIGVudGl0eSdzIG1vZHVsZQ0KCSAqIEBwYXJhbSBzdHJpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KCSAqDQoJICogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IGFuIGFycmF5IG9mIGFsbCB0aGUgZW50aXRpZXMNCgkgKi8NCglwdWJsaWMgZmluYWwgc3RhdGljIGZ1bmN0aW9uIGdldEFsbEluc3RhbmNlcygkbmFtZXNwYWNlKQ0KCXsNCgkJJG5hbWVzcGFjZSA9IHN0cnRvbG93ZXIoJG5hbWVzcGFjZSk7DQoJCW15QXV0b2xvYWQ6OmlzVmFsaWRlTmFtZXNwYWNlKCRuYW1lc3BhY2UpOw0KCQkNCgkJcmV0dXJuIHNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV07DQoJfQ0KCQ0KCS8qKg0KCSAqIFJldG91cm5lIHRydWUgaWYgdGhlIG5hbWVzcGFjZSBpcyBrbm93biBpbiBtZW1vcnkNCiAgICAgKiANCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlDQoJICoNCgkgKiBAcmV0dXJuIEJvb2xlYW4gaWYgdGhlIG5hbWVzcGFjZSBleGlzdHMNCgkgKi8NCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkZU5hbWVzcGFjZSgkbmFtZXNwYWNlKQ0KCXsNCgkJaWYoIWlzc2V0KHNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV0pKQ0KCQl7DQoJCQlPcm1UcmFjZTo6ZXJyb3IoIlRoZSBuYW1lc3BhY2UgJyRuYW1lc3BhY2UnIGRvZXNuJ3QgZXhpc3RlIGludG8gdGhlIE9ybSBTeXN0ZW0iKTsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBuYW1lc3BhY2UgJyRuYW1lc3BhY2UnIGRvZXNuJ3QgZXhpc3RlIGludG8gdGhlIE9ybSBTeXN0ZW0iKTsNCgkJfQ0KCX0NCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdpY2ggcHJvdmlkZSBhbiBnbG9iYWwgaW50ZXJmYWNlIGZvciBhbGwgdGhlIGNhY2hpbmcgc3lzdGVtcw0KICoNCiAqIEBzaW5jZSAwLjIuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCg0KDQovKioNCiAqDQogKiAgU3RhdGljIGNsYXNzZSB1c2VkIHRvIHByb3ZpZGUgbGlzdCBvZiBzaWduYXR1cmUgZm9yIGFsbCB0aGUgY2FjaGluZyBzeXN0ZW1zDQogKg0KICogIEV4YW1wbGUgOiANCiAqICA8Y29kZT4NCiAqICAJLy9DYWxsIHRvIGNtc21zIHRvIGdldCB0aGUgZGF0YWJhc2UgY29ubmVjdG9yDQogKiAgCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQogKiAgICAgICRjYWNoZUluc3RhbmNlID0gT3JtQ2FjaGU6OmdldEluc3RhbmNlKCk7DQogKiAgCQ0KICogIAkvL0RlZmluZXMgYSBuZXcgQ3VzdG9tZXIgZW50aXR5DQogKiAgCSRlbnRpdHkgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgnbXlNb2R1bGUnLCAnY3VzdG9tZXInKTsNCiAqICAJDQogKiAgCS8vU2VsZWN0IGFsbCBDdXN0b21lcnMNCiAqICAJJHF1ZXJ5U2VsZWN0ID0gJ1NlbGVjdCAqIEZST00gJy4kZW50aXR5LT5nZXREYm5hbWUoKTsNCiAqICAJDQogKiAgCS8vSWYgdGhlIGNhY2hpbmcgc3lzdGVtIGFscmVhZHkga25vdyB0aGUgYW5zd2VyIDogd2UgcmV0dXJuIHRoZSByZXN1bHQgaW1tZWRpYXRlbHkNCiAqICAJaWYoJGNhY2hlSW5zdGFuY2UtPmlzQ2FjaGUoJHF1ZXJ5U2VsZWN0KSkgew0KICogIAkJcmV0dXJuICRjYWNoZUluc3RhbmNlLT5nZXRDYWNoZSgkcXVlcnlTZWxlY3QpOw0KICogIAl9DQogKiAgCQ0KICogIAkvL1NvIHdlIG5lZWQgdG8gZXhlY3V0ZSB0aGUgcXVlcnkNCiAqICAJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTZWxlY3QpOw0KICogIAlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IhIik7fQ0KICogIAkNCiAqICAJJGVudGl0eXMgPSBhcnJheSgpOw0KICogIAl3aGlsZSAoJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpIHsNCiAqICAJCSRlbnRpdHlzW10gPSBPcm1Db3JlOjpyb3dUb0VudGl0eSgkZW50aXR5LCAkcm93KTsNCiAqICAJfQ0KICogIAkNCiAqICAJLy9Eb24ndCBmb3JnZXQgdG8gcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hpbmcgc3lzdGVtIGZvciB0aGUgbmV4dCBjYWxsDQogKiAgCSRjYWNoZUluc3RhbmNlLT5zZXRDYWNoZSgkcXVlcnlTZWxlY3QsIG51bGwsICRlbnRpdHlzKTsNCiANCiAqICAJcmV0dXJuICRlbnRpdHlzOw0KICoJPC9jb2RlPg0KICoNCiAqIEBzaW5jZSAwLjIuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCmFic3RyYWN0IGNsYXNzIE9ybUNhY2hlIHsJDQoNCglwdWJsaWMgc3RhdGljICROT05FID0gMDsNCglwdWJsaWMgc3RhdGljICRTQ1JJUFQgPSAxOw0KCQkNCgkvKioNCgkgKiBQcml2YXRlIGNvbnN0cnVjdG9yDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30NCgkNCgkvKioNCgkgKiBXaWxsIHJldHVybiBhIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjYWNoZS4NCgkgKg0KCSAqIEBwYXJhbSBtaXhlZCBub3QgcmVxdWllcmVkIDogdGhlIHR5cGUgb2YgY2FjaGUuIEJ5IGRlZmF1bHQgaXQgd2lsbCB0YWtlIHRoZSB0eXBlIG9mIGNhY2hlIGRlZmluZWQgYXMgZGVmYXVsdCBpbnRvIENtc01hZGVTaW1wbGUNCgkgKg0KCSAqIEByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgQ2FjaGUuDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgkdHlwZUNhY2hlID0gbnVsbCl7DQoJCQ0KCQlpZigkdHlwZUNhY2hlID09IG51bGwpew0KCQkJJG9ybSA9IGNtc21zKCktPkdldE1vZHVsZU9wZXJhdGlvbnMoKS0+Z2V0X21vZHVsZV9pbnN0YW5jZSgnT3JtJyk7DQoJCQkkdHlwZUNhY2hlID0gJG9ybS0+R2V0UHJlZmVyZW5jZSgnY2FjaGVUeXBlJywgT3JtQ2FjaGU6OiROT05FKTsNCgkJfQ0KCQkNCgkJc3dpdGNoKCR0eXBlQ2FjaGUpew0KCQkJY2FzZSBPcm1DYWNoZTo6JE5PTkU6DQoJCQkJcmV0dXJuIE9ybUNhY2hlTm9uZTo6Z2V0SW5zdGFuY2UoKTsNCgkJCQlicmVhazsNCgkJCWNhc2UgT3JtQ2FjaGU6OiRTQ1JJUFQ6DQoJCQkJcmV0dXJuIE9ybUNhY2hlU2NyaXB0OjpnZXRJbnN0YW5jZSgpOw0KCQkJCWJyZWFrOw0KCQkJZGVmYXVsdDoNCgkJCQlPcm1UcmFjZTo6ZXJyb3IoIlR5cGUgb2YgQ2FjaGUgI3skdHlwZUNhY2hlfSBpcyBub3QgYSB2YWxpZCBUeXBlIG9mIENhY2hlIik7DQoJCQkJZXhpdCAtMTsNCgkJfQ0KCX0NCgkJCQ0KCS8qKg0KCSAqCVNldCB0aGUgY2FjaGUgZm9yIGEgc3FsIHJlcXVlc3QsIGl0cyBwYXJhbWV0ZXJzIGFuZCBvZiBjb3Vyc2UgdGhlIHJlc3VsdA0KICAgICAqIA0KCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQ0KCSAqIEBwYXJhbSBhcnJheSB0aGUgcGFyYW1ldGVycyBpbnRvIGEgYXJyYXkuIE1heSBiZSBudWxsDQoJICogQHBhcmFtIG9iamVjdCB0aGUgcmVzdWx0DQoJICovDQoJcHVibGljIGFic3RyYWN0IGZ1bmN0aW9uIHNldENhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsLCAkdmFsdWUpOw0KCQ0KCS8qKg0KCSAqIFF1ZXJ5aW5nIHRoZSBjYWNoZSBmb3IgYSBzcWwgcmVxdWVzdCBhbmQgaXRzIHBhcmFtZXRlcnMNCiAgICAgKiANCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgcXVlcnkNCgkgKiBAcGFyYW0gYXJyYXkgdGhlIHBhcmFtZXRlcnMgaW50byBhIGFycmF5LiBNYXkgYmUgbnVsbA0KCSAqDQoJICogQHJldHVybiBvYmplY3QgdGhlIHJlc3VsdA0KCSAqLw0KCXB1YmxpYyBhYnN0cmFjdCBmdW5jdGlvbiBnZXRDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCk7DQoNCgkvKioNCgkgKiBSZXR1cm4gdHJ1ZSBpZiBhIGNhY2hlIGV4aXN0IGZvciBhIHNxbCByZXF1ZXN0IGFuZCBpdHMgcGFyYW1ldGVycw0KICAgICAqIA0KCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQ0KCSAqIEBwYXJhbSBhcnJheSB0aGUgcGFyYW1ldGVycyBpbnRvIGEgYXJyYXkuIE1heSBiZSBudWxsDQoJICoNCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY2FjaGUgZXhpc3RzDQoJICovCQ0KCXB1YmxpYyBhYnN0cmFjdCBmdW5jdGlvbiBpc0NhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKTsNCg0KCS8qKg0KCSAqIEVtcHR5IHRoZSBjYWNoZS4gVmVyeSBpbXBvcnRhbnQgaWYgYmV0d2VlbiAyIHF1ZXJ5aW5nLCB0aGUgc3lzdGVtIG1heSBpbnNlcnQvZGVsZXRlL3VwZGF0ZSBzb21lIGRhdGEgaW4gdGhlIGRhdGFiYXNlDQoJICogIEluIHRoZSBPcm0gc3lzdGVtLCB3ZSBhbHdheXMgZHJvcCB0aGUgY2FjaGUgaW4gdGhlIGluc2VydC9kZWxldGUvdXBkYXRlIGZ1bmN0aW9uLg0KCSAqLwkNCglwdWJsaWMgYWJzdHJhY3QgZnVuY3Rpb24gY2xlYXJDYWNoZSgpOw0KDQoJLyoqDQoJICogUmV0dXJuIGEgdW5pcXVlIGhhc2ggZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzDQoJICogIHRoaXMgaGFzaCBpcyB1c2VkIHRvIERlZmluZXMgYSB1bmlxdWUgZW50cnkgaW50byB0aGUgY2FjaGUNCiAgICAgKiANCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgcXVlcnkNCgkgKiBAcGFyYW0gYXJyYXkgdGhlIHBhcmFtZXRlcnMgaW50byBhIGFycmF5LiBNYXkgYmUgbnVsbA0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgdGhlIGhhc2gNCgkgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGhhc2goJHNxbCwgJHBhcmFtcyA9IG51bGwpIHsNCgkJaWYoJHBhcmFtcyA9PSBudWxsKXsNCgkJCSRwYXJhbXMgPSAiIjsNCgkJfQ0KCQkNCgkJJHAgPSBzZXJpYWxpemUoJHBhcmFtcyk7DQoNCgkJcmV0dXJuIG1kNSgkc3FsLiRwKTsNCgl9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcachenone.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdpY2ggcHJvdmlkZSBhbiBkdW1teSBjYWNoaW5nIHN5c3RlbQ0KICoNCiAqIEBzaW5jZSAwLjIuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCg0KDQovKioNCiAqDQogKiAgU3RhdGljIGNsYXNzZSB1c2VkIHRvIHByb3ZpZGUgYSB6ZXJvLWNhY2hpbmcgc3lzdGVtLiANCiAqICAgSXQncyBhIHNpbXBsZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2lnbmF0dXJlIG9mIGNhY2hpbmcNCiAqICAgd2ljaCB3aWxsIGFsd2F5cyBzYXkgdGhhdCB0aGVyZSBpcyBubyBjYWNoZSBhdmFpbGFibGUsIGZvcmNpbmcgDQogKiAgIHByb2Nlc3Npbmcgb2YgZXZlcnkgcXVlcmllcw0KICoNCiAqIEBzaW5jZSAwLjIuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCmNsYXNzIE9ybUNhY2hlTm9uZSBleHRlbmRzIE9ybUNhY2hlewkNCgkNCglwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2U7DQoJCQ0KCS8qKg0KCSAqIFByaXZhdGUgY29uc3RydWN0b3INCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpew0KCQlpZihzZWxmOjokaW5zdGFuY2UgPT0gbnVsbCl7DQoJCQlzZWxmOjokaW5zdGFuY2UgPSBuZXcgT3JtQ2FjaGVOb25lKCk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRpbnN0YW5jZTsNCgl9DQoJCQkNCgkvKioNCgkgKglTZXQgdGhlIGNhY2hlIGZvciBhIHNxbCByZXF1ZXN0LCBpdHMgcGFyYW1ldGVycyBhbmQgb2YgY291cnNlIHRoZSByZXN1bHQNCiAgICAgKiANCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgcXVlcnkNCgkgKiBAcGFyYW0gYXJyYXkgdGhlIHBhcmFtZXRlcnMgaW50byBhIGFycmF5LiBNYXkgYmUgbnVsbA0KCSAqIEBwYXJhbSBvYmplY3QgdGhlIHJlc3VsdA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXRDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCwgJHZhbHVlKSB7CQkNCgkJLy9ObyBwcm9jZXNzaW5nCQkNCgl9DQoJDQoJLyoqDQoJICogUXVlcnlpbmcgdGhlIGNhY2hlIGZvciBhIHNxbCByZXF1ZXN0IGFuZCBpdHMgcGFyYW1ldGVycw0KICAgICAqIA0KCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQ0KCSAqIEBwYXJhbSBhcnJheSB0aGUgcGFyYW1ldGVycyBpbnRvIGEgYXJyYXkuIE1heSBiZSBudWxsDQoJICoNCgkgKiBAcmV0dXJuIG9iamVjdCB0aGUgcmVzdWx0DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldENhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKSB7DQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIFJldHVybiB0cnVlIGlmIGEgY2FjaGUgZXhpc3QgZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKg0KCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBjYWNoZSBleGlzdHMNCgkgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGlzQ2FjaGUoJHNxbCwgJHBhcmFtcyA9IG51bGwpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEVtcHR5IHRoZSBjYWNoZS4gVmVyeSBpbXBvcnRhbnQgaWYgYmV0d2VlbiAyIHF1ZXJ5aW5nLCB0aGUgc3lzdGVtIG1heSBpbnNlcnQvZGVsZXRlL3VwZGF0ZSBzb21lIGRhdGEgaW4gdGhlIGRhdGFiYXNlDQoJICogIEluIHRoZSBPcm0gc3lzdGVtLCB3ZSBhbHdheXMgZHJvcCB0aGUgY2FjaGUgaW4gdGhlIGluc2VydC9kZWxldGUvdXBkYXRlIGZ1bmN0aW9uLg0KCSAqLwkNCglwdWJsaWMgZnVuY3Rpb24gY2xlYXJDYWNoZSgpew0KCQkvL05vIHByb2Nlc3NpbmcJDQoJfQ0KDQoJLyoqDQoJICogUmV0dXJuIGEgdW5pcXVlIGhhc2ggZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzDQoJICogIHRoaXMgaGFzaCBpcyB1c2VkIHRvIERlZmluZXMgYSB1bmlxdWUgZW50cnkgaW50byB0aGUgY2FjaGUNCiAgICAgKiANCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgcXVlcnkNCgkgKiBAcGFyYW0gYXJyYXkgdGhlIHBhcmFtZXRlcnMgaW50byBhIGFycmF5LiBNYXkgYmUgbnVsbA0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgdGhlIGhhc2gNCgkgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGhhc2goJHNxbCwgJHBhcmFtcyA9IG51bGwpIHsNCgkJLy9ObyBwcm9jZXNzaW5nCQ0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcachescript.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdpY2ggcHJvdmlkZSBhIG1pbmkgY2FjaGluZyBzeXN0ZW0gb2YgT3JtIHRvIGF2b2lkIG11bHRpcGxlcyBzcWwgcmVxdWVzdHMNCiAqDQogKiBAc2luY2UgMC4yLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCi8qKg0KICoNCiAqICBTdGF0aWMgY2xhc3NlIHVzZWQgdG8gcHJvdmlkZSBhIHZlcnkgc2ltcGxlIGNhY2hpbmcgc3lzdGVtLiBZb3UgY2FuIHB1c2ggdGhlIHJlc3VsdCBvZiBhIHJlcXVlc3QgaW50byBpdCBhbmQgYXNraW5nIGxhdGVyDQogKgl0byBjb2xsZWN0IHRoZSByZXN1bHQuDQogKg0KICogIEV4YW1wbGUgOiANCiAqICA8Y29kZT4NCiAqICAJLy9DYWxsIHRvIGNtc21zIHRvIGdldCB0aGUgZGF0YWJhc2UgY29ubmVjdG9yDQogKiAgCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQogKiAgCQ0KICogIAkvL0RlZmluZXMgYSBuZXcgQ3VzdG9tZXIgZW50aXR5DQogKiAgCSRlbnRpdHkgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgnbXlNb2R1bGUnLCAnY3VzdG9tZXInKTsNCiAqICAJDQogKiAgCS8vU2VsZWN0IGFsbCBDdXN0b21lcnMNCiAqICAJJHF1ZXJ5U2VsZWN0ID0gJ1NlbGVjdCAqIEZST00gJy4kZW50aXR5LT5nZXREYm5hbWUoKTsNCiAqICAJDQogKiAgCS8vSWYgdGhlIGNhY2hpbmcgc3lzdGVtIGFscmVhZHkga25vdyB0aGUgYW5zd2VyIDogd2UgcmV0dXJuIHRoZSByZXN1bHQgaW1tZWRpYXRlbHkNCiAqICAJaWYoT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPmlzQ2FjaGUoJHF1ZXJ5U2VsZWN0KSkgew0KICogIAkJcmV0dXJuIE9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5nZXRDYWNoZSgkcXVlcnlTZWxlY3QpOw0KICogIAl9DQogKiAgCQ0KICogIAkvL1NvIHdlIG5lZWQgdG8gZXhlY3V0ZSB0aGUgcXVlcnkNCiAqICAJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTZWxlY3QpOw0KICogIAlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IhIik7fQ0KICogIAkNCiAqICAJJGVudGl0eXMgPSBhcnJheSgpOw0KICogIAl3aGlsZSAoJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpIHsNCiAqICAJCSRlbnRpdHlzW10gPSBPcm1Db3JlOjpyb3dUb0VudGl0eSgkZW50aXR5LCAkcm93KTsNCiAqICAJfQ0KICogIAkNCiAqICAJLy9Eb24ndCBmb3JnZXQgdG8gcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hpbmcgc3lzdGVtIGZvciB0aGUgbmV4dCBjYWxsDQogKiAgCU9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5zZXRDYWNoZSgkcXVlcnlTZWxlY3QsIG51bGwsICRlbnRpdHlzKTsNCiANCiAqICAJcmV0dXJuICRlbnRpdHlzOw0KICoJPC9jb2RlPg0KICoNCiAqICBUaGUgY2FjaGUgaXMgb25seSBhdmFpbGFibGUgZm9yIHRoZSBjdXJyZW50IGNhbGwgb2YgdGhlIHBocCBzY3JpcHQgDQogKiAgQW5kIHdpbGwgYmUgdW5hdmFpbGFibGUgZm9yIHRoZSBuZXh0IGNhbGwuDQogKg0KICoNCiAqIEBzaW5jZSAwLjIuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCmNsYXNzIE9ybUNhY2hlU2NyaXB0IGV4dGVuZHMgT3JtQ2FjaGUgewkNCgkNCglwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2U7DQoJcHJpdmF0ZSBzdGF0aWMgJGNhY2hlOw0KCQkNCgkvKioNCgkgKiBQcml2YXRlIGNvbnN0cnVjdG9yDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCQlzZWxmOjokY2FjaGUgPSBhcnJheSgpOw0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKXsNCgkJaWYoc2VsZjo6JGluc3RhbmNlID09IG51bGwpew0KCQkJc2VsZjo6JGluc3RhbmNlID0gbmV3IE9ybUNhY2hlU2NyaXB0KCk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRpbnN0YW5jZTsNCgl9DQoJDQoJLyoqDQoJICoJU2V0IHRoZSBjYWNoZSBmb3IgYSBzcWwgcmVxdWVzdCwgaXRzIHBhcmFtZXRlcnMgYW5kIG9mIGNvdXJzZSB0aGUgcmVzdWx0DQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKiBAcGFyYW0gb2JqZWN0IHRoZSByZXN1bHQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0Q2FjaGUoJHNxbCwgJHBhcmFtcyA9IG51bGwsICR2YWx1ZSkgewkJDQoJCXNlbGY6OiRjYWNoZVtzZWxmOjpoYXNoKCRzcWwsJHBhcmFtcyldID0gJHZhbHVlOw0KCQkNCgl9DQoJDQoJLyoqDQoJICogUXVlcnlpbmcgdGhlIGNhY2hlIGZvciBhIHNxbCByZXF1ZXN0IGFuZCBpdHMgcGFyYW1ldGVycw0KICAgICAqIA0KCSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBxdWVyeQ0KCSAqIEBwYXJhbSBhcnJheSB0aGUgcGFyYW1ldGVycyBpbnRvIGEgYXJyYXkuIE1heSBiZSBudWxsDQoJICoNCgkgKiBAcmV0dXJuIG9iamVjdCB0aGUgcmVzdWx0DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldENhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKSB7DQoJCWlmKHNlbGY6OmlzQ2FjaGUoJHNxbCwgJHBhcmFtcykpIHsNCgkJCXJldHVybiBzZWxmOjokY2FjaGVbc2VsZjo6aGFzaCgkc3FsLCRwYXJhbXMpXTsNCgkJfQ0KCQkNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogUmV0dXJuIHRydWUgaWYgYSBjYWNoZSBleGlzdCBmb3IgYSBzcWwgcmVxdWVzdCBhbmQgaXRzIHBhcmFtZXRlcnMNCiAgICAgKiANCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgcXVlcnkNCgkgKiBAcGFyYW0gYXJyYXkgdGhlIHBhcmFtZXRlcnMgaW50byBhIGFycmF5LiBNYXkgYmUgbnVsbA0KCSAqDQoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIGNhY2hlIGV4aXN0cw0KCSAqLwkNCglwdWJsaWMgZnVuY3Rpb24gaXNDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCkgew0KCQlyZXR1cm4gYXJyYXlfS0VZX2V4aXN0cyhzZWxmOjpoYXNoKCRzcWwsJHBhcmFtcyksc2VsZjo6JGNhY2hlKTsNCgl9DQoNCgkvKioNCgkgKiBFbXB0eSB0aGUgY2FjaGUuIFZlcnkgaW1wb3J0YW50IGlmIGJldHdlZW4gMiBxdWVyeWluZywgdGhlIHN5c3RlbSBtYXkgaW5zZXJ0L2RlbGV0ZS91cGRhdGUgc29tZSBkYXRhIGluIHRoZSBkYXRhYmFzZQ0KCSAqICBJbiB0aGUgT3JtIHN5c3RlbSwgd2UgYWx3YXlzIGRyb3AgdGhlIGNhY2hlIGluIHRoZSBpbnNlcnQvZGVsZXRlL3VwZGF0ZSBmdW5jdGlvbi4NCgkgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGNsZWFyQ2FjaGUoKSB7DQoJCXNlbGY6OiRjYWNoZT1udWxsOw0KCX0NCg0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcast.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgdHlwZSBmb3IgdGhlIGZpZWxkIGludG8gZGF0YWJhc2UNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCg0KLyoqDQogKiBDbGFzcyBEZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBmaWVsZCwgaW4gZW50aXR5IGJ1dCBhbHNvIGluIGRhdGFiYXNlDQogKiANCiAqICBPcm1DQVNUOjokU1RSSU5HIGEgc2ltcGxlIHN0cmluZw0KICogIE9ybUNBU1Q6OiRCVUZGRVIgYSBmaWVsZCB3aXRoIG5vIGxpbWl0IG9mIHNpemUgKGV4Y2VwdCB0aGUgbXlzcWwgbmF0dXJhbCBsaW1pdCkNCiAqDQogKiAgT3JtQ0FTVDo6JElOVEVHRVIgYW4gaW50ZWdlcg0KICogIE9ybUNBU1Q6OiROVU1FUklDIGEgZmllbGQgZm9yIGEgcmVhbCBudW1iZXIgKGVnIDogd2l0aCBjb21hKQ0KICogIE9ybUNBU1Q6OiRET1VCTEUgYSBmaWVsZCBmb3IgYmlnIG51bWJlcg0KICogDQogKiAgT3JtQ0FTVDo6JERBVEUgYSBmaWVsZCBkYXRlDQogKiAgT3JtQ0FTVDo6JFRJTUUgYSBmaWVsZCB0aW1lDQogKiAgT3JtQ0FTVDo6JFRTIGEgZmllbGQgdGltZXN0YW1wDQogKiAgT3JtQ0FTVDo6JERBVEVUSU1FIGEgZmllbGQgZGF0ZVRpbWUNCiAqICBPcm1DQVNUOjokREFURVRJTUUgYSBmaWVsZCBVVUlEDQogKg0KICogIE9ybUNBU1Q6OiROT05FIGEgVHJhbnNpYW50IGZpZWxkIDogd29uJ3QgYmUgcGVyc2lzdCBpbnRvIGRhdGFiYXNlDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KKi8NCmNsYXNzIE9ybUNBU1QNCnsNCglwdWJsaWMgc3RhdGljICRTVFJJTkcgPSAwOw0KCXB1YmxpYyBzdGF0aWMgJEJVRkZFUiA9IDE7DQoJDQoJcHVibGljIHN0YXRpYyAkSU5URUdFUiA9IDI7DQoJcHVibGljIHN0YXRpYyAkTlVNRVJJQyA9IDM7DQoJcHVibGljIHN0YXRpYyAkRE9VQkxFID0gNDsNCgkNCglwdWJsaWMgc3RhdGljICREQVRFID0gNTsNCglwdWJsaWMgc3RhdGljICRUSU1FID0gNjsNCglwdWJsaWMgc3RhdGljICRUUyA9IDc7DQoJcHVibGljIHN0YXRpYyAkREFURVRJTUUgPSA4Ow0KCQ0KCXB1YmxpYyBzdGF0aWMgJFVVSUQgPSA5Ow0KCQkgIA0KCXB1YmxpYyBzdGF0aWMgJE5PTkUgPSA5OTsNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybUNvcmUNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KIA0KLyoqDQogKiBNYWluIHBhcnQgb2YgdGhlIGludGVyZmFjZSBiZXR3ZWVuIENtc21hZGVzaW1wbGUgbmF0aXZlcyBmdW5jdGlvbiBhbmQgdGhlIG5lY2Vzc2l0eSBmb3IgdGhlIE9ybSBmdW5jdGlvbnMNCiAqICAgDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtQ29yZSB7ICANCiAgICAvKioNCiAgICAqIFByb3RlY3RlZCBjb25zdHJ1Y3Rvcg0KICAgICogICAgIA0KICAgICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30NCiAgICAgIA0KICAgIC8qKg0KICAgICogdHJhbnNmb3JtcyB0aGUgZW50aXR5J3Mgc3RydWN0dXJlIGludG8gYWRvZGIgaW5mb3JtYXRpb25zIA0KICAgICogICAgICAgICANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgdGhlIGVudGl0eQ0KICAgICogQHJldHVybiB0aGUgYWRvZGIgaW5mb3JtYXRpb25zDQogICAgKi8NCglwcml2YXRlIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZXRGaWVsZHNUb0hxbChPcm1FbnRpdHkgJiRlbnRpdHkpIHsgICAgDQoJCSRocWwgPSAnJzsNCg0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHktPmdldEZpZWxkcygpOw0KDQoJCS8vRm9yIGVhY2ggRmllbGQgY29udGFpbmVkIGluIHRoZSBlbnRpdHkNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpIHsNCgkJCS8vV2UgZG9uJ3QgY3JlYXRlIHRoZSBGaWVsZCB3aGljaCBhcmUgbGlua3MgZXh0ZXJuYWxzIG9uIGFzc29jaWF0aXZlIHRhYmxlcw0KCQkJaWYoJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKSB7DQoJCQkJY29udGludWU7DQoJCQl9CQ0KCQkJDQoJCQkvL1dlIGRvbid0IGNyZWF0ZSB0aGUgdHJhbnNpZW50IEZpZWxkcyANCgkJCWlmKCRmaWVsZC0+Z2V0VHlwZSgpID09IE9ybUNBU1Q6OiROT05FKSB7DQoJCQkJY29udGludWU7DQoJCQl9DQoNCgkJCWlmKCFlbXB0eSgkaHFsKSkgew0KCQkJCSRocWwgLj0gJyAsICc7DQoJCQl9DQoNCgkJCSRocWwgLj0gJyAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgJzsNCgkJCSRzaXplID0gJGZpZWxkLT5nZXRTaXplKCkgIT0gIiIgPyAiICgiLiRmaWVsZC0+Z2V0U2l6ZSgpLiIpICIgOiAiIjsNCgkJCXN3aXRjaCgkZmllbGQtPmdldFR5cGUoKSkgew0KCQkJCWNhc2UgT3JtQ0FTVDo6JFNUUklORyA6ICRocWwgLj0gJ0MnLiRzaXplOyBicmVhazsNCg0KCQkJCWNhc2UgT3JtQ0FTVDo6JElOVEVHRVIgOiAkaHFsIC49ICdJJy4kc2l6ZTsgYnJlYWs7DQoNCgkJCQljYXNlIE9ybUNBU1Q6OiROVU1FUklDIDogJGhxbCAuPSAnTicuJHNpemU7IGJyZWFrOw0KDQoJCQkJY2FzZSBPcm1DQVNUOjokRE9VQkxFIDogJGhxbCAuPSAnSScuJHNpemU7IGJyZWFrOw0KDQoJCQkJY2FzZSBPcm1DQVNUOjokQlVGRkVSIDogJGhxbCAuPSAnWCc7IGJyZWFrOw0KDQoJCQkJY2FzZSBPcm1DQVNUOjokREFURSA6ICRocWwgLj0gJ0QnOyBicmVhazsNCg0KCQkJCWNhc2UgT3JtQ0FTVDo6JFRJTUUgOiAkaHFsIC49ICdUJzsgYnJlYWs7ICAgDQoNCgkJCQljYXNlIE9ybUNBU1Q6OiRVVUlEIDogJGhxbCAuPSAnQyAoMzYpICc7IGJyZWFrOyAgIA0KDQoJCQkJY2FzZSBPcm1DQVNUOjokVFMgOiAkaHFsIC49ICdJICgxMCkgJzsgYnJlYWs7IC8vd29ya2Fyb3VuZCBmb3IgdGhlIHJlYWwgdGltZXN0YW1wIG1pc3NpbmcgaW4gQURPREJMSVRFDQoNCgkJCQljYXNlIE9ybUNBU1Q6OiREQVRFVElNRSA6ICRocWwgLj0gQ01TX0FET0RCX0RUOyBicmVhazsgICANCgkJCX0NCgkJCQ0KCQkJLy9NYW5hZ2UgdGhlIGRlZmF1bHQgdmFsdWUNCgkJCWlmKCRmaWVsZC0+Z2V0RGVmYXVsdFZhbHVlKCkgIT0gbnVsbCl7DQoJCQkJaWYoJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JFNUUklORyB8fCAkZmllbGQtPmdldFR5cGUoKSA9PSBPcm1DQVNUOjokQlVGRkVSKSB7DQoJCQkJCSRocWwgLj0gIiAgREVGQVVMVCAnIi5zdHJfcmVwbGFjZSgiJyIsICInJyIsJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKSkuIicgIjsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkaHFsIC49ICIgIERFRkFVTFQgIi4kZmllbGQtPmdldERlZmF1bHRWYWx1ZSgpLiIgIjsNCgkJCQl9DQoJCQkJDQoJCQl9DQoNCgkJCWlmKCRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpIHsNCgkJCQlpZigkZW50aXR5LT5pc0F1dG9pbmNyZW1lbnQoKSkgew0KCQkJCQkkaHFsIC49ICcgS0VZIEFVVE8nOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRocWwgLj0gJyBLRVkgJzsNCgkJCQl9DQoJCQl9DQoJCQkJDQoJCX0NCgkNCgkJT3JtVHJhY2U6OmluZm8oJGhxbCk7DQoNCgkJcmV0dXJuICRocWw7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogQ3JlYXRlIGEgdGFibGUgaW50byBEYXRhYmFzZSBmcm9tIHRoZSBzdHJ1Y3R1cmUgb2YgYW4gT3JtRW50aXR5DQogICAgKiAgV2lsbCBhbHNvIGNyZWF0ZSB0aGUgc2VxdWVuY2UgaWYgaXQncyBuZWVkZWQNCiAgICAqICANCiAgICAqICAgZXhhbXBsZSB3aXRoIGEgQ3VzdG9tZXIgZW50aXR5IDogDQogICAgKiA8Y29kZT4NCiAgICAqIA0KICAgICogY2xhc3MgQ3VzdG9tZXIgZXh0ZW5kcyBPcm1FbnRpdHkNCiAgICAqIHsNCiAgICAqICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogICAgKiAgICB7DQogICAgKiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsNCiAgICAqICAgICAgICANCiAgICAqICAgICAgICAkdGhpcy0+YWRkKG5ldyBPcm1GaWVsZCgnY3VzdG9tZXJfaWQnICANCgkqCQkJLCBPcm1DQVNUOjokSU5URUdFUg0KCSoJCQksIG51bGwNCgkqCQkJLCBudWxsDQoJKgkJCSwgT3JtS0VZOjokUEsgDQoJKgkJCSkpOw0KICAgICogDQogICAgKiAgICAgICAgJHRoaXMtPmFkZChuZXcgT3JtRmllbGQoJ25hbWUnDQogICAgKiAgICAgICAgCSwgT3JtQ0FTVDo6JFNUUklORyANCiAgICAqICAgICAgICAJLCAzMg0KICAgICogICAgICAgIAkpKTsNCiAgICAqIA0KICAgICogICAgICAgICR0aGlzLT5hZGQobmV3IE9ybUZpZWxkKCdsYXN0bmFtZScNCiAgICAqICAgICAgICAJLCBPcm1DQVNUOjokU1RSSU5HDQogICAgKiAgICAgICAgCSwgMzINCgkqCQkJLCB0cnVlICAvLyBJcyBudWxsYWJsZQ0KICAgICogICAgICAgIAkpKTsNCiAgICAqICAgIH0NCiAgICAqIH0NCiAgICAqIDwvY29kZT4NCiAgICAqIA0KICAgICogIFRoZSBiZXN0IHdheSB0byBjcmVhdGUgaXRzIHRhYmxlIGludG8gdGhlIGRhdGFiYXNlIDogDQogICAgKiANCiAgICAqIDxjb2RlPg0KICAgICogICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsNCiAgICAqICAgT3JtQ29yZTo6Y3JlYXRlVGFibGUoJGN1c3RvbWVyKTsNCiAgICAqIDwvY29kZT4NCiAgICAqIA0KICAgICogIFRoZSBmdW5jdGlvbiB3aWxsIGFsc28gdHJ5IHRvIHBvcHVsYXRlIHRoZSB0YWJsZSB3aXRoIGEgY2FsbCB0byB0aGUgZnVuY3Rpb24gaW5pdFRhYmxlKCkgaWYgaXQncyBkZWZpbmUgaW50byB0aGUgZW50aXR5IGNsYXNzLg0KICAgICogDQoJKiBAcGFyYW0gT3JtIHRoZSBtb2R1bGUgd2hpY2ggZXh0ZW5kcyB0aGUgT3JtIG1vZHVsZQ0KICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGNyZWF0ZVRhYmxlKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtKSB7DQoJDQoJCSRocWwgPSBPcm1Db3JlOjpnZXRGaWVsZHNUb0hxbCgkZW50aXR5UGFyYW0pOw0KCQkkcmVzdWx0ID0gT3JtREI6OmNyZWF0ZVRhYmxlKCRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCksICRocWwpOw0KCQkJCQ0KCQkvL0lmIG5lY2Vzc2FyeSwgaXQgd2lsbCBjcmVhdGUgYSBzZXF1ZW5jZSBvbiB0aGUgdGFibGUuDQoJCWlmKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpICE9IG51bGwpew0KCQkJT3JtREI6OmNyZWF0ZVNlcXVlbmNlKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsNCgkJfQ0KCQkNCgkJLy9XZSBtYW5hZ2UgdGhlICgidW5pcXVlIikgaW5kZXhlcw0KCQkkaW5kZXhlcyA9ICRlbnRpdHlQYXJhbS0+Z2V0SW5kZXhlcygpOw0KDQoJCS8vRm9yIGVhY2ggRmllbGQgY29udGFpbmVkIGluIHRoZSBlbnRpdHkNCgkJZm9yZWFjaCgkaW5kZXhlcyBhcyAkaW5kZXgpIHsNCgkJCSRyZXN1bHQgPSBPcm1EQjo6Y3JlYXRlSW5kZXgoJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKSwgJGluZGV4WydmaWVsZHMnXSwgJGluZGV4Wyd1bmlxdWUnXSk7DQoJCX0NCg0KCQkvL1dlIGluaXRpYXRlIHRoZSB0YWJsZS4NCgkJJGVudGl0eVBhcmFtLT5pbml0VGFibGUoKTsNCgl9DQogICAgDQogICAgLyoqDQogICAgKiBEcm9wIHRoZSB0YWJsZSBmb3IgdGhlIE9ybUVudGl0eSBpbiBwYXJhbWV0ZXJzDQogICAgKiAgV2lsbCBhbHNvIGRyb3AgdGhlIHNlcXVlbmNlIGlmIGl0J3MgbmVlZGVkDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBkcm9wVGFibGUoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIHsNCg0KCQlPcm1EQjo6ZHJvcFRhYmxlKCRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkpOw0KDQoJCS8vSWYgbmVjZXNzYXJ5LCBpdCB3aWxsIGRlbGV0ZSBhIHNlcXVlbmNlIG9uIHRoZSB0YWJsZS4NCgkJaWYoJGVudGl0eVBhcmFtLT5nZXRTZXFuYW1lKCkgIT0gbnVsbCl7DQoJCQlPcm1EQjo6ZHJvcFNlcXVlbmNlKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsNCgkJfQ0KCX0gIA0KICANCiAgICAvKioNCiAgICAqIFdpbGwgZWRpdCB0aGUgdGFibGUgb2YgdGhlIE9ybUVudGl0eSBpbiBwYXJhbWV0ZXJzIHdpdGggdGhlIFNRTCBxdWVyeSBpbiBwYXJhbWV0ZXJzDQogICAgKiANCiAgICAqICAgZXhhbXBsZSA6IGlmIHlvdSBuZWVkIHRvIGRvIA0KICAgICogDQogICAgKiA8Y29kZT4gICAgICAgIA0KICAgICogICBBTFRFUiBUQUJMRSBgIHRhYmxlIG9mIHRoZSBDdXN0b21lciBlbnRpdHkgYCBBREQgYG5ld0NvbHVtbmAgSU5UIE5PVCBOVUxMIA0KICAgICogICBBTFRFUiBUQUJMRSBgIHRhYmxlIG9mIHRoZSBDdXN0b21lciBlbnRpdHkgYCBEUk9QIGBvbGRDb2x1bW5gIA0KICAgICogPC9jb2RlPg0KICAgICogDQogICAgKiAgdGhlIGNvZGUgbXVzdCBiZSA6DQogICAgKiANCiAgICAqIDxjb2RlPg0KICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiAgICAgICBPcm1Db3JlOjphbHRlclRhYmxlKCRjdXN0b21lciwgIkFERCBgbmV3Q29sdW1uYCBJTlQgTk9UIE5VTEwiKTsNCiAgICAqICAgICAgIE9ybUNvcmU6OmFsdGVyVGFibGUoJGN1c3RvbWVyLCAiRFJPUCBgb2xkQ29sdW1uYCIpOw0KICAgICogPC9jb2RlPg0KICAgICogICANCiAgICAqIA0KICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBTUUwgcXVlcnkNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gYWx0ZXJUYWJsZShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJHNxbCkgewkNCgkJJHF1ZXJ5QWx0ZXIgPSAiQUxURVIgVEFCTEUgIi4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLiIgIi4kc3FsOyAgICANCgkJDQoJCS8vRXhlY3V0aW9uDQoJCSRyZXN1bHQgPSBPcm1EYjo6ZXhlY3V0ZSgkcXVlcnlBbHRlciwNCgkJCQkJCQkJCW51bGwsDQoJCQkJCQkJCQkiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIE9ybUNvcmU6OmFsdGVyVGFibGUoT3JtRW50aXR5ICZ7JGVudGl0eVBhcmFtLT5nZXROYW1lKCl9LCB7JHNxbH0pIik7DQoJfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIEluc2VydCBkYXRhIGludG8gZGF0YWJhc2UuDQogICAgICogDQogICAgICogRXhhbXBsZSBmb3IgYSBuZXcgQ3VzdG9tZXIgOiBjdXN0b21lcl9pZCwgbmFtZSwgbGFzdE5hbWUgKG9wdGlvbmFsKSANCiAgICAgKiAgIA0KICAgICAqIDxjb2RlPg0KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICAqICAgICAgIA0KICAgICAqICAgICAgICRjdXN0b21lci0+c2V0KCduYW1lJywnRHVyYW50Jyk7DQogICAgICogICAgICAgJGN1c3RvbWVyLT5zZXQoJ2xhc3ROYW1lJz0+J0pvaG4nKTsNCiAgICAgKiANCiAgICAgKiAgICAgICBPcm1Db3JlOjppbnNlcnRFbnRpdHkoJGN1c3RvbWVyKTsNCiAgICAgKiA8L2NvZGU+DQoJICoNCgkgKiBZb3UgY291bGQgYWxzbyBjb2RlIGZvciB0aGUgbGFzdCBsaW5lIDogJGN1c3RvbWVyLT5zYXZlKCk7ICBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgDQogICAgICogDQogICAgICogSW1wb3J0YW50IDogeW91IG11c3Qgbm90IHNldCB0aGUgcHJpbWFyeUtleSB2YWx1ZS4gSXQgd2lsbCBiZSBjYWxjdWxhdGUgYnkgdGhlIHN5c3RlbSBpdC1zZWxmDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KCSAqDQogICAgICogQHJldHVybiB0aGUgZW50aXR5IHNhdmVkIHdpdGggaXRzIG5ldyBuZXcgSWQgKGN1c3RvbWVyX2lkIGluIG15IGV4YW1wbGUpDQogICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBpbnNlcnRFbnRpdHkoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIHsNCg0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoJCSR2YWx1ZXMgPSAkZW50aXR5UGFyYW0tPmdldFZhbHVlcygpOw0KCQkkaW5kZXhlcyA9ICRlbnRpdHlQYXJhbS0+Z2V0SW5kZXhlcygpOw0KDQoJCSRxdWVyeUluc2VydCA9ICdJTlNFUlQgSU5UTyAnLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuJyAoJXMpIHZhbHVlcyAoJXMpJzsNCg0KCQkkc3RyMSA9ICIiOw0KCQkkc3RyMiA9ICIiOw0KDQoJCSRwYXJhbXMgPSBhcnJheSgpOw0KCQkJICAgDQoJCS8vQWxsIHRoZSByZXF1aXJlZCB2YWx1ZXMgbXVzdCBiZSBwcmVzZW50DQoJCWZvcmVhY2goJGxpc3RlRmllbGQgYXMgJGZpZWxkKQ0KCQl7DQoJCQlpZigkZmllbGQtPmlzQXNzb2NpYXRlS0VZKCkpIHsNCgkJCQljb250aW51ZTsNCgkJCX0NCg0KCQkJaWYoIWVtcHR5KCRzdHIxKSkgew0KCQkJCSRzdHIxIC49ICcsJzsNCgkJCQkkc3RyMiAuPSAnLCc7DQoJCQl9DQoJCQkkc3RyMSAuPSAnICcuJGZpZWxkLT5nZXROYW1lKCkuJyAnOw0KCQkJJHN0cjIgLj0gJz8nOw0KCQkJDQoJCQlpZigkZmllbGQtPmlzUHJpbWFyeUtFWSgpKSB7DQoJCQkJaWYoIWVtcHR5KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSkgew0KCQkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCdQcmltYXJ5IEtleSAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgY2FuXCd0IGJlIHNldHRlZCBkdXJpbmcgaW5zZXJ0IG9wZXJhdGlvbiBmb3IgT3JtRW50aXR5Jy4kZW50aXR5UGFyYW0tPmdldE5hbWUoKSk7DQoJCQkJfSBlbHNlIGlmKCEkZW50aXR5UGFyYW0tPmlzQXV0b2luY3JlbWVudCgpKXsNCgkJCQkJJG5ld0lkID0gT3JtREI6OmdlbklEKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsNCgkJCQkJJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0gPSAkbmV3SWQ7DQoJCQkJCSRlbnRpdHlQYXJhbS0+c2V0KCRmaWVsZC0+Z2V0TmFtZSgpLCAkbmV3SWQpOw0KCQkJCX0gZWxzZXsNCgkJCQkJJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0gPSAwOw0KCQkJCQkkZW50aXR5UGFyYW0tPnNldCgkZmllbGQtPmdldE5hbWUoKSwgMCk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkvL0VtcHR5IEZpZWxkIHRoYXQgc2hvdWxkbid0IGJlICENCgkJCWlmKCEkZmllbGQtPmlzTnVsbGFibGUoKSAmJiAhaXNzZXQoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKSB7DQoJCQkJLy9FeGNlcHRpb24gOiBpZiB0aGUgZmllbGQgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgd2Ugc2V0IGl0IG1hbnVhbGx5DQoJCQkJaWYoJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKSAhPSBudWxsKXsNCgkJCQkJJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0gPSAkZmllbGQtPmdldERlZmF1bHRWYWx1ZSgpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ3RoZSBmaWVsZCAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgb2YgT3JtRW50aXR5ICAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgY2FuXCd0IGJlIG51bGwnKTsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCS8vIENvbnRyb2wgVVVJRCB0eXBlDQoJCQlpZigkZmllbGQtPmdldFR5cGUoKSA9PSBPcm1DQVNUOjokVVVJRCAmJiAhZW1wdHkoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKXsNCgkJCQkkcGF0dGVybiA9ICIvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pIjsNCgkJCQlpZighcHJlZ19tYXRjaCgkcGF0dGVybiwgJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKXsNCgkJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigndGhlIGZpZWxkICcuJGZpZWxkLT5nZXROYW1lKCkuJyBvZiBPcm1FbnRpdHkgICcuJGVudGl0eVBhcmFtLT5nZXROYW1lKCkuJyBkb2VzblwndCBtYXRjaCB0aGUgVVVJRCBwYXR0ZXJuIDogJy4kcGF0dGVybik7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCSR2YWwgPSBudWxsOw0KCQkJaWYoaXNzZXQoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKQ0KCQkJew0KCQkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldLCAkZmllbGQtPmdldFR5cGUoKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRwYXJhbXNbXSA9IG51bGw7DQoJCQl9DQoJCX0NCgkJDQoJCS8vY29udHJvbCB1bmlxdWVuZXNzIG9uIHVuaXF1ZSBGaWVsZA0KCQlmb3JlYWNoKCRpbmRleGVzIGFzICRpbmRleCl7DQoJCQlpZighJGluZGV4Wyd1bmlxdWUnXSl7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQkNCgkJCSRxdWVyeSA9ICdTRUxFQ1QgQ09VTlQoKikgRlJPTSAnLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuJyBXSEVSRSAxICc7DQoJCQkkYXJyYXlGaW5kID0gYXJyYXkoKTsNCgkJCSRtc2dFcnJvciA9ICd7JzsNCgkJCSRpc0ZpcnN0ID0gdHJ1ZTsNCgkJCWZvcmVhY2goJGluZGV4WydmaWVsZHMnXSBhcyAkZWx0KXsNCgkJCQlpZighJGlzRmlyc3Qpew0KCQkJCQkkbXNnRXJyb3IgLj0nLCc7DQoJCQkJfQ0KCQkJCWlmKGVtcHR5KCR2YWx1ZXNbJGVsdF0pKXsNCgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyBJUyBOVUxMICc7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyA9ID8gJzsNCgkJCQkJJGFycmF5RmluZFtdID0gJHZhbHVlc1skZWx0XTsNCgkJCQl9DQoJCQkJJG1zZ0Vycm9yIC49ICIgeyRlbHR9ID0geyR2YWx1ZXNbJGVsdF19ICI7DQoJCQl9DQoJCQkkcXVlcnkgLj0gJyBBTkQgJyAuICRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpIC4gJyAhPSA/ICc7DQoJCQkkYXJyYXlGaW5kW10gPSAkdmFsdWVzWyRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpXTsJCQkNCgkJCSRtc2dFcnJvciAuPSAnfSc7DQoJCQkNCgkJCS8vRXhlY3V0aW9uDQoJCQkkcmVzdWx0ID0gT3JtRGI6OmdldE9uZSgkcXVlcnksDQoJCQkJCQkJCQkkYXJyYXlGaW5kLA0KCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyB1bmljaXR5IGNvbnRyb2wgaW4gT3JtQ29yZTo6aW5zZXJ0RW50aXR5KE9ybUVudGl0eSAmeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSkiKTsNCgkJDQoJCQlpZigkcmVzdWx0ICE9IDApew0KCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFuIEVudGl0eSB7JGVudGl0eVBhcmFtLT5nZXROYW1lKCl9IHdpdGggdGhlIHNhbWUgZmllbGRzICh7JG1zZ0Vycm9yfSkgYWxyZWFkeSBleGlzdHMgaW4gZGF0YWJhc2UiKTsNCgkJCX0NCgkJfQ0KCQkNCgkJLy9FeGVjdXRpb24NCgkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKHNwcmludGYoJHF1ZXJ5SW5zZXJ0LCAkc3RyMSwgJHN0cjIpLA0KCQkJCQkJCQkJJHBhcmFtcywNCgkJCQkJCQkJCSJEYXRhYmFzZSBlcnJvciBkdXJpbmcgT3JtQ29yZTo6aW5zZXJ0RW50aXR5KE9ybUVudGl0eSAmeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSkiKTsNCgkJDQoNCgkvKglpZigkZW50aXR5UGFyYW0tPmlzSW5kZXhhYmxlKCkpIHsgIA0KCQkJT3JtSW5kZXhpbmc6OkFkZFdvcmRzKCRlbnRpdHlQYXJhbS0+Z2V0TW9kdWxlTmFtZSgpLCBPcm1Db3JlOjpmaW5kQnlJZCgkZW50aXR5UGFyYW0sJGFycmF5S0VZWzBdKSk7DQoJCX0qLw0KCQkNCgkJLy9lbXB0eSBjYWNoZQ0KCQlPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKS0+Y2xlYXJDYWNoZSgpOw0KCQkNCgkJcmV0dXJuICRlbnRpdHlQYXJhbTsNCg0KCX0NCgkNCiAgICAvKioNCiAgICAgKiAgVXBkYXRlIGRhdGEgaW50byBkYXRhYmFzZS4gVGhlIHRoaXJkIHBhcmFtZXRlciBtdXN0IGZvbGxvdyB0aGlzIHNjaGVtZQ0KICAgICAqIA0KICAgICAqIEV4YW1wbGUgZm9yIGEgbmV3IEN1c3RvbWVyIDogDQogICAgICogDQogICAgICogPGNvZGU+DQogICAgICogICAgICAgJG15QXJyYXkgPSBhcnJheSgpOw0KICAgICAqICAgICAgICRteUFycmF5W10gPSBhcnJheSgnY3VzdG9tZXJfaWQnPT4xLCAnbGFzdE5hbWUnPT5udWxsLCAnbmFtZSc9PidEdXBvbnQnKTsgICAgPC0tIHVwZGF0ZSBOYW1lIHZhbHVlLCBlcmFzZSBsYXN0TmFtZSB2YWx1ZSBpbiBkYXRhYmFzZQ0KICAgICAqICAgICAgICRteUFycmF5W10gPSBhcnJheSgnY3VzdG9tZXJfaWQnPT4yLCAnbmFtZSc9PidEdXJhbnQnKTsgICAgICAgICAgICAgICAgICAgICAgPC0tIHVwZGF0ZSBOYW1lIHZhbHVlDQogICAgICogICAgICAgJG15QXJyYXlbXSA9IGFycmF5KCdjdXN0b21lcl9pZCc9PjMsICdsYXN0TmFtZSc9PidKb2huJywgJ25hbWUnPT4nRG9lJyk7ICAgICA8LS0gdXBkYXRlIE5hbWUgdmFsdWUgYW5kIGxhc3ROYW1lIHZhbHVlDQogICAgICogDQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogICAgICAgDQogICAgICogICAgICAgJGN1c3RvbWVyID0gT3JtQ29yZTo6ZmluZEJ5SWQoJGN1c3RvbWVyLCAxKTsNCiAgICAgKiAgICAgICAkY3VzdG9tZXItPnNldCgnbGFzdE5hbWUnPT4nTmV3TGFzdE5hbWUnKTsNCiAgICAgKiANCiAgICAgKiAgICAgICBPcm1Db3JlOjp1cGRhdGVFbnRpdHkoJGN1c3RvbWVyKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICogCSANCiAgICAgKiBZb3UgY291bGQgYWxzbyBjb2RlIGZvciB0aGUgbGFzdCBsaW5lIDogJGN1c3RvbWVyLT5zYXZlKCk7ICBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgDQoJICoNCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCgkgKg0KCSAqIEByZXR1cm4gdGhlIGVudGl0eSBzYXZlZCB3aXRoIGl0cyBuZXcgSWQgKGN1c3RvbWVyX2lkIGluIG15IGV4YW1wbGUpDQogICAgICovCQ0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gdXBkYXRlRW50aXR5KE9ybUVudGl0eSAmJGVudGl0eVBhcmFtKSB7DQoNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOw0KCQkkdmFsdWVzID0gJGVudGl0eVBhcmFtLT5nZXRWYWx1ZXMoKTsNCgkJJGluZGV4ZXMgPSAkZW50aXR5UGFyYW0tPmdldEluZGV4ZXMoKTsNCg0KCQkkc3RyID0gIiI7DQoJCSR3aGVyZSA9ICcnOw0KCQkkcGFyYW1zID0gYXJyYXkoKTsNCgkJJGhhc0tleSA9IGZhbHNlOw0KCQkgIA0KCQkvL0FsbCB0aGUgcmVxdWlyZWQgdmFsdWVzIG11c3QgYmUgcHJlc2VudA0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkgew0KCQkNCgkJCS8vaWYgdGhlIGZpZWxkIGlzIGVtcHR5IGFuZCB3ZSBoYXZlIGEgZGVmYXVsdCB2YWx1ZSB3ZSBzZXQgaXQgbWFudWFsbHkNCgkJCWlmKGVtcHR5KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSAmJiAkZmllbGQtPmdldERlZmF1bHRWYWx1ZSgpICE9IG51bGwpew0KCQkJCSR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldID0gJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKTsNCgkJCX0gDQoJCQ0KCQkJLy9JZiBpdCdzIG5vdCBzZXQNCgkJCWlmKGVtcHR5KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSkgew0KCQkJDQoJCQkJLy9JZiBpdCdzIGEgcHJpbWFyeUtleSB3ZSB0aHJvdyBhIGV4Y2VwdGlvbg0KCQkJCWlmKCRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpIHsNCgkJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigndGhlIHByaW1hcnlLZXkgJy4kZmllbGQtPmdldE5hbWUoKS4nIGlzIG1pc3NpbmcgZm9yIHRoZSBlbnRpdHkgOiAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpKTsNCgkJCQl9DQoJCQkJDQoJCQkJLy9hbiBlbXB0eSBhc3NvY2lhdGl2ZSBmaWVsZCA6IG5vIHByb2JsZW0sIHdlIGNhbiBwYXNzDQoJCQkJaWYoJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKSB7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkNCgkJCQkvL0lmIGl0J3MgYSBubyBudWxsYWJsZSBmaWVsZCB3ZSB0aHJvdyBhIGV4Y2VwdGlvbg0KCQkJCWlmKCEkZmllbGQtPmlzTnVsbGFibGUoKSkgew0KCQkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCd0aGUgZmllbGQgJy4kZmllbGQtPmdldE5hbWUoKS4nIG9mIEVudGl0eSAgJy4kZW50aXR5UGFyYW0tPmdldE5hbWUoKS4nIGNhblwndCBiZSBudWxsJyk7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkvLyBDb250cm9sIFVVSUQgdHlwZQ0KCQkJCWlmKCRmaWVsZC0+Z2V0VHlwZSgpID09IE9ybUNBU1Q6OiRVVUlEKXsNCgkJCQkJJHBhdHRlcm4gPSAnL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaSc7DQoJCQkJCQ0KCQkJCQlpZighcHJlZ19tYXRjaCgkcGF0dGVybiwgJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKXsNCgkJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ3RoZSBmaWVsZCAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgb2YgRW50aXR5ICAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgZG9lc25cJ3QgbWF0Y2ggdGhlIFVVSUQgcGF0dGVybiA6ICcuJHBhdHRlcm4pOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCQ0KCQkJLy9JZiBpdCdzIGEgcHJpbWFyeUtleQ0KCQkJaWYoJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgew0KCQkJCSR3aGVyZSA9ICcgV0hFUkUgJy4kZmllbGQtPmdldE5hbWUoKS4nID0gPyc7DQoJCQkJJGhhc0tleSA9IHRydWU7DQoJCQkJJGtleVZhbHVlID0gJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV07DQoJCQl9DQoNCgkJCWlmKCFlbXB0eSgkc3RyKSkgew0KCQkJICAkc3RyIC49ICcsJzsNCgkJCX0NCg0KCQkJJHN0ciAuPSAnICcuJGZpZWxkLT5nZXROYW1lKCkuJyA9ID8gJzsNCg0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0sICRmaWVsZC0+Z2V0VHlwZSgpKTsNCg0KCQl9DQoJCQ0KCQkvL2NvbnRyb2wgdW5pcXVlbmVzcyBvbiB1bmlxdWUgRmllbGQNCgkJZm9yZWFjaCgkaW5kZXhlcyBhcyAkaW5kZXgpew0KCQkJaWYoISRpbmRleFsndW5pcXVlJ10pew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQkJDQoJCQkkcXVlcnkgPSAnU0VMRUNUIENPVU5UKCopIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgV0hFUkUgMSAnOw0KCQkJJGFycmF5RmluZCA9IGFycmF5KCk7DQoJCQkkbXNnRXJyb3IgPSAneyc7DQoJCQkkaXNGaXJzdCA9IHRydWU7DQoJCQlmb3JlYWNoKCRpbmRleFsnZmllbGRzJ10gYXMgJGVsdCl7DQoJCQkJaWYoISRpc0ZpcnN0KXsNCgkJCQkJJG1zZ0Vycm9yIC49JywnOw0KCQkJCX0NCgkJCQlpZihlbXB0eSgkdmFsdWVzWyRlbHRdKSl7DQoJCQkJCSRxdWVyeSAuPSAnIEFORCAnIC4gJGVsdCAuICcgSVMgTlVMTCAnOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRxdWVyeSAuPSAnIEFORCAnIC4gJGVsdCAuICcgPSA/ICc7DQoJCQkJCSRhcnJheUZpbmRbXSA9ICR2YWx1ZXNbJGVsdF07DQoJCQkJfQ0KCQkJCSRtc2dFcnJvciAuPSAiIHskZWx0fSA9IHskdmFsdWVzWyRlbHRdfSAiOw0KCQkJfQ0KCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZW50aXR5UGFyYW0tPmdldFBrKCktPmdldE5hbWUoKSAuICcgIT0gPyAnOw0KCQkJJGFycmF5RmluZFtdID0gJHZhbHVlc1skZW50aXR5UGFyYW0tPmdldFBrKCktPmdldE5hbWUoKV07CQkJDQoJCQkkbXNnRXJyb3IgLj0gJ30nOw0KCQkJDQoJCQkvL0V4ZWN1dGlvbg0KCQkJJHJlc3VsdCA9IE9ybURiOjpnZXRPbmUoJHF1ZXJ5LA0KCQkJCQkJCQkJJGFycmF5RmluZCwNCgkJCQkJCQkJCSJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdW5pY2l0eSBjb250cm9sIGluIE9ybUNvcmU6OnVwZGF0ZUVudGl0eShPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0pIik7DQoJCQ0KCQkJaWYoJHJlc3VsdCAhPSAwKXsNCgkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJhbiBFbnRpdHkgeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSB3aXRoIHRoZSBzYW1lIGZpZWxkcyAoeyRtc2dFcnJvcn0pIGFscmVhZHkgZXhpc3RzIGluIGRhdGFiYXNlIik7DQoJCQl9DQoJCX0NCg0KCQlpZigkaGFzS2V5KSB7DQoJCQkkcGFyYW1zW10gPSAka2V5VmFsdWU7DQoJCX0NCg0KCQkkcXVlcnlVcGRhdGUgPSAnVVBEQVRFICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFNFVCAnLiRzdHIuJHdoZXJlOw0KCQ0KCQkvL0V4ZWN1dGlvbg0KCQkkcmVzdWx0ID0gT3JtRGI6OmV4ZWN1dGUoJHF1ZXJ5VXBkYXRlLA0KCQkJCQkJCQkJJHBhcmFtcywNCgkJCQkJCQkJCSJEYXRhYmFzZSBlcnJvciBkdXJpbmcgT3JtQ29yZTo6dXBkYXRlRW50aXR5KE9ybUVudGl0eSAmeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSkiKTsNCgkJDQoJCS8qaWYoJGVudGl0eVBhcmFtLT5pc0luZGV4YWJsZSgpKSB7ICANCgkJCU9ybUluZGV4aW5nOjpVcGRhdGVXb3JkcygkZW50aXR5UGFyYW0tPmdldE1vZHVsZU5hbWUoKSwgJGVudGl0eVBhcmFtKTsNCgkJfSovDQoJCQ0KCQkvL2VtcHR5IGNhY2hlDQoJCU9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5jbGVhckNhY2hlKCk7DQoJCQ0KCQlyZXR1cm4gJGVudGl0eVBhcmFtOw0KCX0NCiAgDQogICAgLyoqDQogICAgKiBEZWxldGUgaW5mb3JtYXRpb24gaW50byBkYXRhYmFzZQ0KICAgICogICANCiAgICAqIEV4YW1wbGUgZm9yIGEgc2luZ2xlIGRlbGV0aW9uIDogDQogICAgKiANCiAgICAqIDxjb2RlPg0KICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiANCiAgICAqICAgICAgIE9ybUNvcmU6OmRlbGV0ZUJ5SWRzKCRjdXN0b21lciwgYXJyYXkoMSk7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICBFeGFtcGxlIGZvciBtdWx0aXBsZSBkZWxldGlvbiA6IA0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAgICAgICRteUFycmF5ID0gYXJyYXkoKTsNCiAgICAqICAgICAgICRteUFycmF5W10gPSAxOw0KICAgICogICAgICAgJG15QXJyYXlbXSA9IDI7DQogICAgKiAgICAgICAkbXlBcnJheVtdID0gMzsNCiAgICAqIA0KICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiANCiAgICAqICAgICAgIE9ybUNvcmU6OmRlbGV0ZUJ5SWRzKCRjdXN0b21lciwgJG15QXJyYXkpOw0KICAgICogPC9jb2RlPg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgICANCiAgICAqIEBwYXJhbSBhcnJheSBhbGwgdGhlIGlkcyB0byBkZWxldGUgKCRjdXN0b21lcl9pZCBpbiBteSBleGFtcGxlKQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBkZWxldGVCeUlkcyhPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGlkcykgew0KDQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCg0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkNCgkJew0KCQkgIGlmKCEkZmllbGQtPmlzUHJpbWFyeUtFWSgpKQ0KCQkgIHsgDQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgJHR5cGUgPSAkZmllbGQtPmdldFR5cGUoKTsNCgkJICAkbmFtZSA9ICRmaWVsZC0+Z2V0TmFtZSgpOw0KCQl9ICANCg0KCQkkd2hlcmUgPSAnJzsNCgkJZm9yZWFjaCgkaWRzIGFzICRzaWQpDQoJCXsNCgkJICBpZighZW1wdHkoJHdoZXJlKSkNCgkJICB7DQoJCQkkd2hlcmUgLj0gJyBPUiAnOw0KCQkgIH0NCgkJICANCgkJICAkd2hlcmUgLj0gJG5hbWUuJyA9ID8nOw0KCQkgICRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRzaWQsICR0eXBlKTsgIA0KCQl9DQoNCg0KCQkkcXVlcnlEZWxldGUgPSAnREVMRVRFIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgV0hFUkUgJy4kd2hlcmU7DQoNCgkJLy9FeGVjdXRpb24NCgkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeURlbGV0ZSwNCgkJCQkJCQkJCSRwYXJhbXMsDQoJCQkJCQkJCQkiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIE9ybUNvcmU6OmRlbGV0ZUVudGl0eShPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0pIik7DQoJCQkJCQkJCQkNCgkJDQoNCgkJaWYoJGVudGl0eVBhcmFtLT5pc0luZGV4YWJsZSgpKQ0KCQl7ICANCgkJICAvLyAkbW9kb3BzID0gY21zbXMoKS0+R2V0TW9kdWxlT3BlcmF0aW9ucygpOw0KCQkgIC8vIGlmKG1ldGhvZF9leGlzdHMoJG1vZG9wcywiR2V0U2VhcmNoTW9kdWxlIikpDQoJCSAgLy8gew0KCQkJLy8gT3JtSW5kZXhpbmc6OnNldFNlYXJjaCgkbW9kb3BzLT5HZXRTZWFyY2hNb2R1bGUoKSk7DQoJCSAgLy8gfSBlbHNlDQoJCSAgLy8gew0KCQkJLy8gZGllKCJrbyIpOw0KCQkgIC8vIH0NCgkJICBmb3JlYWNoKCRpZHMgYXMgJHNpZCkNCgkJICB7DQoJCQlPcm1JbmRleGluZzo6RGVsZXRlV29yZHMoJGVudGl0eVBhcmFtLT5nZXRNb2R1bGVOYW1lKCksICRlbnRpdHlQYXJhbSwgJHNpZCk7DQoJCSAgfQ0KCQkgIA0KCQl9DQoJCQ0KCQkvL2VtcHR5IGNhY2hlDQoJCU9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5jbGVhckNhY2hlKCk7DQoJfQ0KICAgDQogICAgLyoqDQogICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgZnJvbSB0aGUgdGFibGUgb2YgdGhlIGVudGl0eSBpbiBQYXJhbWV0ZXJzDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgICANCgkqIA0KICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBmcm9tIHRoZSB0YWJsZSAgIA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjb3VudEFsbChPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgew0KDQoJCSRxdWVyeVNlbGVjdCA9ICdTRUxFQ1QgY291bnQoKikgRlJPTSAnLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCk7DQoJCQ0KCQkvL0V4ZWN1dGlvbg0KCQkkcmVzdWx0ID0gT3JtRGI6OmdldE9uZSgkcXVlcnlTZWxlY3QsDQoJCQkJCQkJCQludWxsLA0KCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjpjb3VudEFsbChPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0pIik7DQoJCQ0KCQlyZXR1cm4gJHJlc3VsdDsNCgl9DQogIA0KICAgIC8qKg0KICAgICogUmV0dXJucyBhbGwgdGhlIG9jY3VycmVuY2VzIGZyb20gdGhlIHRhYmxlIG9mIHRoZSBlbnRpdHkgaW4gUGFyYW1ldGVycw0KICAgICogDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkgIA0KCSoNCiAgICAqIEByZXR1cm4gYXJyYXk8T3JtRW50aXR5PiBsaXN0IG9mIEVudGl0aWVzIGZvdW5kDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGZpbmRBbGwoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sIE9ybU9yZGVyQnkgJiRvcmRlckJ5PW51bGwsIE9ybUxpbWl0ICYkbGltaXQgPSBudWxsKSB7DQoNCgkJJHF1ZXJ5U2VsZWN0ID0gJ1NFTEVDVCAqIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOw0KDQoJCS8vIE9yZGVyIEJ5IA0KCQlpZigkb3JkZXJCeSAhPSBudWxsKSB7DQoJCQkkcXVlcnlTZWxlY3QgLj0gJG9yZGVyQnktPmdldE9yZGVyQnkoKTsNCgkJfQ0KCQllbHNlIGlmKCRlbnRpdHlQYXJhbS0+Z2V0RGVmYXVsdE9yZGVyQnkoKSAhPSBudWxsKSB7DQoJCQkkcXVlcnlTZWxlY3QgLj0gJGVudGl0eVBhcmFtLT5nZXREZWZhdWx0T3JkZXJCeSgpLT5nZXRPcmRlckJ5KCk7DQoJCX0NCgkJCQkNCgkJaWYoJGxpbWl0ICE9IG51bGwpIHsNCgkJCSRxdWVyeVNlbGVjdCAuPSAkbGltaXQtPmdldExpbWl0KCk7DQoJCX0NCgkJDQoJCS8vSWYgaXQncyBhbHJlYWR5IGluIHRoZSBjYWNoZSwgd2UgcmV0dXJuIHRoZSByZXN1bHQNCgkJaWYoT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPmlzQ2FjaGUoJHF1ZXJ5U2VsZWN0KSkgew0KCQkJJGVudGl0aWVzID0gT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPmdldENhY2hlKCRxdWVyeVNlbGVjdCk7DQoJCX0gZWxzZSB7DQoJCQkvL0V4ZWN1dGlvbg0KCQkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeVNlbGVjdCwNCgkJCQkJCQkJCW51bGwsDQoJCQkJCQkJCQkiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIE9ybUNvcmU6OmZpbmRBbGwoT3JtRW50aXR5ICZ7JGVudGl0eVBhcmFtLT5nZXROYW1lKCl9KSIpOw0KDQoJCQkkZW50aXRpZXMgPSBPcm1Db3JlOjpfcHJvY2Vzc0FycmF5RW50aXR5KCRlbnRpdHlQYXJhbSwgJHJlc3VsdCk7DQoJCQkNCgkJCS8vV2UgcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hlIGJlZm9yZSByZXR1cm4gaXQNCgkJCU9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5zZXRDYWNoZSgkcXVlcnlTZWxlY3QsIG51bGwsICRlbnRpdGllcyk7DQoJCX0NCgkJDQoJCXJldHVybiBhcnJheV92YWx1ZXMoJGVudGl0aWVzKTsNCgl9DQoJDQoJLyoqDQoJICogSW5uZXIgZnVuY3Rpb24gdG8gZmFjdG9yaXplIHNvbWUgY29kZSBmb3IgZWFjaCAiZmluZCoiIGZ1bmN0aW9ucw0KCSAqICBJdCB3aWxsIHJldHJpZXZlIGFsbCB0aGUgaW5mb3JtYXRpb25zIG9uIHRoZSBBSydzIEZpZWxkDQoJICoNCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkgIA0KCSAqIEBwYXJhbSByZXN1bHRRdWVyeSB0aGUgcmV0dXJuZWQgdmFsdWUgb2Ygc3FsIGV4ZWN1dGlvbg0KCSAqDQogICAgICogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IGxpc3Qgb2YgRW50aXRpZXMgcG9wdWxhdGUgd2l0aCBhbGwgdGhlIGluZm9ybWF0aW9ucyBvbiBBSydzIEZpZWxkDQoJICoqLw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIF9wcm9jZXNzQXJyYXlFbnRpdHkoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sICRyZXN1bHRRdWVyeSwgT3JtT3JkZXJCeSAmJG9yZGVyQnk9bnVsbCkgew0KDQoJCSRlbnRpdHlzID0gYXJyYXkoKTsNCgkJd2hpbGUgKCRyb3cgPSAkcmVzdWx0UXVlcnktPkZldGNoUm93KCkpIHsNCgkJICAkYW5FbnRpdHkgPSBPcm1Db3JlOjpyb3dUb0VudGl0eSgkZW50aXR5UGFyYW0sICRyb3cpOw0KCQkgICRlbnRpdHlzWyRhbkVudGl0eS0+Z2V0KCRhbkVudGl0eS0+Z2V0UGsoKS0+Z2V0TmFtZSgpKV0gPSAkYW5FbnRpdHk7DQoJCX0NCgkJCQkNCgkJLy9UZXN0IHRoZSBwcmVzZW5jZSBvZiAkQUsNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOw0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkgew0KCQkgIGlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgew0KCQkJDQoJCQkvL0luaXRpYXRlIHRoZSBmaWVsZCBhc3NvY2lhdGUgd2l0aCBhbiBlbXB0eSBhcnJheS4NCgkJCWZvcmVhY2goYXJyYXlfa2V5cygkZW50aXR5cykgYXMgJGtleSl7DQoJCQkJJGVudGl0eXNbJGtleV0tPnNldCgkZmllbGQtPmdldE5hbWUoKSwgYXJyYXkoKSk7DQoJCQl9DQoJCSAgDQoJCQlsaXN0KCRlbnRpdHlBc3NvY05hbWUsICRmaWVsZEFzc29jaWF0ZU5hbWUpID0gZXhwbG9kZSgiLiIsICRmaWVsZC0+Z2V0S0VZTmFtZSgpKTsNCgkJCSRlbnRpdHlBc3NvYyA9IG5ldyAkZW50aXR5QXNzb2NOYW1lKCk7DQoJCQkNCgkJCSRxdWVyeUFkZCA9ICdTRUxFQ1QgKiBGUk9NICcuJGVudGl0eUFzc29jLT5nZXREYm5hbWUoKS4nIFdIRVJFICcuJGZpZWxkQXNzb2NpYXRlTmFtZS4nIElOICgnLmltcGxvZGUoJywnLGFycmF5X2tleXMoJGVudGl0eXMpKS4nKSc7DQoJCQ0KCQkJLy8gT3JkZXIgQnkgDQoJCQlpZigkb3JkZXJCeSAhPSBudWxsKSB7DQoJCQkJJHF1ZXJ5QWRkIC49ICRvcmRlckJ5LT5nZXRPcmRlckJ5KCk7DQoJCQl9DQoJCQllbHNlIGlmKCRlbnRpdHlQYXJhbS0+Z2V0RGVmYXVsdE9yZGVyQnkoKSAhPSBudWxsKSB7DQoJCQkJJHF1ZXJ5QWRkIC49ICRlbnRpdHlQYXJhbS0+Z2V0RGVmYXVsdE9yZGVyQnkoKS0+Z2V0T3JkZXJCeSgpOw0KCQkJfQ0KCQkJDQoJCQkvL0V4ZWN1dGlvbg0KCQkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeUFkZCwNCgkJCQkJCQkJCW51bGwsDQoJCQkJCQkJCQkiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIHJlcXVlc3QgdG8gZ2V0IGFzc29jaWF0aXZlIGVudGl0eSAkZW50aXR5QXNzb2NOYW1lIik7DQoJCQkNCgkJCXdoaWxlICgkcm93QXNzb2NpYXRlID0gJHJlc3VsdC0+RmV0Y2hSb3coKSkgew0KCQkJCSRhcnJheUlkRW50aXRpZXNEZXN0ID0gJGVudGl0eXNbJHJvd0Fzc29jaWF0ZVskZmllbGRBc3NvY2lhdGVOYW1lXV0tPmdldCgkZmllbGQtPmdldE5hbWUoKSk7DQoJCQkJJGFycmF5SWRFbnRpdGllc0Rlc3RbXSA9ICRyb3dBc3NvY2lhdGVbJGVudGl0eUFzc29jLT5nZXRQaygpLT5nZXROYW1lKCldOw0KCQkJCSRlbnRpdHlzWyRyb3dBc3NvY2lhdGVbJGZpZWxkQXNzb2NpYXRlTmFtZV1dLT5zZXQoJGZpZWxkLT5nZXROYW1lKCksJGFycmF5SWRFbnRpdGllc0Rlc3QpOw0KCQkJfQ0KCQkgIH0gDQoJCX0NCgkJDQoJCXJldHVybiAkZW50aXR5czsNCgl9DQogIA0KCS8qKg0KCSogUmV0dXJuIGEgT3JtRW50aXR5IGZyb20gaXRzIElkDQoJKiANCgkqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgDQoJKiBAcGFyYW0gaW50IHRoZSBJZCB0byBmaW5kDQoJKiBAcmV0dXJuIE9ybUVudGl0eSB0aGUgT3JtRW50aXR5IGZvdW5kIG9yIE5VTEwNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZmluZEJ5SWQoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sICRpZCkgew0KCQkkbGlzdGUgPSBPcm1Db3JlOjpmaW5kQnlJZHMoJGVudGl0eVBhcmFtLCBhcnJheSgkaWQpKTsNCgkJDQoJCWlmKCFpc3NldCgkbGlzdGVbMF0pKXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJGxpc3RlWzBdOw0KCX0NCiAgDQoJLyoqDQoJKiBSZXR1cm4gRW50aXRpZXMgZnJvbSB0aGVpciBJZHMNCgkqIA0KCSogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICANCgkqIEBwYXJhbSBhcnJheSBsaXN0IG9mIHRoZSBJZHMgdG8gZmluZA0KCSoNCgkqIEByZXR1cm4gYXJyYXk8T3JtRW50aXR5PiBsaXN0IG9mIEVudGl0aWVzIGZvdW5kDQoJKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGZpbmRCeUlkcyhPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGlkcywgT3JtT3JkZXJCeSAmJG9yZGVyQnk9bnVsbCkgew0KCQlpZihjb3VudCgkaWRzKSA9PSAwKQ0KCQkgIHJldHVybiBhcnJheSgpOw0KCQkJDQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCgkJJHdoZXJlID0gIiI7DQoJCQkNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpIHsNCgkJICBpZighJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgeyANCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJICANCgkJICBmb3JlYWNoKCRpZHMgYXMgJGlkKSB7DQoJCQlpZighZW1wdHkoJHdoZXJlKSkgew0KCQkJICAkd2hlcmUgLj0gJyBPUiAnOw0KCQkJfQ0KCQkJCSAgDQoJCQkkd2hlcmUgLj0gJGZpZWxkLT5nZXROYW1lKCkuJyA9ID8nOw0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGlkLCAkZmllbGQtPmdldFR5cGUoKSk7DQoJCSAgfQ0KCQl9DQoNCgkJJHF1ZXJ5U2VsZWN0ID0gJ1NFTEVDVCAqIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgV0hFUkUgJy4kd2hlcmU7DQoJCQ0KCQkvLyBPcmRlciBCeSANCgkJaWYoJG9yZGVyQnkgIT0gbnVsbCkgew0KCQkJJHF1ZXJ5U2VsZWN0IC49ICRvcmRlckJ5LT5nZXRPcmRlckJ5KCk7DQoJCX0NCgkJZWxzZSBpZigkZW50aXR5UGFyYW0tPmdldERlZmF1bHRPcmRlckJ5KCkgIT0gbnVsbCkgew0KCQkJJHF1ZXJ5U2VsZWN0IC49ICRlbnRpdHlQYXJhbS0+Z2V0RGVmYXVsdE9yZGVyQnkoKS0+Z2V0T3JkZXJCeSgpOw0KCQl9DQoJCQ0KCQkvL0lmIGl0J3MgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIHdlIHJldHVybiB0aGUgcmVzdWx0DQoJCWlmKE9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5pc0NhY2hlKCRxdWVyeVNlbGVjdCwgJHBhcmFtcykpIHsNCgkJICAkZW50aXRpZXMgPSBPcm1DYWNoZTo6Z2V0SW5zdGFuY2UoKS0+Z2V0Q2FjaGUoJHF1ZXJ5U2VsZWN0LCRwYXJhbXMpOw0KCQl9IGVsc2Ugew0KCQkJDQoJCQkvL0V4ZWN1dGlvbg0KCQkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeVNlbGVjdCwNCgkJCQkJCQkJCSRwYXJhbXMsDQoJCQkJCQkJCQkiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIE9ybUNvcmU6OmZpbmRCeUlkcyhPcm1FbnRpdHkgJnskZW50aXR5UGFyYW0tPmdldE5hbWUoKX0sICIucHJpbnRfcigkaWRzLCB0cnVlKS4iKSIpOw0KCQkNCgkJCSRlbnRpdGllcyA9IE9ybUNvcmU6Ol9wcm9jZXNzQXJyYXlFbnRpdHkoJGVudGl0eVBhcmFtLCAkcmVzdWx0KTsNCgkJCQ0KCQkJLy9XZSBwdXNoIHRoZSByZXN1bHQgaW50byB0aGUgY2FjaGUgYmVmb3JlIHJldHVybiBpdA0KCQkJT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPnNldENhY2hlKCRxdWVyeVNlbGVjdCwgbnVsbCwgJGVudGl0aWVzKTsNCgkJfQ0KDQoJCXJldHVybiBhcnJheV92YWx1ZXMoJGVudGl0aWVzKTsNCgl9DQogIA0KICAgIC8qKg0KICAgICAqIEFsbG93IHNlYXJjaCBhIGxpc3Qgb2YgT3JtRW50aXR5IGZyb20gYSBsaXN0IG9mIE9ybUNyaXRlcmlhDQogICAgICogDQogICAgICogRXhhbXBsZSA6IGZpbmQgdGhlIGN1c3RvbWVycyB3aXRoIGxhc3ROYW1lICdSb2dlcicgKG5vIGNhc3NlIHNlbnNpdGl2ZSkNCiAgICAgKiANCiAgICAgKiAgPGNvZGU+DQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogDQogICAgICogICAgICAgJGV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOw0KICAgICAqICAgICAgICRleGFtcGxlLT5hZGRDcml0ZXJpYSgnbGFzdE5hbWUnLCBPcm1UeXBlQ3JpdGVyaWE6OiRFUSwgYXJyYXkoJ3JvZ2VyJyksIHRydWUpOw0KICAgICAqIA0KICAgICAqICAgICAgIE9ybUNvcmU6OmZpbmRCeUV4YW1wbGUoJGN1c3RvbWVyLCAkZXhhbXBsZSk7DQogICAgICogPC9jb2RlPg0KICAgICAqIA0KICAgICAqICBFeGFtcGxlIDogZmluZCB0aGUgY3VzdG9tZXJzIHdpdGggSWQgPj0gOTANCiAgICAgKiANCiAgICAgKiA8Y29kZT4NCiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsNCiAgICAgKiANCiAgICAgKiAgICAgICAkZXhhbXBsZSA9IG5ldyBPcm1FeGFtcGxlKCk7DQogICAgICogICAgICAgJGV4YW1wbGUtPmFkZENyaXRlcmlhKCdjdXN0b21lcl9pZCcsIE9ybVR5cGVDcml0ZXJpYTo6JEdURSwgYXJyYXkoOTApKTsNCiAgICAgKiANCiAgICAgKiAgICAgICBPcm1Db3JlOjpmaW5kQnlFeGFtcGxlKCRjdXN0b21lciwgJGV4YW1wbGUpOw0KICAgICAqIDwvY29kZT4NCiAgICAgKiANCiAgICAgKiBOT1RFIDogRVEgPT4gPGI+RVE8L2I+dWFscywgR1RFID0+IDxiPkc8L2I+cmVhdGVyIDxiPlQ8L2I+aGFuIG9yIDxiPkU8L2I+cXVhbHMNCiAgICAgKiANCiAgICAgKiBOT1RFIDIgOiB5b3UgY2FuIGFkZCBhcyBtYW55IENyaXRlcmlhcyBhcyB5b3Ugd2FudCBpbiBhbiBFeGFtcGxlIE9iamVjdA0KICAgICAqIA0KICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICAqIEBwYXJhbSBPcm1FeGFtcGxlIHRoZSBPYmplY3QgT3JtRXhhbXBsZSB3aXRoIHNvbWUgQ3JpdGVyaWFzIGluc2lkZQ0KICAgICAqIA0KICAgICAqIEBzZWUgT3JtRXhhbXBsZQ0KICAgICAqIEBzZWUgT3JtVHlwZUNyaXRlcmlhDQogICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBmaW5kQnlFeGFtcGxlKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCBPcm1FeGFtcGxlICRleGFtcGxlLCBPcm1PcmRlckJ5ICYkb3JkZXJCeSA9IG51bGwsIE9ybUxpbWl0ICYkbGltaXQgPSBudWxsKSB7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCg0KCQkkY3JpdGVyaWFzID0gJGV4YW1wbGUtPmdldENyaXRlcmlhcygpOw0KCQkkc2VsZWN0ID0gIlNFTEVDVCAqIEZST00gIi4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOw0KCQkkaHFsID0gIiI7DQoJCSRwYXJhbXMgPSBhcnJheSgpOw0KCQkNCgkJZm9yZWFjaCgkY3JpdGVyaWFzIGFzICRjcml0ZXJpYSkgew0KCQkgIGlmKCFlbXB0eSgkaHFsKSkgew0KCQkJJGhxbCAuPSAnIEFORCAnOw0KCQkgIH0NCgkJICANCgkJICBpZihlbXB0eSgkaHFsKSkgew0KCQkJJGhxbCAuPSAnIFdIRVJFICc7DQoJCSAgfQ0KDQoJCSAgaWYoJGxpc3RlRmllbGRbJGNyaXRlcmlhLT5maWVsZG5hbWVdID09IG51bGwpDQoJCSAgew0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRmllbGQgJyIuJGNyaXRlcmlhLT5maWVsZG5hbWUuIicgbm90IGRlZmluZWQgaW4gZW50aXR5ICciLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLiInIHdoaWxlIHlvdSdyZSBzZWFyY2hpbmcgb24gaXQiKTsNCgkJICB9DQoJCSAgJGZpbHRlclR5cGUgPSAgJGxpc3RlRmllbGRbJGNyaXRlcmlhLT5maWVsZG5hbWVdLT5nZXRUeXBlKCk7DQoJCSAgDQoJCQkJLy8xIHBhcmFtZXRlcg0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEVRIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5FUSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEdUIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEdURSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExUIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExURSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEJFRk9SRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRBRlRFUg0KCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTElLRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROTElLRSkgeyAgDQoJCQkkdmFsID0gJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVswXTsNCgkJCQ0KCQkJaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTElLRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROTElLRSkNCgkJCXsNCgkJCSAgJHZhbC49ICclJzsNCgkJCX0NCgkJCQ0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJHZhbCwgJGZpbHRlclR5cGUpOyANCgkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEuJyA/ICc7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgDQoJCQkJLy8wIHBhcmFtZXRlcg0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5VTEwgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTk5VTEwpIHsgIA0KCQkJJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS4kY3JpdGVyaWEtPnR5cGVDcml0ZXJpYTsNCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJICANCgkJCQkvLzIgcGFyYW1ldGVycw0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEJFVFdFRU4pIHsgIA0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVswXSwgJGZpbHRlclR5cGUpOyANCgkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMV0sICRmaWx0ZXJUeXBlKTsgDQoJCQkkaHFsIC49ICRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhLicgPyBBTkQgPyc7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgDQoJCQkvLyBOIHBhcmFtZXRlcnMNCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRJTiB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROSU4pIHsNCgkJCSRocWwgLj0gJyAoICc7DQoJCQkkc2Vjb25kID0gZmFsc2U7IA0KCQkJZm9yZWFjaCgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhIGFzICRwYXJhbSkgew0KCQkJICBpZigkc2Vjb25kKSB7DQoJCQkJJGhxbCAuPSAnIE9SICc7DQoJCQkgIH0NCgkJCSAgDQoJCQkgICRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRwYXJhbSwgJGZpbHRlclR5cGUpOyANCgkJCSAgJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS5Pcm1UeXBlQ3JpdGVyaWE6OiRFUS4nID8gJzsNCgkJCSAgDQoJCQkgICRzZWNvbmQgPSB0cnVlOw0KCQkJfQ0KCQkJJGhxbCAuPSAnICknOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgIA0KCQkgIC8vT3RoZXIgY2FzZXMNCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRFTVBUWSkgew0KCQkJJGhxbCAuPSAnICggJy4kY3JpdGVyaWEtPmZpZWxkbmFtZSAuJyBpcyBudWxsIHx8ICcgLiAkY3JpdGVyaWEtPmZpZWxkbmFtZSAuICI9ICcnKSI7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTkVNUFRZKSB7DQoJCQkkaHFsIC49ICcgKCAnLiRjcml0ZXJpYS0+ZmllbGRuYW1lIC4nIGlzIG5vdCBudWxsICYmICcgLiAkY3JpdGVyaWEtPmZpZWxkbmFtZSAuICIhPSAnJykiOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkJCQkJIA0KCQkgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZSBPcm1Dcml0ZXJpYSAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSBpcyBub3QgbWFuYWdlIik7DQoJCX0NCgkJDQoJCS8vIE9yZGVyIEJ5IA0KCQlpZigkb3JkZXJCeSAhPSBudWxsKSB7DQoJCQkkaHFsIC49ICRvcmRlckJ5LT5nZXRPcmRlckJ5KCk7DQoJCX0NCgkJZWxzZSBpZigkZW50aXR5UGFyYW0tPmdldERlZmF1bHRPcmRlckJ5KCkgIT0gbnVsbCkgew0KCQkJJGhxbCAuPSAkZW50aXR5UGFyYW0tPmdldERlZmF1bHRPcmRlckJ5KCktPmdldE9yZGVyQnkoKTsNCgkJfQkJDQoJCQ0KCQlpZigkbGltaXQgIT0gbnVsbCkgew0KCQkJJGhxbCAuPSAkbGltaXQtPmdldExpbWl0KCk7DQoJCX0NCgkJDQoJCSRxdWVyeUV4YW1wbGUgPSAkc2VsZWN0LiRocWw7DQoJCQ0KCQkvL0lmIGl0J3MgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIHdlIHJldHVybiB0aGUgcmVzdWx0DQoJCWlmKE9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5pc0NhY2hlKCRxdWVyeUV4YW1wbGUsICRwYXJhbXMpKSB7DQoJCSAgJGVudGl0aWVzID0gT3JtQ2FjaGU6OmdldEluc3RhbmNlKCktPmdldENhY2hlKCRxdWVyeUV4YW1wbGUsJHBhcmFtcyk7DQoJCX0gZWxzZSB7DQoJCQkvL0V4ZWN1dGlvbg0KCQkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeUV4YW1wbGUsDQoJCQkJCQkJCQkkcGFyYW1zLA0KCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjpmaW5kQnlFeGFtcGxlKE9ybUVudGl0eSAmeyRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpfSwgLCBPcm1FeGFtcGxlIFwkZXhhbXBsZSkiKTsNCg0KCQkJT3JtVHJhY2U6OmluZm8oImZpbmRCeUV4YW1wbGUgOiAiLiRyZXN1bHQtPlJlY29yZENvdW50KCkuIiByZXN1bHRhdChzKSIpOw0KCQkJDQoJCQkkZW50aXRpZXMgPSBPcm1Db3JlOjpfcHJvY2Vzc0FycmF5RW50aXR5KCRlbnRpdHlQYXJhbSwgJHJlc3VsdCk7DQoJCQkNCgkJCS8vV2UgcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hlIGJlZm9yZSByZXR1cm4gaXQNCgkJCU9ybUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5zZXRDYWNoZSgkcXVlcnlFeGFtcGxlLCBudWxsLCAkZW50aXRpZXMpOw0KCQl9DQoNCgkJcmV0dXJuIGFycmF5X3ZhbHVlcygkZW50aXRpZXMpOw0KDQoJfQ0KICAgDQoJLyoqDQogICAgICogQWxsb3cgZGVsZXRlIGEgbGlzdCBvZiBPcm1FbnRpdHkgZnJvbSBhIGxpc3Qgb2YgT3JtQ3JpdGVyaWENCiAgICAgKiANCiAgICAgKiBFeGFtcGxlIDogZGVsZXRlIHRoZSBjdXN0b21lcnMgd2l0aCBsYXN0TmFtZSAnUm9nZXInIChubyBjYXNzZSBzZW5zaXRpdmUpDQogICAgICogDQogICAgICogIDxjb2RlPg0KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICAqIA0KICAgICAqICAgICAgICRleGFtcGxlID0gbmV3IE9ybUV4YW1wbGUoKTsNCiAgICAgKiAgICAgICAkZXhhbXBsZS0+YWRkQ3JpdGVyaWEoJ2xhc3ROYW1lJywgT3JtVHlwZUNyaXRlcmlhOjokRVEsIGFycmF5KCdyb2dlcicpLCB0cnVlKTsNCiAgICAgKiANCiAgICAgKiAgICAgICBPcm1Db3JlOjpkZWxldGVCeUV4YW1wbGUoJGN1c3RvbWVyLCAkZXhhbXBsZSk7DQogICAgICogPC9jb2RlPg0KICAgICAqIA0KICAgICAqICBFeGFtcGxlIDogZGVsZXRlIHRoZSBjdXN0b21lcnMgd2l0aCBJZCA+PSA5MA0KICAgICAqIA0KICAgICAqIDxjb2RlPg0KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICAqIA0KICAgICAqICAgICAgICRleGFtcGxlID0gbmV3IE9ybUV4YW1wbGUoKTsNCiAgICAgKiAgICAgICAkZXhhbXBsZS0+YWRkQ3JpdGVyaWEoJ2N1c3RvbWVyX2lkJywgT3JtVHlwZUNyaXRlcmlhOjokR1RFLCBhcnJheSg5MCkpOw0KICAgICAqIA0KICAgICAqICAgICAgIE9ybUNvcmU6OmRlbGV0ZUJ5RXhhbXBsZSgkY3VzdG9tZXIsICRleGFtcGxlKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICogDQogICAgICogTk9URSA6IEVRID0+IDxiPkVRPC9iPnVhbHMsIEdURSA9PiA8Yj5HPC9iPnJlYXRlciA8Yj5UPC9iPmhhbiBvciA8Yj5FPC9iPnF1YWxzDQogICAgICogDQogICAgICogTk9URSAyIDogeW91IGNhbiBhZGQgYXMgbWFueSBDcml0ZXJpYXMgYXMgeW91IHdhbnQgaW4gYW4gT3JtRXhhbXBsZSBPYmplY3QNCiAgICAgKiANCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCiAgICAgKiBAcGFyYW0gT3JtRXhhbXBsZSB0aGUgT2JqZWN0IE9ybUV4YW1wbGUgd2l0aCBzb21lIENyaXRlcmlhcyBpbnNpZGUNCiAgICAgKiANCiAgICAgKiBAc2VlIE9ybUV4YW1wbGUNCiAgICAgKiBAc2VlIE9ybVR5cGVDcml0ZXJpYQ0KICAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZGVsZXRlQnlFeGFtcGxlKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCBPcm1FeGFtcGxlICRPcm1FeGFtcGxlKSB7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCg0KCQkkY3JpdGVyaWFzID0gJE9ybUV4YW1wbGUtPmdldENyaXRlcmlhcygpOw0KCQkkZGVsZXRlID0gImRlbGV0ZSBmcm9tICIuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKTsNCgkJJGhxbCA9ICIiOw0KCQkkcGFyYW1zID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkY3JpdGVyaWFzIGFzICRjcml0ZXJpYSkNCgkJew0KCQkgIGlmKCFlbXB0eSgkaHFsKSkNCgkJICB7DQoJCQkkaHFsIC49ICcgQU5EICc7DQoJCSAgfQ0KCQkgIA0KCQkgIGlmKGVtcHR5KCRocWwpKQ0KCQkgIHsNCgkJCSRocWwgLj0gJyBXSEVSRSAnOw0KCQkgIH0NCg0KCQkgICRmaWx0ZXJUeXBlID0gJGxpc3RlRmllbGRbJGNyaXRlcmlhLT5maWVsZG5hbWVdLT5nZXRUeXBlKCk7DQoJCSAgDQoJCQkJLy8gMSBwYXJhbcOodHJlICANCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRFUSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRORVEgDQoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRHVCB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRHVEUgDQoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMVCB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMVEUgDQoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRCRUZPUkUgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokQUZURVINCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExJS0UgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTkxJS0UpDQoJCSAgeyAgDQoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhWzBdLCAkZmlsdGVyVHlwZSk7IA0KCQkJJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS4kY3JpdGVyaWEtPnR5cGVDcml0ZXJpYS4nID8gJzsNCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJICANCgkJCQkvLyAwIHBhcmFtw6h0cmUNCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROVUxMIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5OVUxMKQ0KCQkgIHsgIA0KCQkJJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS4kY3JpdGVyaWEtPnR5cGVDcml0ZXJpYTsNCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJICANCgkJCQkvLyAyIHBhcmFtw6h0cmVzICANCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRCRVRXRUVOKQ0KCQkgIHsgIA0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVswXSwgJGZpbHRlclR5cGUpOyANCgkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMV0sICRmaWx0ZXJUeXBlKTsgDQoJCQkkaHFsIC49ICRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhLicgPyBBTkQgPyc7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCQkJDQoJCQkJLy8gTiBwYXJhbcOodHJlcw0KCQkJCWlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JElOIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5JTikNCgkJCQl7DQoJCQkJCSRocWwgLj0gJyAoICc7DQoJCQkJCSRzZWNvbmQgPSBmYWxzZTsgDQoJCQkJCWZvcmVhY2goJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYSBhcyAkcGFyYW0pDQoJCQkJCXsNCgkJCQkJCWlmKCRzZWNvbmQpDQoJCQkJCQl7DQoJCQkJCQkJJGhxbCAuPSAnIE9SICc7DQoJCQkJCQl9DQoJCQkJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkcGFyYW0sICRmaWx0ZXJUeXBlKTsgDQoJCQkJCQkkaHFsIC49ICRjcml0ZXJpYS0+ZmllbGRuYW1lLk9ybVR5cGVDcml0ZXJpYTo6JEVRLicgPyAnOw0KCQkJCQkJDQoJCQkJCQkkc2Vjb25kID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkkaHFsIC49ICcgKSc7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0gICAgICAgICAgICAgICAgICAgICAgICANCgkJICANCgkJICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJMZSBPcm1Dcml0ZXJpYSAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSBuJ2VzdCBwYXMgZW5jb3JlIHByaXMgZW4gY2hhcmdlIik7DQoJCX0NCgkJJHF1ZXJ5RXhhbXBsZSA9ICRkZWxldGUuJGhxbDsNCgkJCQkJCQkJCQkNCgkJLy9FeGVjdXRpb24NCgkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCRxdWVyeUV4YW1wbGUsDQoJCQkJCQkJCQkkcGFyYW1zLA0KCQkJCQkJCQkJIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjpkZWxldGVCeUV4YW1wbGUoT3JtRW50aXR5ICZ7JGVudGl0eVBhcmFtLT5nZXROYW1lKCl9LCAsIE9ybUV4YW1wbGUgXCRleGFtcGxlKSIpOw0KCX0NCiAgICAgIA0KICAgIC8qKg0KICAgICAqIFRyYW5zZm9ybXMgYW4gYXJyYXkgb2YgdmFsdWUgaW50byBhIGVudGlyZSBPcm1FbnRpdHkuIFRoZSBhcnJheSBtdXN0IGZhbGxvdyB0aGlzIHNjaGVtZQ0KICAgICAqIA0KICAgICAqIEV4YW1wbGUgOg0KICAgICAqIA0KICAgICAqIDxjb2RlPg0KICAgICAqICAgICAgICRteUFycmF5MSA9IGFycmF5KCdjdXN0b21lcl9pZCc9PjEsICduYW1lJz0+J0R1cG9udCcpOyAgICAgICANCiAgICAgKiAgICAgICAkbXlBcnJheTIgPSBhcnJheSgnY3VzdG9tZXJfaWQnPT4yLCAnbmFtZSc9PidEdXJhbmQnLCAnbGFzdE5hbWUnPT4nSm9lJyk7ICAgICAgIA0KICAgICAqICAgDQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogDQogICAgICogICAgICAgJGN1c3RvbWVyMSA9IE9ybUNvcmU6OnJvd1RvRW50aXR5KCRjdXN0b21lciwgJG15QXJyYXkxKTsNCiAgICAgKiAgICAgICAkY3VzdG9tZXIyID0gT3JtQ29yZTo6cm93VG9FbnRpdHkoJGN1c3RvbWVyLCAkbXlBcnJheTIpOw0KICAgICAqIA0KICAgICAqICAgICAgIGVjaG8gJGN1c3RvbWVyMS0+Z2V0KCdsYXN0TmFtZScpOyAvL3JldHVybiBudWxsDQogICAgICogICAgICAgZWNobyAkY3VzdG9tZXIyLT5nZXQoJ2xhc3ROYW1lJyk7IC8vcmV0dXJuIEpvZQ0KICAgICAqIA0KICAgICAqIDwvY29kZT4NCiAgICAgKiAgICAgICAgIA0KICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICAqIEBwYXJhbSBhcnJheSB0aGUgbGlzdCB3aXRoIHRoZSBkYXRhDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHJvd1RvRW50aXR5IChPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJHJvdykgew0KDQoJCU9ybVRyYWNlOjpkZWJ1Zygicm93VG9FbnRpdHkgOiAiLnByaW50X3IoJHJvdyx0cnVlKSk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCg0KCQkkbmV3RW50aXR5ID0gY2xvbmUgJGVudGl0eVBhcmFtOw0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkNCgkJew0KCQkgIGlmKCEkZmllbGQtPmlzQXNzb2NpYXRlS0VZKCkpDQoJCSAgew0KCQkJJG5ld0VudGl0eS0+c2V0KCRmaWVsZC0+Z2V0TmFtZSgpLE9ybUNvcmU6OmRiVmFsdWVUb0ZpZWxkKCRyb3dbJGZpZWxkLT5nZXROYW1lKCldLCAkZmllbGQtPmdldFR5cGUoKSkpOw0KCQkgIH0gDQoJCX0NCgkJcmV0dXJuICRuZXdFbnRpdHk7ICANCgl9DQogIA0KICAgIC8qKg0KICAgICAqIFRyYW5zZm9ybSBhIFBIUCB2YWx1ZSBpbnRvIGEgU1FMIHZhbHVlDQogICAgICogDQogICAgICogQHBhcmFtIG1peGVkIHRoZSBQSFAgdmFsdWUNCiAgICAgKiBAcGFyYW0gbWl4ZWQgdGhlIENBU1QgdmFsdWUNCiAgICAgKiANCiAgICAgKiBAc2VlIE9ybUNBU1QNCiAgICAgKi8NCglwcml2YXRlIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBGaWVsZFRvREJWYWx1ZSgkZGF0YSwgJHR5cGUpIHsNCgkJaWYoJGRhdGEgPT0gbnVsbCl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KCQkNCgkJc3dpdGNoKCR0eXBlKSB7DQoJCSAgY2FzZSBPcm1DQVNUOjokU1RSSU5HIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JERPVUJMRSA6IHJldHVybiAkZGF0YTsNCgkJICBjYXNlIE9ybUNBU1Q6OiRJTlRFR0VSIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JE5VTUVSSUMgOiByZXR1cm4gJGRhdGE7DQoJCSAgY2FzZSBPcm1DQVNUOjokQlVGRkVSIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JFVVSUQgOiByZXR1cm4gJGRhdGE7DQoJCSAgDQoJCSAgY2FzZSBPcm1DQVNUOjokREFURSA6IHJldHVybiBzdHJfcmVwbGFjZSgiJyIsICIiLCBjbXNtcygpLT5HZXREYigpLT5EQkRhdGUoJGRhdGEpKTsgICAgICAgDQoJCSAgY2FzZSBPcm1DQVNUOjokVElNRSA6IHJldHVybiBzdHJfcmVwbGFjZSgiJyIsICIiLCBjbXNtcygpLT5HZXREYigpLT5EQlRpbWVTdGFtcCgkZGF0YSkpOyAgIAkgIA0KCQkgIGNhc2UgT3JtQ0FTVDo6JERBVEVUSU1FIDogcmV0dXJuIGRhdGUoIlktbS1kIEg6aTpzIiwkZGF0YSk7IA0KCQkgIGNhc2UgT3JtQ0FTVDo6JFRTIDogcmV0dXJuICRkYXRhOw0KCQl9DQoJfQ0KICANCiAgICAvKioNCiAgICAgKiBUcmFuc2Zvcm0gYSBTUUwgdmFsdWUgaW50byBhIFBIUCB2YWx1ZQ0KICAgICAqIA0KICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgU1FMIHZhbHVlIA0KICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgQ0FTVCB2YWx1ZQ0KICAgICAqIA0KICAgICAqIEBzZWUgT3JtQ0FTVA0KICAgICAqLw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGRiVmFsdWVUb0ZpZWxkKCRkYXRhLCAkdHlwZSkgew0KCQlzd2l0Y2goJHR5cGUpIHsNCgkJICBjYXNlIE9ybUNBU1Q6OiRTVFJJTkcgOiByZXR1cm4gJGRhdGE7CQkgIA0KCQkgIGNhc2UgT3JtQ0FTVDo6JERPVUJMRSA6IHJldHVybiAkZGF0YTsNCgkJICBjYXNlIE9ybUNBU1Q6OiRJTlRFR0VSIDogcmV0dXJuICRkYXRhOwkJICANCgkJICBjYXNlIE9ybUNBU1Q6OiROVU1FUklDIDogcmV0dXJuICRkYXRhOwkJICANCgkJICBjYXNlIE9ybUNBU1Q6OiRCVUZGRVIgOiByZXR1cm4gJGRhdGE7CQkgIAkJDQoJCSAgY2FzZSBPcm1DQVNUOjokVVVJRCA6IHJldHVybiAkZGF0YTsNCgkJICANCgkJICBjYXNlIE9ybUNBU1Q6OiREQVRFIDogcmV0dXJuIGNtc21zKCktPkdldERiKCktPlVuaXhEYXRlKCRkYXRhKTsNCgkJICBjYXNlIE9ybUNBU1Q6OiRUSU1FIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JERBVEVUSU1FIDogcmV0dXJuIHN0cnRvdGltZSgkZGF0YSk7ICANCgkJICBjYXNlIE9ybUNBU1Q6OiRUUyA6IHJldHVybiAkZGF0YTsNCg0KCQl9DQoJfQ0KICANCiAgICAvKioNCiAgICAgKiBWZXJpZnkgaW4gYWxsIHR5cGUgb2YgZW50aXRpZXMgaWYgYW55b25lIHN0aWxsIGhhcyBhIGxpbmsgd2l0aCB0aGUgT3JtRW50aXR5IHBhc3NlZCBpbiBwYXJhbWV0ZXJzIChGb3JlaWduS0V5IGFuZCBBc3NvY2lhdGVLZXkpDQogICAgICogDQogICAgICogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB0aGUgZGVsZXRlKiBmdW5jdGlvbnMgdG8gYXZvaWQgb3JwaGFucyBkYXRhIGluIGRhdGFiYXNlDQogICAgICogDQoJICogQHBhcmFtIE9ybSB0aGUgbW9kdWxlIHdoaWNoIGV4dGVuZHMgdGhlIE9ybSBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgaWQgb2YgdGhlIE9ybUVudGl0eSB0byB2ZXJpZnkNCgkgKg0KCSAqIEByZXR1cm4gYSBtZXNzYWdlIGlmIGEgbGluayBpcyBzdGlsbCBwcmVzZW50LiBub3RoaW5nIGlmIHRoZSBpbnRlZ3JpdHkgaXMgb2sNCiAgICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHZlcmlmSW50ZWdyaXR5KE9ybUVudGl0eSAmJGVudGl0eSwgJHNpZCkgew0KCQkkbGlzdGVFbnRpdHlzID0gTXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKCRlbnRpdHktPmdldE1vZHVsZU5hbWUoKSk7DQoNCgkJZm9yZWFjaCgkbGlzdGVFbnRpdHlzIGFzICRrZXk9PiRhbkVudGl0eSkgew0KCQkgIGlmKCRhbkVudGl0eSBpbnN0YW5jZU9mIE9ybUVudGl0eUFzc29jaWF0aW9uKQ0KCQkJY29udGludWU7DQoJCQkNCgkJICBmb3JlYWNoKCRhbkVudGl0eS0+Z2V0RmllbGRzKCkgYXMgJGZpZWxkKSB7DQoJCQlpZigkZmllbGQtPmlzQXNzb2NpYXRlS0VZKCkpIHsNCgkJCSAgY29udGludWU7DQoJCQl9DQoJCQkNCgkJCWlmKCRmaWVsZC0+Z2V0S0VZTmFtZSgpICE9IG51bGwpIHsNCgkJCSAgJHZhbHMgPSBleHBsb2RlKCcuJywkZmllbGQtPmdldEtFWU5hbWUoKSwyKTsNCgkJCSAgDQoJCQkgIGlmKHN0cnRvbG93ZXIgKCR2YWxzWzBdKSA9PSBzdHJ0b2xvd2VyICgkZW50aXR5LT5nZXROYW1lKCkpKSAgew0KCQkJCSRPcm1FeGFtcGxlID0gbmV3IE9ybUV4YW1wbGUoKTsNCgkJCQkkT3JtRXhhbXBsZS0+YWRkQ3JpdGVyaWEoJGZpZWxkLT5nZXROYW1lKCksIE9ybVR5cGVDcml0ZXJpYTo6JEVRLCBhcnJheSgkc2lkKSk7DQoJCQkJJGVudGl0eXMgPSBPcm1Db3JlOjpmaW5kQnlFeGFtcGxlKCRhbkVudGl0eSwgJE9ybUV4YW1wbGUpOw0KCQkJCWlmKGNvdW50KCRlbnRpdHlzKSA+IDApDQoJCQkJew0KCQkJCSAgcmV0dXJuICJMYSBsaWduZSAmYWdyYXZlOyBzdXBwcmltZXIgZXN0IGVuY29yZSB1dGlsaXMmZWFjdXRlO2UgcGFyICZsYXF1bzsgIi4kYW5FbnRpdHktPmdldE5hbWUoKS4iICZyYXF1bzsiOw0KCQkJCX0NCgkJCSAgfQ0KCQkJfQ0KCQkgIH0NCgkJfQ0KDQoJCXJldHVybjsNCg0KCX0NCg0KICAgIC8qKg0KICAgICAqIEFsbG93IHJlYWxpc2UgZGVlcCBzZWFyY2ggb24gZGlmZmVyZW50IHR5cGUgb2YgT3JtRW50aXR5IGxpbmtlZCB0b2dldGhlcg0KICAgICAqIA0KICAgICAqIEV4YW1wbGUgOiANCiAgICAgKiAgIEFuIE9yZGVyIGhhcyBhIGxpbmsgdG8gYSBDdXN0b21lciAoT3JkZXIuY3VzdG9tZXJfaWQpDQogICAgICogICBBIEN1c3RvbWVyIGhhcyBhIGxpbmsgdG8gYW4gQWRkcmVzcyAoQ3VzdG9tZXIuYWRkcmVzc2VfaWQpDQogICAgICogICBBbiBBZGRyZXNzIGhhcyBhIGxpbmsgdG8gYSBjaXR5IChBZGRyZXNzLmNpdHlfaWQpDQoJICogICBBIGNpdHkgaGFzIGEgWmlwQ29kZSAobWF5YmUgc2hhcmVkIGJ5IGRpZmZlcmVudCBjaXRpZXMpDQogICAgICogDQogICAgICogIElmIGkgd2FudCB0aGUgT3JkZXJzIGZvciBDdXN0b21lcnMgZnJvbSB0aGUgY2l0eSB3aXRoIHppcGNvZGUgZXF1YWxzIHRvICIwMTIzNCIgb3IgIjQ1NjciIEkgY291bGQgd3JpdGUgc29tZSBzaGl0dHkgY29kZSAhDQogICAgICogDQogICAgICogPGNvZGU+DQogICAgICogICRjaXRpZXMgPSAvL0ZpbmQgbXkgY2l0aWVzIHdpdGggWmlwQ29kZSAiMDEyMzQiIG9yICI0NTY3Ig0KICAgICAqICBmb3JlYWNoKCRjaXRpZXMgYXMgJGNpdHkpDQogICAgICogIHsNCiAgICAgKiAgICAgICAkYWRkcmVzc2VzID0gLy9GaW5kIHRoZSBhZGRyZXNzIGZvciB0aGUgY2l0eSAkY2l0eQ0KICAgICAqICAgICAgIGZvcmVhY2goJGFkZHJlc3NlcyBhcyAkYWRkcmVzcykNCiAgICAgKiAgICAgICB7DQogICAgICogICAgICAgICAgICRjdXN0b21lcnMgPSAvL0ZpbmQgdGhlIEN1c3RvbWVycyBmb3IgdGhlIGFkZHJlc3MgJGFkZHJlc3MNCiAgICAgKiAgICAgICAgICAgZm9yZWFjaCgkY3VzdG9tZXJzIGFzICRjdXN0b21lcikNCiAgICAgKiAgICAgICAgICAgew0KICAgICAqICAgICAgICAgICAgICAgJGNvbW1hbmRlcyA9ICAvL0ZpbmQgVHJhaXRlbWVudCBkZSByZWNoZXJjaGUgZCd1bmUgY29tbWFuZGUgcG9zc8OoZGFudCBsZSBudW1lcm9jbGllbnQgPSAkY3VzdG9tZXItPmdldCgnbnVtZXJvY2xpZW50JykgICANCiAgICAgKiAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICANCiAgICAgKiAgICAgICB9ICAgICAgICAgICAgICAgICAgDQogICAgICogIH0NCiAgICAgKiANCiAgICAgKiAgPC9jb2RlPg0KICAgICAqIA0KICAgICAqICBJIGNvdWxkIGFsc28gd3JpdGUgYSBiZXR0ZXIgY29kZSA6IA0KICAgICAqIA0KICAgICAqIDxjb2RlPg0KCSAqICAgJG9yZGVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ29yZGVyJyk7DQogICAgICogICAkb3JkZXJzID0gT3JtQ29yZTo6bWFrZURlZXBTZWFyY2gob3JkZXIsICdPcmRlci5jdXN0b21lcl9pZC5hZGRyZXNzX2lkLmNpdHlfaWQuemlwY29kZScsIGFycmF5KCcwMTIzNCcsICc0NTY3JykpOw0KICAgICAqIDwvY29kZT4NCiAgICAgKiANCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IFRoZSBlbnRpdHkgaSB3YW50IHRvIGhhdmUgYXQgdGhlIGVuZA0KICAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIHBhdGggdG8gZmFsbG93LiBNdXN0IGJlIGVuZGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIEZpZWxkIHRvIG1ha2UgdGhlIGNvbXBhcmFpc29uDQogICAgICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSBvZiB2YWx1ZSB0byBtYWtlIHRoZSBjb21wYXJhaXNvbg0KICAgICAqIA0KICAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gbWFrZURlZXBTZWFyY2goT3JtRW50aXR5ICRwcmV2aW91c0VudGl0eSwgJGNsZSwgJHZhbHVlcykgeyAgICANCgkJT3JtVFJBQ0U6OmRlYnVnKCIjIDogIi4iU3RhcnQgbWFrZURlZXBTZWFyY2goKSAiLiRwcmV2aW91c0VudGl0eS0+Z2V0TmFtZSgpLiItPiIuJGNsZSk7DQoNCgkJaWYoJHByZXZpb3VzRW50aXR5ID09IG51bGwpDQoJCXsNCgkJICANCgkJICAkbmV3Q2xlID0gZXhwbG9kZSgnLicsJGNsZSwyKTsNCgkJICAkcHJldmlvdXNFbnRpdHkgPSAkbmV3Q2xlWzBdOw0KCQkgICRjbGUgPSAkbmV3Q2xlWzFdOw0KCQkgICRwcmV2aW91c0VudGl0eSA9IG5ldyAkcHJldmlvdXNFbnRpdHkoKTsNCgkJfQ0KDQoJCSRuZXdDbGUgPSBleHBsb2RlKCcuJywkY2xlLDIpOw0KCQkkZmllbGRuYW1lID0gJG5ld0NsZVswXTsNCg0KCQkvL1Rlc3QgZGUgc29ydGllIDogb24gYSB1biBzZXVsIHLDqXN1bHRhdCBkYW5zICRuZXdDbGUgOiBsZSBjaGFtcHMgZmluYWwNCgkJaWYoY291bnQoJG5ld0NsZSkgPT0gMSkNCgkJew0KCQkgIE9ybVRSQUNFOjpkZWJ1ZygiIyA6ICIuIiBjb3VudChcJG5ld0NsZSkgPT0gMSAsIGRvbmMgc29ydGllICIpOw0KCQkgICRPcm1FeGFtcGxlID0gbmV3IE9ybUV4YW1wbGU7DQoJCSAgJE9ybUV4YW1wbGUtPmFkZENyaXRlcmlhKCRmaWVsZG5hbWUsIE9ybVR5cGVDcml0ZXJpYTo6JElOLCAkdmFsdWVzKTsNCgkJICAkZW50aXR5cyA9IE9ybUNvcmU6OmZpbmRCeUV4YW1wbGUoJHByZXZpb3VzRW50aXR5LCAkT3JtRXhhbXBsZSk7DQoJCSAgT3JtVFJBQ0U6OmRlYnVnKCIjIDogIi5jb3VudCgkZW50aXR5cykuIiBSJmVhY3V0ZTtzdWx0YXQocykgcmV0b3VybiZlYWN1dGU7cyIpOw0KCQkgIHJldHVybiAkZW50aXR5czsNCgkJfSBlbHNlDQoJCXsNCgkJICBPcm1UUkFDRTo6ZGVidWcoIiMgOiAiLiIgcG91cnN1aXRlICIpOw0KCQl9DQoNCgkJLy9Sw6ljdXDDqXJhdGlvbiBkZSBsYSBjbMOpIGRpc3RhbmNlIHBvdXIgdW5lIEZLDQoJCSRmaWVsZCA9ICRwcmV2aW91c0VudGl0eS0+Z2V0RmllbGRCeU5hbWUoJGZpZWxkbmFtZSk7DQoJCWlmKCRmaWVsZC0+aXNGb3JlaWduS0VZKCkgfHwgJGZpZWxkLT5pc0Fzc29jaWF0ZUtleSgpKQ0KCQl7DQoJCSAgJGZvcmVpZ25LRVkgPSBleHBsb2RlKCcuJywkZmllbGQtPmdldEtFWU5hbWUoKSwyKTsNCgkJICAkbmV4dEVudGl0eSA9IG5ldyAkZm9yZWlnbktFWVswXSgpOw0KCQl9IA0KDQoJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLZXkoKSkNCgkJew0KCQkgICRjbGUgPSBleHBsb2RlKCcuJywkbmV3Q2xlWzFdLDIpOw0KCQkgICRjbGUgPSAkY2xlWzFdOw0KCQl9IGVsc2UNCgkJew0KCQkgICRjbGUgPSAkbmV3Q2xlWzFdOw0KCQl9IA0KCQkNCgkJT3JtVFJBQ0U6OmluZm8oIiMgOiAiLiIgbWFrZSBuZXcgcmVjaGVyY2hlIDogIi4kbmV4dEVudGl0eS0+Z2V0TmFtZSgpIC4iICwgIi4gJGNsZSk7DQoNCgkJJGVudGl0eXMgPSBPcm1Db3JlOjptYWtlRGVlcFNlYXJjaCgkbmV4dEVudGl0eSwgJGNsZSwgJHZhbHVlcyk7DQoNCgkJaWYoY291bnQoJGVudGl0eXMpID09IDApDQoJCXsNCgkJICByZXR1cm4gYXJyYXkoKTsNCgkJfQ0KDQoJCWlmKCRuZXh0RW50aXR5IGluc3RhbmNlb2YgT3JtRW50aXR5QXNzb2NpYXRpb24pDQoJCXsgIA0KCQkgICRmaWVsZHMgPSAkbmV4dEVudGl0eS0+Z2V0RmllbGRzKCk7DQoJCSAgJG5vbUZpZWxkU3Vpdml0ID0gZXhwbG9kZSgnLicsJGNsZSwyKTsNCgkJICAkbm9tRmllbGRTdWl2aXQgPSAkbm9tRmllbGRTdWl2aXRbMF07DQoJCSAgJG5vbUZpZWxkUmV0b3VyID0gIk4vQSI7DQoJCSAgZm9yZWFjaCgkZmllbGRzIGFzICRhZmllbGQpDQoJCSAgew0KCQkJaWYoJGFmaWVsZC0+Z2V0TmFtZSgpID09ICRub21GaWVsZFN1aXZpdCkNCgkJCXsNCgkJCSAgY29udGludWU7DQoJCQl9DQoJCQkkbm9tRmllbGRSZXRvdXIgPSAkYWZpZWxkOw0KCQkgIH0NCgkJICANCgkJfQ0KDQoJCSRpZHMgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRlbnRpdHlzIGFzICRhbkVudGl0eSkNCgkJew0KCQkgIE9ybVRSQUNFOjppbmZvKCJPbiBhIHRyb3V2JmVhY3V0ZTsgIDogIi4kYW5FbnRpdHktPmdldE5hbWUoKS4iIik7DQoJCSAgaWYoJGFuRW50aXR5IGluc3RhbmNlb2YgT3JtRW50aXR5QXNzb2NpYXRpb24pDQoJCSAgew0KCQkJJHZhbHVlID0gJGFuRW50aXR5LT5nZXQoJG5vbUZpZWxkUmV0b3VyLT5nZXROYW1lKCkpOw0KCQkJJGlkc1tdID0gJHZhbHVlOw0KCQkJT3JtVFJBQ0U6OmluZm8oIiB2YWxldXIgYXNzb2MgOiAiLiR2YWx1ZS4iIHBvdXIgbGUgY2hhbXBzICIuJG5vbUZpZWxkUmV0b3VyLT5nZXROYW1lKCkpOw0KCQkgIH0gZWxzZQ0KCQkgIHsNCgkJCSR2YWx1ZSA9ICRhbkVudGl0eS0+Z2V0KCRuZXh0RW50aXR5LT5nZXRQaygpLT5nZXROYW1lKCkpOw0KCQkJJGlkc1tdID0gJHZhbHVlOw0KCQkJT3JtVFJBQ0U6OmluZm8oIiB2YWxldXIgaWQgOiAiLiR2YWx1ZSk7DQoJCSAgfQ0KCQkgIA0KCQl9DQoNCg0KCQkkT3JtRXhhbXBsZSA9IG5ldyBPcm1FeGFtcGxlOw0KCQlpZigkbmV4dEVudGl0eSBpbnN0YW5jZW9mIE9ybUVudGl0eUFzc29jaWF0aW9uKQ0KCQl7DQoJCSAgJE9ybUV4YW1wbGUtPmFkZENyaXRlcmlhKCRwcmV2aW91c0VudGl0eS0+Z2V0UGsoKS0+Z2V0TmFtZSgpLCBPcm1UeXBlQ3JpdGVyaWE6OiRJTiwgJGlkcyk7DQoJCX0gZWxzZQ0KCQl7DQoJCSAgJE9ybUV4YW1wbGUtPmFkZENyaXRlcmlhKCRmaWVsZG5hbWUsIE9ybVR5cGVDcml0ZXJpYTo6JElOLCAkaWRzKTsNCgkJfQ0KCQkkZW50aXR5cyA9IE9ybUNvcmU6OmZpbmRCeUV4YW1wbGUoJHByZXZpb3VzRW50aXR5LCAkT3JtRXhhbXBsZSk7DQoNCgkJcmV0dXJuICRlbnRpdHlzOw0KCX0NCiAgDQoJLyoqDQoJICogV2lsbCByZXR1cm4gYSBVVUlEIDogYSB1bmlxdWUgaWRlbnRpZmllcg0KCSAqIEBzaW5jZSAwLjAuMg0KCSAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKCl7DQoNCgkJLy9FeGVjdXRpb24NCgkJJHJlc3VsdCA9IE9ybURiOjpleGVjdXRlKCdTRUxFQ1QgVVVJRCgpIEFTIHV1aWQ7JywNCgkJCQkJCQkJCW51bGwsDQoJCQkJCQkJCQkiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIE9ybUNvcmU6OmdlbmVyYXRlVVVJRCgpIik7DQoNCgkJJHJvdz0kcmVzdWx0LT5GZXRjaFJvdygpOw0KDQoJCXJldHVybiAkcm93Wyd1dWlkJ107DQoJfQ0KfQ0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgT3JtQ3JpdGVyaWEgY2xhc3MNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KIA0KDQovKioNCiAqIEJhY2tib25lIGZvciBPcm1Dcml0ZXJpYSBpbnRvIHRoZSBPcm0gc3lzdGVtDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KLypmaW5hbCAqL2NsYXNzIE9ybUNyaXRlcmlhDQp7DQoJLyoqDQoJICogTmFtZSBvZiB0aGUgZmllbGQgDQoJICovDQoJcHVibGljICRmaWVsZG5hbWU7DQoJDQoJLyoqDQoJICogVHlwZSBvZiBDcml0ZXJpYQ0KCSAqLw0KCXB1YmxpYyAkdHlwZUNyaXRlcmlhOw0KCQ0KCS8qKg0KCSAqIFBhcmFtZXRlcnMgZm9yIHRoZSB0eXBlIG9mIENyaXRlcmlhDQoJICovDQoJcHVibGljICRwYXJhbXNDcml0ZXJpYTsNCgkNCgkvKioNCgkgKiBCb29sZWFuIGlmIHdlIG11c3QgaWdub3JlIGNhc2UNCgkgKi8NCglwdWJsaWMgJGlnbm9yZUNhc2U7DQoJDQogICAgLyoqDQogICAgKiBQdWJsaWMgQ29uc3RydWN0b3INCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyBOYW1lIG9mIHRoZSBmaWVsZCANCiAgICAqIEBwYXJhbSBPcm1UeXBlQ3JpdGVyaWEgVHlwZSBvZiBDcml0ZXJpYQ0KICAgICogQHBhcmFtIGFycmF5IGFsbCB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciB0aGUgcGFyYW1ldGVyICR0eXBlQ3JpdGVyaWENCiAgICAqIEBwYXJhbSBib29sZWFuIFtPcHRpb25hbF0gaWYgd2UgbXVzdCBpZ25vcmUgdGhlIGNhc2UgKGF6ZSBlcXVhbHMgQVpFKSBvciBub3QuIERlZmF1bHQgdmFsdWUgaXMgImZhbHNlIg0KICAgICoNCgkqIEByZXR1cm4gT3JtQ3JpdGVyaWEgYSBDcml0ZXJpYQ0KCSoNCgkqIEBzZWUgT3JtVHlwZUNyaXRlcmlhDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpZWxkbmFtZSwgJHR5cGVDcml0ZXJpYSwgJHBhcmFtc0NyaXRlcmlhLCAkaWdub3JlQ2FzZSA9IGZhbHNlKQ0KCXsNCgkJJHRoaXMtPmZpZWxkbmFtZSA9ICRmaWVsZG5hbWU7DQoJCSR0aGlzLT50eXBlQ3JpdGVyaWEgPSAkdHlwZUNyaXRlcmlhOw0KCQkkdGhpcy0+cGFyYW1zQ3JpdGVyaWEgPSAkcGFyYW1zQ3JpdGVyaWE7DQoJCSR0aGlzLT5pZ25vcmVDYXNlID0gJGlnbm9yZUNhc2U7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormdb.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybURCDQogKiANCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCiANCi8qKg0KICogSW50ZXJmYWNlIGJldHdlZW4gdGhlIGZ1bmN0aW9ucyBvZiB0aGUgT3JtIGZyYW1ld29yayBhbmQgQWRvZGINCiAqICAgDQogKiBAc2luY2UgMC4xLjINCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtREIgeyAgDQoNCglwcml2YXRlIHN0YXRpYyAkZGI7DQoJcHJpdmF0ZSBzdGF0aWMgJGRpY3Q7DQoJDQoJcHJpdmF0ZSBzdGF0aWMgJHRhYm9wdGFycmF5ID0gYXJyYXkoICdteXNxbCcgPT4gJ0VOR0lORSBNeUlTQU0gQ0hBUkFDVEVSIFNFVCB1dGY4IENPTExBVEUgdXRmOF9nZW5lcmFsX2NpJyk7DQoJcHJpdmF0ZSBzdGF0aWMgJGlkeG9wdGFycmF5VW5pcXVlID0gYXJyYXkoJ1VOSVFVRScpOw0KDQogICAgLyoqDQogICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3IgICAgDQogICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZnVuY3Rpb24gaW5pdCgpew0KCQlpZihPcm1EQjo6JGRiICE9IG51bGwpew0KCQkJcmV0dXJuOw0KCQl9DQoJCU9ybURCOjokZGIgPSBjbXNtcygpLT5HZXREYigpOw0KCQlPcm1EQjo6JGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggT3JtREI6OiRkYiApOw0KCX0NCiAgICAgIA0KICAgIC8qKg0KICAgICogd2lsbCBleGVjdXRlIHRoZSBBZG9kYiAiZXhlY3V0ZSIgZnVuY3Rpb24gYW5kIGFkZCBsb2dzIG9mIGV2ZXJ5dGhpbmcNCiAgICAqICAgICAgICAgDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBzcWwgUXVlcnkNCiAgICAqIEBwYXJhbSBhcnJheSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIG9yIG51bGwNCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIG1lc3NhZ2Ugb2YgZXJyb3IgdG8gZGlzcGxheSB0byB0aGUgdXNlcg0KICAgICogQHJldHVybiB0aGUgYWRvZGIgcmVzdWx0DQoJKg0KCSogQGV4Y2VwdGlvbiBFeGNlcHRpb24gaWYgdGhlIHF1ZXJ5IGZhaWxlZA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBleGVjdXRlKCRxdWVyeSwgJHBhcmFtZXRlcnMgPSBudWxsLCAkZXJyb3JNc2cgPSAiRGF0YWJhc2UgZXJyb3IiKSB7DQoJCS8vQmUgc3VyZSB3ZSBpbml0aWF0ZSB0aGUgZGIgY29ubmVjdG9yOw0KCQlPcm1EQjo6aW5pdCgpOw0KCQlPcm1UcmFjZTo6ZGVidWcoJHF1ZXJ5KTsNCgkJaWYoJHBhcmFtZXRlcnMgIT0gbnVsbCl7DQoJCQlPcm1UcmFjZTo6ZGVidWcoIiA+IFBhcmFtZXRlcnMgOiAiLnByaW50X3IoJHBhcmFtZXRlcnMsIHRydWUpKTsNCgkJfQ0KCQkkcmVzdWx0ID0gT3JtREI6OiRkYi0+RXhlY3V0ZSgkcXVlcnksICRwYXJhbWV0ZXJzKTsNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXsNCgkJCU9ybVRyYWNlOjplcnJvcigkZXJyb3JNc2cpOw0KCQkJT3JtVHJhY2U6OmVycm9yKCIgPiBNeXNxbCBzYWlkIDogIi5Pcm1EQjo6JGRiLT5FcnJvck1zZygpKTsNCgkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIFF1ZXJ5IHdhcyA6ICIuJHF1ZXJ5KTsNCgkJCWlmKCRwYXJhbWV0ZXJzICE9IG51bGwpew0KCQkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIFBhcmFtZXRlcnMgd2FzIDogIi5wcmludF9yKCRwYXJhbWV0ZXJzLCB0cnVlKSk7DQoJCQl9DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvck1zZyk7DQoJCX0NCgkJDQoJCXJldHVybiAkcmVzdWx0Ow0KCX0JDQoJDQoJIC8qKg0KICAgICogd2lsbCBleGVjdXRlIHRoZSBBZG9kYiAiR2V0T25lIiBmdW5jdGlvbiBhbmQgYWRkIGxvZ3Mgb2YgZXZlcnl0aGluZw0KICAgICogICAgICAgICANCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIHNxbCBRdWVyeQ0KICAgICogQHBhcmFtIGFycmF5IHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgb3IgbnVsbA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSBvZiBlcnJvciB0byBkaXNwbGF5IHRvIHRoZSB1c2VyDQogICAgKiBAcmV0dXJuIHRoZSBhZG9kYiByZXN1bHQNCgkqDQoJKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbiBpZiB0aGUgcXVlcnkgZmFpbGVkDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldE9uZSgkcXVlcnksICRwYXJhbWV0ZXJzID0gbnVsbCwgJGVycm9yTXNnID0gIkRhdGFiYXNlIGVycm9yIikgew0KCQkvL0JlIHN1cmUgd2UgaW5pdGlhdGUgdGhlIGRiIGNvbm5lY3RvcjsNCgkJT3JtREI6OmluaXQoKTsNCgkJT3JtVHJhY2U6OmRlYnVnKCRxdWVyeSk7DQoJCWlmKCRwYXJhbWV0ZXJzICE9IG51bGwpew0KCQkJT3JtVHJhY2U6OmRlYnVnKCIgPiBQYXJhbWV0ZXJzIDogIi5wcmludF9yKCRwYXJhbWV0ZXJzLCB0cnVlKSk7DQoJCX0NCgkJJHJlc3VsdCA9IE9ybURCOjokZGItPkdldE9uZSgkcXVlcnksICRwYXJhbWV0ZXJzKTsNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXsNCgkJCU9ybVRyYWNlOjplcnJvcigkZXJyb3JNc2cpOw0KCQkJT3JtVHJhY2U6OmVycm9yKCIgPiBNeXNxbCBzYWlkIDogIi5Pcm1EQjo6JGRiLT5FcnJvck1zZygpKTsNCgkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIFF1ZXJ5IHdhcyA6ICIuJHF1ZXJ5KTsNCgkJCWlmKCRwYXJhbWV0ZXJzICE9IG51bGwpew0KCQkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIFBhcmFtZXRlcnMgd2FzIDogIi5wcmludF9yKCRwYXJhbWV0ZXJzLCB0cnVlKSk7DQoJCQl9DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvck1zZyk7DQoJCX0NCgkJDQoJCXJldHVybiAkcmVzdWx0Ow0KCX0JDQoJDQoJIC8qKg0KICAgICogd2lsbCBleGVjdXRlIHRoZSBBZG9kYiAiR2VuSUQiIGZ1bmN0aW9uIGFuZCBhZGQgbG9ncyBvZiBldmVyeXRoaW5nDQogICAgKiAgICAgICAgIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgdGFibGUgdXNlZCBmb3Igc2VxdWVuY2UgDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBtZXNzYWdlIG9mIGVycm9yIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXINCiAgICAqIEByZXR1cm4gdGhlIGFkb2RiIHJlc3VsdA0KCSoNCgkqIEBleGNlcHRpb24gRXhjZXB0aW9uIGlmIHRoZSBxdWVyeSBmYWlsZWQNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2VuSUQoJHNlcW5hbWUsICRlcnJvck1zZyA9ICJEYXRhYmFzZSBlcnJvciIpIHsNCgkJLy9CZSBzdXJlIHdlIGluaXRpYXRlIHRoZSBkYiBjb25uZWN0b3I7DQoJCU9ybURCOjppbml0KCk7DQoJCQ0KCQlPcm1UcmFjZTo6ZGVidWcoImdlbiBJZCh7JHNlcW5hbWV9KSIpOw0KCQkkcmVzdWx0ID0gT3JtREI6OiRkYi0+R2VuSUQoJHNlcW5hbWUpOw0KCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upew0KCQkJT3JtVHJhY2U6OmVycm9yKCRlcnJvck1zZyk7DQoJCQlPcm1UcmFjZTo6ZXJyb3IoIiA+IE15c3FsIHNhaWQgOiAiLk9ybURCOjokZGItPkVycm9yTXNnKCkpOw0KCQkJT3JtVHJhY2U6OmVycm9yKCIgPiBUaGUgR2VuSWQgd2FzIG1hZGUgb24gOiAiLiRzZXFuYW1lKTsNCg0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3JNc2cpOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJHJlc3VsdDsNCgl9CQ0KCQ0KCSAvKioNCiAgICAqIHdpbGwgZXhlY3V0ZSB0aGUgQWRvZGIgIkNyZWF0ZVRhYmxlU1FMIiBmdW5jdGlvbiBhbmQgYWRkIGxvZ3Mgb2YgZXZlcnl0aGluZw0KICAgICogICAgICAgICANCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIHRhYmxlIHVzZWQgZm9yIHNlcXVlbmNlIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgaHFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWVsZHMNCiAgICAqIEByZXR1cm4gdGhlIGFkb2RiIHJlc3VsdA0KCSoNCgkqIEBleGNlcHRpb24gRXhjZXB0aW9uIGlmIHRoZSBxdWVyeSBmYWlsZWQNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gY3JlYXRlVGFibGUoJHRhYmxlTmFtZSwgJGhxbCkgew0KCQkvL0JlIHN1cmUgd2UgaW5pdGlhdGUgdGhlIGRiIGNvbm5lY3RvcjsNCgkJT3JtREI6OmluaXQoKTsNCgkJDQoJCU9ybVRyYWNlOjpkZWJ1ZygiY3JlYXRlVGFibGUoeyR0YWJsZU5hbWV9LCB7JGhxbH0pIik7DQoJCQ0KCQkkc3FsYXJyYXkgPSBPcm1EQjo6JGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCR0YWJsZU5hbWUsIA0KCQkJCQkJCQkJCQkJJGhxbCwNCgkJCQkJCQkJCQkJCU9ybURiOjokdGFib3B0YXJyYXkpOw0KCQkJCQkJCQkJCQkJDQoJCSRyZXN1bHQgPSBPcm1EQjo6JGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upew0KCQkJT3JtVHJhY2U6OmVycm9yKCRlcnJvck1zZyk7DQoJCQlPcm1UcmFjZTo6ZXJyb3IoIiA+IE15c3FsIHNhaWQgOiAiLk9ybURCOjokZGItPkVycm9yTXNnKCkpOw0KCQkJT3JtVHJhY2U6OmVycm9yKCIgPiBUaGUgQ3JlYXRlVGFibGUgd2FzIG1hZGUgb24gOiB7JHRhYmxlTmFtZX0gd2l0aCB7JGhxbH0gcGFyYW1ldGVycyIpOw0KDQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvck1zZyk7DQoJCX0NCgkJDQoJCXJldHVybiAkcmVzdWx0Ow0KCX0NCgkvKioNCiAgICAqIHdpbGwgZXhlY3V0ZSB0aGUgQWRvZGIgIkRyb3BUYWJsZVNRTCIgZnVuY3Rpb24gYW5kIGFkZCBsb2dzIG9mIGV2ZXJ5dGhpbmcNCiAgICAqICAgICAgICAgDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSB0YWJsZSB1c2VkIGZvciBzZXF1ZW5jZSANCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIGhxbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmllbGRzDQogICAgKiBAcmV0dXJuIHRoZSBhZG9kYiByZXN1bHQNCgkqDQoJKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbiBpZiB0aGUgcXVlcnkgZmFpbGVkDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGRyb3BUYWJsZSgkdGFibGVOYW1lKSB7DQoJCS8vQmUgc3VyZSB3ZSBpbml0aWF0ZSB0aGUgZGIgY29ubmVjdG9yOw0KCQlPcm1EQjo6aW5pdCgpOw0KCQkNCgkJT3JtVHJhY2U6OmRlYnVnKCJkcm9wVGFibGUoeyR0YWJsZU5hbWV9KSIpOw0KCQkNCgkJJHNxbGFycmF5ID0gT3JtREI6OiRkaWN0LT5Ecm9wVGFibGVTUUwoJHRhYmxlTmFtZSk7DQoJCSRyZXN1bHQgPSBPcm1EQjo6JGRpY3QtPmV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KCQkNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXsNCgkJCU9ybVRyYWNlOjplcnJvcigkZXJyb3JNc2cpOw0KCQkJT3JtVHJhY2U6OmVycm9yKCIgPiBNeXNxbCBzYWlkIDogIi5Pcm1EQjo6JGRiLT5FcnJvck1zZygpKTsNCgkJCU9ybVRyYWNlOjplcnJvcigiID4gVGhlIERyb3BUYWJsZSB3YXMgbWFkZSBvbiA6IHskdGFibGVOYW1lfSIpOw0KDQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvck1zZyk7DQoJCX0NCgkJDQoJCXJldHVybiAkcmVzdWx0Ow0KCX0NCgkNCgkvKioNCiAgICAqIHdpbGwgZXhlY3V0ZSB0aGUgQWRvZGIgIkNyZWF0ZVNlcXVlbmNlIiBmdW5jdGlvbiBhbmQgYWRkIGxvZ3Mgb2YgZXZlcnl0aGluZw0KICAgICogICAgICAgICANCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIHRhYmxlIHVzZWQgZm9yIHNlcXVlbmNlIA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjcmVhdGVTZXF1ZW5jZSgkc2VxTmFtZSl7DQoJCS8vQmUgc3VyZSB3ZSBpbml0aWF0ZSB0aGUgZGIgY29ubmVjdG9yOw0KCQlPcm1EQjo6aW5pdCgpOw0KCQkNCgkJT3JtVHJhY2U6OmRlYnVnKCJjcmVhdGVTZXF1ZW5jZSh7JHNlcU5hbWV9KSIpOw0KCQkNCgkJT3JtREI6OiRkYi0+Q3JlYXRlU2VxdWVuY2UoJHNlcU5hbWUpOw0KCX0NCgkNCgkvKioNCiAgICAqIHdpbGwgZXhlY3V0ZSB0aGUgQWRvZGIgIkRyb3BTZXF1ZW5jZSIgZnVuY3Rpb24gYW5kIGFkZCBsb2dzIG9mIGV2ZXJ5dGhpbmcNCiAgICAqICAgICAgICAgDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSB0YWJsZSB1c2VkIGZvciBzZXF1ZW5jZSANCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZHJvcFNlcXVlbmNlKCRzZXFOYW1lKXsNCgkJLy9CZSBzdXJlIHdlIGluaXRpYXRlIHRoZSBkYiBjb25uZWN0b3I7DQoJCU9ybURCOjppbml0KCk7DQoJCQ0KCQlPcm1UcmFjZTo6ZGVidWcoImRyb3BTZXF1ZW5jZSh7JHNlcU5hbWV9KSIpOw0KCQkNCgkJT3JtREI6OiRkYi0+RHJvcFNlcXVlbmNlKCRzZXFOYW1lKTsNCgkJDQoJfQ0KCQ0KCS8qKg0KICAgICogd2lsbCBleGVjdXRlIHRoZSBBZG9kYiAiQ3JlYXRlSW5kZXhTUUwiIGZ1bmN0aW9uIHdpdGggb3Igd2l0aG91dCBVTklRVUUgcGFyYW1ldGVyIGFuZCBhZGQgbG9ncyBvZiBldmVyeXRoaW5nDQogICAgKiAgICAgICAgIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgdGFibGUgdXNlZCBmb3Igc2VxdWVuY2UgDQogICAgKiBAcGFyYW0gbWl4ZWQgdGhlIGxpc3Qgb2YgdGhlIEZpZWxkTmFtZSAoYXJyYXkpIG9yIGEgc2luZ2xlIGZpZWxkTmFtZSAoU3RyaW5nKQ0KICAgICogQHBhcmFtIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgaW5kZXggbXVzdCBiZSBVTklRVUUNCiAgICAqIEByZXR1cm4gdGhlIGFkb2RiIHJlc3VsdA0KCSoNCgkqIEBleGNlcHRpb24gRXhjZXB0aW9uIGlmIHRoZSBxdWVyeSBmYWlsZWQNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gY3JlYXRlSW5kZXgoJHRhYmxlTmFtZSwgJGxpc3RGaWVsZHMsICRpc1VuaXF1ZSA9IGZhbHNlKXsNCgkJLy9CZSBzdXJlIHdlIGluaXRpYXRlIHRoZSBkYiBjb25uZWN0b3I7DQoJCU9ybURCOjppbml0KCk7DQoJCQ0KCQlPcm1UcmFjZTo6ZGVidWcoImNyZWF0ZUluZGV4KHskdGFibGVOYW1lfSwgeyIuaW1wbG9kZSgnLCcsJGxpc3RGaWVsZHMpLiJ9LCB7JGlzVW5pcXVlfSkiKTsNCgkJCQkNCgkJLy9DYXNlIDogdW5pcXVlIGluZGV4IG9uIG1hbnkgZmllbGRzDQoJCWlmKGlzX2FycmF5KCRsaXN0RmllbGRzKSkgew0KCQkJJGlkeGZsZHMgPSBpbXBsb2RlKCcsJywgJGxpc3RGaWVsZHMpOw0KCQkJJG1kNSA9IG1kNShzZXJpYWxpemUoJGxpc3RGaWVsZHMpKTsNCgkJfSBlbHNlIHsNCgkJCSRpZHhmbGRzID0gJGxpc3RGaWVsZHM7DQoJCQkkbWQ1ID0gbWQ1KCRsaXN0RmllbGRzKTsNCgkJfQ0KCQlpZigkaXNVbmlxdWUpew0KCQkJJHNxbGFycmF5ID0gT3JtREI6OiRkaWN0LT5DcmVhdGVJbmRleFNRTCgkbWQ1LCAkdGFibGVOYW1lLCAkaWR4ZmxkcywgT3JtREI6OiRpZHhvcHRhcnJheVVuaXF1ZSk7DQoJCX0gZWxzZSB7DQoJCQkkc3FsYXJyYXkgPSBPcm1EQjo6JGRpY3QtPkNyZWF0ZUluZGV4U1FMKCRtZDUsICR0YWJsZU5hbWUsICRpZHhmbGRzKTsNCgkJCS8vZGllKGltcGxvZGUoIiwiLCRzcWxhcnJheSkpOw0KCQl9DQoJCQ0KCQkkcmVzdWx0ID0gT3JtREI6OiRkaWN0LT5leGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkJDQoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7DQoJCQlPcm1UcmFjZTo6ZXJyb3IoJGVycm9yTXNnKTsNCgkJCU9ybVRyYWNlOjplcnJvcigiID4gTXlzcWwgc2FpZCA6ICIuT3JtREI6OiRkYi0+RXJyb3JNc2coKSk7DQoJCQlPcm1UcmFjZTo6ZXJyb3IoIiA+IFRoZSBjcmVhdGVJbmRleCB3YXMgbWFkZSBvbiA6IHskdGFibGVOYW1lfSB3aXRoIHRoZSBmaWVsZHMgOiB7JGxpc3RGaWVsZHN9Iik7DQoNCgkJCXRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yTXNnKTsNCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXN1bHQ7DQoJfQ0KCQ0KCQ0KCQ0KCQ0KfQ0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormentity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybUVudGl0eQ0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCi8qKg0KICogQWJzdHJhY3QgQ2xhc3NlcyBkZXNjcmliaW5nIHRoZSBmcmFtZSBvZiBhbiBPcm1FbnRpdHkgaW50byBPcm0NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQphYnN0cmFjdCBjbGFzcyBPcm1FbnRpdHkNCnsNCgkvKioNCgkgKiBTdHJpbmcgOiBOYW1lIG9mIHRoZSBtb2R1bGUgdGhhdCBjdXJyZW50bHkgdXNlIHRoaXMgZW50aXR5DQoJICogKi8NCglwcml2YXRlICRtb2R1bGVOYW1lOw0KCQ0KCS8qKg0KCSAqIFN0cmluZyA6IHRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBlbnRpdHkNCgkgKiAqLw0KCXByb3RlY3RlZCAkbmFtZTsNCg0KCS8qKg0KCSAqIFN0cmluZyA6IHRoZSBuYW1lIG9mIHRoZSB0YWJsZSBpbiBkYXRhYmFzZQ0KCSAqICovDQoJcHJpdmF0ZSAkZGJuYW1lOw0KCQ0KCS8qKg0KCSAqIFN0cmluZyA6IG5hbWUgb2YgdGhlIHNlcXVlbmNlIGxpbmtlZCB0byB0aGUgdGFibGUgaW4gdGhlIGRhdGFiYXNlLiBNYXkgYmUgTnVsbA0KCSAqICovDQoJcHJpdmF0ZSAkc2VxbmFtZTsNCgkNCgkvKioNCgkgKiBsaXN0IDogZmllbGRzIG1ha2luZyB1cCB0aGUgZW50aXR5DQoJICogKi8NCglwcml2YXRlICRmaWVsZHMgPSBhcnJheSgpOw0KCQ0KCS8qKg0KCSAqIGxpc3QgOiB2YWx1ZXMgb2YgZWFjaCBmaWVsZHMNCgkgKiAqLw0KCXByaXZhdGUgJHZhbHVlcyA9IGFycmF5KCk7DQoJDQoJLyoqDQoJICogU3RyaW5nIDogTmFtZSBvZiB0aGUgZmllbGQgd2ljaCB3aWxsIGJlIHVzZWQgYXMgYSBwcmltYXJ5S2V5DQoJICogKi8NCglwcml2YXRlICRwazsNCgkNCgkvKioNCgkgKiBCb29sZWFuIDogaWYgdHJ1ZSB0aGUgZnJhbWV3b3JrIHdpbGwgdHJ5IHRvIHVzZSB0aGUgaW5uZXIgYXV0b2luY3JlbWVudCBvZiBNeXNxbCBpbnN0ZWFkIGdlbmVyYXRlIGEgbmV3IHRhYmxlIHh4eF9zZXEgbGlrZSB1c3VhbA0KCSAqLw0KCXByaXZhdGUgJGF1dG9pbmNyZW1lbnQgPSBmYWxzZTsNCgkNCgkvKioNCgkgKiBBcnJheSwgY29udGFpbnMgYWxsIHRoZSBpbmRleGVzIG9mIHRoZSBFbnRpdHkuDQoJICoqLwkgDQoJcHJpdmF0ZSAkaW5kZXhlcyA9IGFycmF5KCk7DQoJDQoJLyoqDQoJICogT3JtT3JkZXJCeSA6IGlmIHRydWUgdGhlIGZyYW1ld29yayB3aWxsIHRyeSB0byB1c2UgdGhlIGlubmVyIGF1dG9pbmNyZW1lbnQgb2YgTXlzcWwgaW5zdGVhZCBnZW5lcmF0ZSBhIG5ldyB0YWJsZSB4eHhfc2VxIGxpa2UgdXN1YWwNCgkgKi8NCglwcml2YXRlICRkZWZhdWx0T3JkZXJCeTsNCgkNCgkvKioNCgkgKiBTdHJpbmcgOiBjb25zdGFudCwgc3VmZml4IGZvciB0aGUgc2VxdWVuY2UgbmFtZSBpbnRvIHRoZSBkYXRhYmFzZQ0KCSAqICovDQoJcHVibGljIHN0YXRpYyAkX0NPTlNUX1NFUSA9ICdfc2VxJzsNCgkvKioNCgkgKiBTdHJpbmcgOiBjb25zdGFudCwgc3VmZml4IHVzZWQgdG8gbmFtZWQgdGhlIHRhYmxlIGludG8gZGF0YWJhc2UgZm9yIGEgbW9kdWxlDQoJICogKi8NCglwdWJsaWMgc3RhdGljICRfQ09OU1RfTU9EID0gJ21vZHVsZSc7DQoJDQoJDQoJDQogICAgLyoqDQogICAgICogY29uc3RydWN0b3IgcHJvdGVjdGVkIHRvIGF2b2lkIGEgZGlyZWN0IGluc3RhbnRpYXRpb24gbGlrZSAibmV3IE9ybUVudGl0eSgpIg0KICAgICAqIEVhY2ggdGltZSBhIGVudGl0eSBpcyBjb25zdHJ1Y3RlZCwgd2UgcGxhY2UgYSBjb3B5IGludG8gdGhlIGF1dG9sb2FkZXIuDQogICAgICogDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdobyBjYWxsaW5nIHRoaXMgbWV0aG9kIChzbyBub3QgIk9ybSIpDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFByZWZpeCB0byB1c2UgaW50byBkYXRhYmFzZSBmb3IgdGFibGUuIElmIG5vdCBzZXR0ZWQsIGl0IHdpbGwgdXNlIHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlDQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFRoZSBuYW1lIG9mIHRhYmxlIGZvciB0aGlzIGVudGl0eS4gSWYgbm90IHNldHRlZCwgaXQgd2lsbCB1c2UgdGhlIG5hbWUgb2YgeW91ciBlbnRpdHkNCiAgICAgKg0KICAgICAqIEByZXR1cm4gT3JtRW50aXR5IHRoZSBlbnRpdHkgYXMgYSBuZXcgaW5zdGFuY2UNCiAgICAgKiANCiAgICAgKiBAc2VlIE15QXV0b2xvYWQNCiAgICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZU5hbWUsICRuYW1lLCAkcHJlZml4ZSA9IG51bGwsICRkYk5hbWUgPSBudWxsKSB7DQoJCSR0aGlzLT5tb2R1bGVOYW1lID0gc3RydG9sb3dlcigkbW9kdWxlTmFtZSk7DQoJCSR0aGlzLT5uYW1lID0gc3RydG9sb3dlcigkbmFtZSk7DQoJCQ0KCQkkdGhpcy0+ZGJuYW1lID0gJHRoaXMtPm5hbWU7DQoJCWlmKCFlbXB0eSgkZGJOYW1lKSkgew0KCQkJJHRoaXMtPmRibmFtZSA9IHN0cnRvbG93ZXIoJGRiTmFtZSk7DQoJCX0NCgkJDQoJCWlmKGVtcHR5KCRwcmVmaXhlKSkgew0KCQkJJHByZWZpeGUgPSAkdGhpcy0+bW9kdWxlTmFtZTsNCgkJfSBlbHNlIHsNCgkJCSRwcmVmaXhlID0gc3RydG9sb3dlcigkcHJlZml4ZSk7DQoJCX0NCgkJDQoJCSR0aGlzLT5kYm5hbWUgPSBjbXNfZGJfcHJlZml4KCkuT3JtRW50aXR5OjokX0NPTlNUX01PRC4nXycuJHByZWZpeGUuJ18nLiR0aGlzLT5kYm5hbWU7DQoJCQ0KCQkvLyBXZSBhZGQgYW4gaW5zdGFuY2Ugb2Ygb3VyLXNlcmYgaW50byB0aGUgYXV0b2xvYWQNCgkJbXlBdXRvbG9hZDo6YWRkSW5zdGFuY2UoJHRoaXMtPm1vZHVsZU5hbWUsJHRoaXMpOw0KCX0NCgkNCiAgICAvKioNCiAgICAqICBDYW4gYmUgb3ZlcnJpZGUuIExldCB5b3Ugc3BlY2lmeSBob3cgeW91ciB0YWJsZSBtdXN0IGJlIHBvcHVsYXRlZCANCiAgICAqIGFmdGVyIHlvdSBhc2tlZCB0byBjcmVhdGUgdGhlIHRhYmxlIG9mIHlvdXIgRW50aXR5DQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaW5pdFRhYmxlKCl7fQ0KICAgIAkNCiAgICAvKioNCiAgICAqIEFkZCBhIG5ldyBGaWVsZCBpbnRvIHRoZSBsaXN0IG9mIEZpZWxkcw0KICAgICogDQogICAgKiBAcGFyYW0gT3JtRmllbGQgdGhlIG9iamVjdCBGaWVsZCB0byBhZGQNCgkqIA0KCSogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBpZiB3ZSB0cnkgdG8gdXNlIG1vcmUgdGhhbiBhIHNpbmdsZSBQcmltYXJ5S2V5IGluIHRoZSBlbnRpdHkNCiAgICAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhZGQoT3JtRmllbGQgJG5ld0ZpZWxkKSB7DQoJCSR0aGlzLT5maWVsZHNbJG5ld0ZpZWxkLT5nZXROYW1lKCldID0gJG5ld0ZpZWxkOw0KDQoJCS8vQWRkIGEgc2VxdWVuY2Ugb24gdGhlIGtleXMNCgkJaWYoJG5ld0ZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgew0KCQkJaWYoJHRoaXMtPnBrICE9IG51bGwpDQoJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCJPcm0gZG9lc24ndCBzdXBwb3J0IG11bHRpLVByaW1hcnktS2V5IGludG8gdGhlIEVudGl0eSAiLiR0aGlzLT5uYW1lKTsNCgkJCQkNCgkJCSR0aGlzLT5wayA9ICRuZXdGaWVsZC0+Z2V0TmFtZSgpOw0KCQkJaWYoISR0aGlzLT5pc0F1dG9pbmNyZW1lbnQoKSkgeyAvLyBubyBzZXF1ZW5jZSBpZiBhdXRvaW5jcmVtZW50IHVzZWQNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2VxbmFtZSA9ICR0aGlzLT5kYm5hbWUuT3JtRW50aXR5OjokX0NPTlNUX1NFUTsNCiAgICAgICAgICAgIH0NCgkJfQ0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgUHJpbWFyeUtleSBGaWVsZA0KICAgICogDQogICAgKiBAcmV0dXJuIE9ybUZpZWxkIHRoZSBQcmltYXJ5S2V5IEZpZWxkDQogICAgKiBAZXhjZXB0aW9uIE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBubyBQcmltYXJ5S2V5IEZpZWxkDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGsoKSB7DQoJCWlmKCR0aGlzLT5wayA9PSBudWxsKQ0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidGhlIGVudGl0eSB7JHRoaXMtPmdldE5hbWUoKX0gZG9lc24ndCBoYXZlIGFueSBQcmltYXJ5LUtleSIpOw0KCQkNCgkJcmV0dXJuICR0aGlzLT5maWVsZHNbJHRoaXMtPnBrXTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgRmllbGRzDQogICAgKiANCiAgICAqIEByZXR1cm4gYXJyYXk8RmllbGQ+IGFuIGFycmF5IHdpdGggYWxsIHRoZSBGaWVsZHMNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkcygpIHsNCgkJcmV0dXJuICR0aGlzLT5maWVsZHM7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogcmV0dXJuIGEgRmllbGQgYnkgbmFtZQ0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBmaWVsZCBuYW1lDQogICAgKiBAcmV0dXJuIE9ybUZpZWxkIHRoZSBGaWVsZA0KICAgICogDQogICAgKiBAZXhjZXB0aW9uIE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBubyBGaWVsZCBleGlzdCBmb3IgdGhlIG5hbWUNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZEJ5TmFtZSgkZmllbGROYW1lKSB7DQoJCQ0KCQlpZihlbXB0eSgkZmllbGROYW1lKSl7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZnVuY3Rpb24gZ2V0RmllbGRCeU5hbWUoXCRmaWVsZE5hbWUpIGRvZXNuJ3QgYWNjZXB0IGEgbnVsbCBwYXJhbWV0ZXIgKGVudGl0eSA6IHskdGhpcy0+Z2V0TmFtZSgpfSkiKTsNCgkJfQ0KCQ0KCQlpZighYXJyYXlfS0VZX2V4aXN0cygkZmllbGROYW1lLCR0aGlzLT5maWVsZHMpKXsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZ1bmN0aW9uIGdldEZpZWxkQnlOYW1lKFwkZmllbGROYW1lKSA6IFRoZSBmaWVsZCB7JGZpZWxkTmFtZX0gZG9lc24ndCBleGlzdCBpbnRvIHRoZSBlbnRpdHkgeyR0aGlzLT5nZXROYW1lKCl9Iik7DQoJCX0NCgkJDQoJCXJldHVybiAkdGhpcy0+ZmllbGRzWyRmaWVsZE5hbWVdOw0KCQkNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdHJ1ZSBpZiBhIEZpZWxkIGV4aXN0cyBmb3IgdGhlIG5hbWUNCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbmFtZQ0KICAgICogQHJldHVybiBCb29sZWFuIGlmIGV4aXN0cw0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGlzRmllbGRCeU5hbWVFeGlzdHMoJG5hbWUpIHsNCgkJcmV0dXJuIGlzc2V0KCR0aGlzLT5maWVsZHNbJG5hbWVdKTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRhYmxlIGludG8gdGhlIGRhdGFiYXNlDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSBpbnRvIHRoZSBkYXRhYmFzZQ0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0RGJuYW1lKCkgew0KCQlyZXR1cm4gJHRoaXMtPmRibmFtZTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGVudGl0eQ0KICAgICogDQogICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkgew0KCQlyZXR1cm4gJHRoaXMtPm5hbWU7DQoJfQ0KCQ0KCS8qKg0KCSAqICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgbW9kdWxlDQoJICogIA0KCSAqICBAcmV0dXJuIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBtb2R1bGUuDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRNb2R1bGVOYW1lKCkgew0KCQlyZXR1cm4gJHRoaXMtPm1vZHVsZU5hbWU7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzZXF1ZW5jZSAoaWYgZXhpc3RzKQ0KICAgICogDQogICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgc2VxdWVuY2Ugb3IgTlVMTA0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VxbmFtZSgpIHsNCgkJaWYoZW1wdHkoJHRoaXMtPnNlcW5hbWUpKQ0KCQkJcmV0dXJuIG51bGw7DQoJCQ0KCQlyZXR1cm4gJHRoaXMtPnNlcW5hbWU7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0dXJuIHRoZSB2YWx1ZSBmb3IgYSBGaWVsZCBieSB0aGUgbmFtZSANCiAgICAqIAkNCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIG5hbWUgb2YgdGhlIEZpZWxkDQogICAgKiBAcmV0dXJuIG1peGVkIHRoZSB2YWx1ZSBmb3IgdGhlIGZpZWxkDQogICAgKiANCiAgICAqIEBleGNlcHRpb24gT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIG5vIEZpZWxkIGV4aXN0cyBmb3IgdGhlIG5hbWUNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXQoJGZpZWxkTmFtZSkgew0KCQkNCgkJaWYoZW1wdHkoJGZpZWxkTmFtZSkpew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGZ1bmN0aW9uIGdldChcJGZpZWxkTmFtZSkgZG9lc24ndCBhY2NlcHQgYSBudWxsIHBhcmFtZXRlciAoZW50aXR5IDogeyR0aGlzLT5nZXROYW1lKCl9KSIpOw0KCQl9DQoJDQoJCWlmKCFhcnJheV9LRVlfZXhpc3RzKCRmaWVsZE5hbWUsJHRoaXMtPmZpZWxkcykpew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRnVuY3Rpb24gZ2V0KFwkZmllbGROYW1lKSA6IFRoZSBmaWVsZCB7JGZpZWxkTmFtZX0gZG9lc24ndCBleGlzdCBpbnRvIHRoZSBlbnRpdHkgeyR0aGlzLT5nZXROYW1lKCl9Iik7DQoJCX0NCgkJDQoJCWlmKCFhcnJheV9LRVlfZXhpc3RzKCRmaWVsZE5hbWUsJHRoaXMtPnZhbHVlcykpew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJDQoJCXJldHVybiAkdGhpcy0+dmFsdWVzWyRmaWVsZE5hbWVdOw0KCX0NCgkNCiAgIC8qKg0KICAgICogU2V0IGEgdmFsdWUgdG8gYSBGaWVsZA0KICAgICogICAgIA0KICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgRmllbGQNCiAgICAqIEBwYXJhbSBtaXhlZCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBGaWVsZA0KICAgICogDQogICAgKiBAZXhjZXB0aW9uIE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBubyBGaWVsZCBleGlzdHMgZm9yIHRoZSBuYW1lDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0KCRmaWVsZE5hbWUsJHZhbHVlKSB7DQoJCQ0KCQlpZihlbXB0eSgkZmllbGROYW1lKSl7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZnVuY3Rpb24gc2V0KFwkZmllbGROYW1lKSBkb2Vzbid0IGFjY2VwdCBhIG51bGwgcGFyYW1ldGVyIChlbnRpdHkgOiB7JHRoaXMtPmdldE5hbWUoKX0pIik7DQoJCX0NCgkNCgkJaWYoIWFycmF5X0tFWV9leGlzdHMoJGZpZWxkTmFtZSwkdGhpcy0+ZmllbGRzKSl7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJGdW5jdGlvbiBzZXQoXCRmaWVsZE5hbWUpIDogVGhlIGZpZWxkIHskZmllbGROYW1lfSBkb2Vzbid0IGV4aXN0IGludG8gdGhlIGVudGl0eSB7JHRoaXMtPmdldE5hbWUoKX0iKTsNCgkJfQ0KCQkNCgkJJHRoaXMtPnZhbHVlc1skZmllbGROYW1lXSA9ICR2YWx1ZTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdGhlIHZhbHVlcyBmb3IgYWxsIHRoZSBGaWVsZHMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIA0KICAgICogICoga2V5ID0gbmFtZSBvZiB0aGUgRmllbGQsIGFuZCANCiAgICAqICAqIHZhbHVlID0gaXRzIHZhbHVlDQogICAgKiANCiAgICAqIEByZXR1cm4gYXJyYXkgYW4gYXNzb2NpYXRpdmUgYXJyYXkNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlcygpIHsNCgkJcmV0dXJuICR0aGlzLT52YWx1ZXM7DQoJfQ0KCQkNCgkvKioNCgkgKiBTaG9ydGN1dCB0byBzYXZlIHRoZSBlbnRpdHkuIGlmIHRoZSBwcmltYXJ5S2V5IGlzIHNldHRlZCwgaXQgd2lsbCBiZSBhbiB1cGRhdGUgb3BlcmF0aW9uLCBlbHNlIGFuIGluc2VydC4NCgkgKg0KCSAqIEByZXR1cm4gdGhlIGVudGl0eSBzYXZlZCB3aXRoIGl0cyBuZXcgbmV3IElkIChjdXN0b21lcl9pZCBpbiBteSBleGFtcGxlKSBpZiBpdCdzIGFuIGluc2VydGlvbg0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZSgpew0KCQlpZigkdGhpcy0+cGsgPT0gbnVsbCkgew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigieW91IGNhbid0IHNhdmUgdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgUHJpbWFyeS1LZXkiKTsNCgkJfQ0KCQ0KCQlpZigkdGhpcy0+Z2V0KCR0aGlzLT5waykgPT0gbnVsbCkgew0KCQkJcmV0dXJuIE9ybUNvcmU6Omluc2VydEVudGl0eSgkdGhpcyk7DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4gT3JtQ29yZTo6dXBkYXRlRW50aXR5KCR0aGlzKTsNCgkJfQ0KCX0NCgkNCgkvKioNCgkgKiBTaG9ydGN1dCB0byBkZWxldGUgdGhlIGVudGl0eQ0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCl7DQoJCWlmKCR0aGlzLT5wayA9PSBudWxsKSB7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ5b3UgY2FuJ3QgZGVsZXRlIHRoZSBlbnRpdHkgIi4kdGhpcy0+Z2V0TmFtZSgpLiIgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW55IFByaW1hcnktS2V5Iik7DQoJCX0NCgkJDQoJCWlmKCR0aGlzLT5nZXQoJHRoaXMtPnBrKSA9PSBudWxsKSB7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ5b3UgY2FuJ3QgZGVsZXRlIHRoZSBlbnRpdHkgIi4kdGhpcy0+Z2V0TmFtZSgpLiIgYmVjYXVzZSBpdHMgUHJpbWFyeS1LZXkgZG9lc24ndCBoYXZlIGFueSB2YWx1ZSIpOw0KCQl9DQoJCQ0KCQlPcm1Db3JlOjpkZWxldGVCeUlkcygkdGhpcywgYXJyYXkoJHRoaXMtPmdldCgkdGhpcy0+cGspKSk7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogQ2FuIGJlIG92ZXJyaWRkZW4gTGV0IHlvdSBtb2RpZnkgc29tZSBkYXRhIGp1c3QgYmVmb3JlIHNhdmluZyB0aGUgZGF0YSBpbnRvIHRoZSBkYXRhdGFibGUuDQogICAgKiANCiAgICAqIEBwYXJhbSBhcnJheSBhbGwgdGhlIHZhbHVlcyB0byBwcm9jZXNzDQogICAgKiBAcGFyYW0gYXJyYXkgbW9yZSBwYXJhbWV0ZXJzIGlmIHlvdSBuZWVkLCBpZiB5b3Ugd2FudA0KICAgICogDQogICAgKiBAcmV0dXJuIG1peGVkIHRvIGRlZmluZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NWYWx1ZUZvclNhdmUoJHJvd3MsICRhcmdzID0gbnVsbCl7DQoJDQoJCXJldHVybiAkcm93czsNCgl9DQoJDQoJLyoqDQoJICogQ2FsbCB0aGUgY29tcGFyZVRvIGZ1bmN0aW9uIGludG8geW91ciBFbnRpdHkgdG8gc29ydCB0aGUgRW50aXRpZXMuDQoJICogVG8gYWN0aXZhdGUgdGhpcyBmdW5jdGlvbmFsaXR5LCBUaGUgRW50aXR5IG11c3QgaW1wbGVtZW50IElTb3J0YWJsZSBJbnRlcmZhY2UuDQoJICoNCgkgKiBFeGFtcGxlIG9mIGZ1bmN0aW9uIGNvbXBhcmVUbygpIGluIGEgQ3VzdG9tZXIgRW50aXR5DQoJICogIDxjb2RlPg0KCSAqICAgICAgIA0KCSAqCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tcGFyZVRvKE9ybUVudGl0eSAkZW50aXR5MSwgT3JtRW50aXR5ICRlbnRpdHkyKQ0KCSAqCXsNCgkgKgkJJGNvbXBhcmUgPSBzdHJjbXAoJGVudGl0eTEtPmdldCgnbmFtZScpLCAkZW50aXR5Mi0+Z2V0KCduYW1lJykpOw0KCSAqICAgICAgCXJldHVybiAkY29tcGFyZTsNCgkgKgl9DQoJICogDQoJICogIDwvY29kZT4NCgkgKg0KCSAqIEBwYXJhbSBhcnJheTxPcm1FbnRpdHk+IHRoZSBsaXN0IG9mIEVudGl0eSB0byBzb3J0DQoJICoNCgkgKiBAcmV0dXJuIGFycmF5PE9ybUVudGl0eT4gdGhlIGxpc3Qgb2YgRW50aXR5IGdyYWNlZnVsbHkgc29ydGVkDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzb3J0KGFycmF5ICRhcnJheSkgew0KDQoJCXVzb3J0KCRhcnJheSwgYXJyYXkoZ2V0X2NhbGxlZF9jbGFzcygpLCAiY29tcGFyZVRvIikpOw0KCQ0KCQlyZXR1cm4gJGFycmF5Ow0KCX0NCgkNCgkvKioNCgkgKiBNYXkgYmUgb3ZlcnJpZGUgaW4geW91ciBFbnRpdHkncyBkZWZpbml0aW9uIHRvIGFsbG93IFNlYXJjaCBtb2R1bGUgaW5kZXhpbmcgeW91ciBlbnRpdGllcydzIGRhdGENCgkgKiANCgkgKiBFeGFtcGxlIG9mIGZ1bmN0aW9uIGlzSW5kZXhhYmxlKCkgaW4gYSBDdXN0b21lciBFbnRpdHkNCgkgKiAgDQoJICogIDxjb2RlPg0KCSAqICAgICAgIA0KCSAqCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNJbmRleGFibGUoKQ0KCSAqCXsNCgkgKgkJcmV0dXJuIHRoaXMtPmdldFsnaXNBY3RpdmF0ZWQnXTsNCgkgKgl9DQoJICogDQoJICogIDwvY29kZT4NCgkgKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0luZGV4YWJsZSgpew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCQkNCgkvKioNCiAgICAqIGdldHRlciBmb3IgYXV0b2luY3JlbWVudA0KICAgICogDQogICAgKiBAcmV0dXJuIHRydWUgb2YgdGhlIEZpZWxkIGlzIGF1dG9pbmNyZW1lbnQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBJc0F1dG9pbmNyZW1lbnQoKSB7DQoJCXJldHVybiAkdGhpcy0+YXV0b2luY3JlbWVudDsNCgl9DQoJDQoJLyoqDQoJICogVGhpcyBmdW5jdGlvbiB3aWxsIGxldCB5b3UgZGVmaW5lIHNvbWUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgeW91ciBFbnRpdHkNCgkgKiAgICA9PiB0aGUgZmllbGQgbXVzdCBiZSBhdXRvLWluY3JlbWVudGFsDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnYXJuaXNoQXV0b2luY3JlbWVudCgpew0KCQkNCgkJaWYoJHRoaXMtPmdldFBrKCkgPT0gbnVsbCB8fCAkdGhpcy0+Z2V0UGsoKS0+Z2V0VHlwZSgpICE9IE9ybUNBU1Q6OiRJTlRFR0VSKXsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBkb24ndCBoYXZlIGFueSBJTlRFR0VSIFBLIGFuZCBzbyBjYW4ndCBiZSBkZWZpbmVkIGF1dG9pbmNyZW1lbnQiKTsNCgkJfQ0KCQkkdGhpcy0+YXV0b2luY3JlbWVudCA9IHRydWU7DQoJCQ0KCQkvL1JlbW92ZSBhbnkgc2VxIHRoYXQgY291bGQgYmUgYWRkIGJlZm9yZQ0KICAgICAgICAkdGhpcy0+c2VxbmFtZSA9IG51bGw7DQoJfQ0KCQ0KCS8qKg0KCSAqIFJldHVybiANCgkgKiBAcmV0dXJuIGFycmF5IDogdGhlIGxpc3Qgb2YgY291cGxlIG9mIHVuaXF1ZSBpbmRleA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0SW5kZXhlcygpIHsNCgkJcmV0dXJuICR0aGlzLT5pbmRleGVzOw0KCX0NCgkNCgkvKioNCgkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGV0IHlvdSBkZWZpbmUgc29tZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB5b3VyIEVudGl0eQ0KCSAqICAgID0+IHRoZSBmaWVsZCBoYXZlIG9uZSBvciBtYW55IChVbmlxdWU/KSBJbmRleGUgb24gb25lIG9yIG1hbnkgY29sdW1ucy4NCgkgKg0KCSAqICBleGFtcGxlIDogDQoJICogIDxjb2RlPg0KCSAqICAgICBteUVudGl0eS0+YWRkSW5kZXhlcygnZmllbGQxJyx0cnVlKTsNCgkgKiAgICAgbXlFbnRpdHktPmFkZEluZGV4ZXMoYXJyYXkoJ2ZpZWxkMicsICdmaWVsZDMnKSk7DQoJICogIDxjb2RlPg0KCSAqICB3aWxsIGNyZWF0ZSAxIHVuaXF1ZSBpbmRleCBvbiBmaWVsZDEgYW5kIDEgaW5kZXggb24gZmllbGQyLGZpZWxkMw0KCSAqDQoJICogQHBhcmFtIG1peGVkIE9uZSAoc3RyaW5nKSBvciBtYW55IChhcnJheSkgbmFtZSBvZiBmaWVsZCB0byBiZSBpbmRleGluZw0KCSAqIEBwYXJhbSBib29sZWFuIGlmIHRoZSBpbmRleCBtdXN0IGJlIFVOSVFVRSAoZGVmYXVsdCA9IGZhbHNlKSANCgkgKg0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gYWRkSW5kZXhlcygkZmllbGROYW1lcywgJGlzVW5pcXVlPWZhbHNlKXsNCgkJDQoJCWlmKCFpc19hcnJheSgkZmllbGROYW1lcykpew0KCQkJJGZpZWxkTmFtZXMgPSBhcnJheSgkZmllbGROYW1lcyk7DQoJCX0NCgkJDQoJCS8vVGVzdCB0aGUgZXhpc3RlbmNlIG9mIGVhY2ggbWVtYmVyDQoJCWZvcmVhY2goJGZpZWxkTmFtZXMgYXMgJGZpZWxkTmFtZSl7DQoJCQlpZighJHRoaXMtPmlzRmllbGRCeU5hbWVFeGlzdHMoJGZpZWxkTmFtZSkpew0KCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFkZEluZGV4ZXMoXCRmaWVsZE5hbWVzLCBcJGlzVW5pcXVlPWZhbHNlKSA6IHskZmllbGROYW1lc30gaXMgbm90IGEgZXhpc3RpbmcgRmllbGQgb2YgdGhlIEVudGl0eSB7JHRoaXMtPmdldE5hbWUoKX0iKTsNCgkJCX0NCgkJfQ0KCQ0KCQkkdGhpcy0+aW5kZXhlc1tdID0gYXJyYXkoJ2ZpZWxkcycgPT4gJGZpZWxkTmFtZXMsICd1bmlxdWUnID0+ICRpc1VuaXF1ZSk7DQoJfQ0KCQ0KCQ0KCS8qKg0KCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBsZXQgeW91IGRlZmluZSBzb21lIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgRW50aXR5DQoJICogICAgPT4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGZpZWxkIGlzIC4uLg0KCSAqDQoJICogIGV4IDogbXlFbnRpdHktPmdhcm5pc2hEZWZhdWx0VmFsdWUoJ2ZpZWxkMScsICdzb21lIHRleHQnKQ0KCSAqDQoJICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgRmllbGQNCgkgKiBAcGFyYW0gTWl4ZWQgdGhlIGRlZmF1bHQgdmFsdWUuDQoJICoNCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGdhcm5pc2hEZWZhdWx0VmFsdWUoJGZpZWxkTmFtZSwkZGVmYXVsdFZhbHVlKXsNCgkJaWYoISR0aGlzLT5pc0ZpZWxkQnlOYW1lRXhpc3RzKCRmaWVsZE5hbWUpKXsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImdhcm5pc2hEZWZhdWx0KCkgb25seSBhY2NlcHQgdmFsaWQgRmllbGQgYnV0ICIuJGZpZWxkTmFtZS4iIGlzIG5vdCBhIGV4aXN0aW5nIEZpZWxkIGluIHRoZSBFbnRpdHkgIi4kdGhpcy0+Z2V0TmFtZSgpKTsNCgkJfQ0KCQkNCgkJLy9mb3JiaWQgYSBkZWZhdWx0IHZhbHVlIG9uIGEgbnVsbGFibGUgZmllbGQgQmVjYXVzZSBpdCdzIG1ha2Ugbm8gc2Vuc2UNCgkJaWYoJHRoaXMtPmdldEZpZWxkQnlOYW1lKCRmaWVsZE5hbWUpLT5pc051bGxhYmxlKCkpew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidGhlIEZpZWxkICIuJGZpZWxkTmFtZS4iIGluIHRoZSBFbnRpdHkgIi4kdGhpcy0+Z2V0TmFtZSgpLiIgY2FuJ3QgYWNjZXB0IGEgZGVmYXVsdCB2YWx1ZSBiZWNhdXNlIGl0J3Mgc2V0dGVkIE51bGxhYmxlIik7DQoJCX0NCgkJDQoJCSR0aGlzLT5nZXRGaWVsZEJ5TmFtZSgkZmllbGROYW1lKS0+c2V0RGVmYXVsdFZhbHVlKCRkZWZhdWx0VmFsdWUpOw0KCQkNCgl9DQoJDQoJLyoqDQoJICogVGhpcyBmdW5jdGlvbiB3aWxsIGxldCB5b3UgZGVmaW5lIHNvbWUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgeW91ciBFbnRpdHkNCgkgKiAgICA9PiB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGlzIC4uLg0KCSAqDQoJICogIGV4IDogbXlFbnRpdHktPmdhcm5pc2hEZWZhdWx0T3JkZXJCeShuZXcgT3JtT3JkZXJCeSgpLT5hZGRBc2MoJ2ZpZWxkMScpLT5hZGREZXNjKCdmaWVsZDInKSkNCgkgKg0KCSAqIEBwYXJhbSBPcm1vcmRlckJ5IHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIuDQoJICoNCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGdhcm5pc2hEZWZhdWx0T3JkZXJCeShPcm1PcmRlckJ5ICRkZWZhdWx0T3JkZXJCeSl7DQoJCWZvcmVhY2goJGRlZmF1bHRPcmRlckJ5IGFzICRmaWVsZE5hbWUgPT4gJHZhbHVlKSB7DQoJCQlpZighJHRoaXMtPmlzRmllbGRCeU5hbWVFeGlzdHMoJGZpZWxkTmFtZSkpew0KCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImdhcm5pc2hEZWZhdWx0T3JkZXJCeSgpIG9ubHkgYWNjZXB0IHZhbGlkIEZpZWxkIGJ1dCAiLiRmaWVsZE5hbWUuIiBpcyBub3QgYSBleGlzdGluZyBGaWVsZCBpbiB0aGUgRW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKSk7DQoJCQl9DQoJCX0NCgkJJHRoaXMtPmRlZmF1bHRPcmRlckJ5ID0gJGRlZmF1bHRPcmRlckJ5Ow0KCX0NCgkNCgkvKioNCgkgKiBSZXR1cm4gDQoJICogQHJldHVybiBPcm1PcmRlckJ5IDogZGVmYXVsdCBPcm1PcmRlckJ5DQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0T3JkZXJCeSgpIHsNCgkJcmV0dXJuICR0aGlzLT5kZWZhdWx0T3JkZXJCeTsNCgl9DQoJDQoJDQp9DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormentityassociation.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgT3JtRW50aXR5QXNzb2NpYXRpb24gQ2xhc3Mgd2hpY2ggZXh0ZW5kcyBPcm1FbnRpdHkgY2xhc3MNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEFic3RyYWN0IENsYXNzIHdoaWNoIGRlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBmb3IgYW4gQXNzb2NpYXRpdmUgRW50aXR5DQogKiAgICANCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQphYnN0cmFjdCBjbGFzcyBPcm1FbnRpdHlBc3NvY2lhdGlvbiBleHRlbmRzIE9ybUVudGl0eSANCnsNCglwcml2YXRlICRuYkZpZWxkID0gMDsNCg0KICAgIC8qKg0KICAgICAqIGNvbnN0cnVjdG9yIHByb3RlY3RlZCB0byBhdm9pZCBhIGRpcmVjdCBpbnN0YW5jaWF0aW9uIGxpa2UgIm5ldyBPcm1FbnRpdHlBc3NvY2lhdGlvbigpIg0KICAgICAqIEVhY2ggdGltZSBhIGVudGl0eSBpcyBjb25zdHJ1Y3RlZCwgd2UgcGxhY2UgYSBjb3B5IGludG8gdGhlIGF1dG9sb2FkZXIuDQogICAgICogDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdobyBjYWxsaW5nIHRoaXMgbWV0aG9kIChzbyBub3QgIk9ybSIpDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFByZWZpeCB0byB1c2UgaW50byBkYXRhYmFzZSBmb3IgdGFibGUuIElmIG5vdCBzZXR0ZWQsIGl0IHdpbGwgdXNlIHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlDQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFRoZSBuYW1lIG9mIHRhYmxlIGZvciB0aGlzIGVudGl0eS4gSWYgbm90IHNldHRlZCwgaXQgd2lsbCB1c2UgdGhlIG5hbWUgb2YgeW91ciBlbnRpdHkNCiAgICAgKg0KICAgICAqIEByZXR1cm4gT3JtRW50aXR5QXNzb2NpYXRpb24gdGhlIGVudGl0eSBhcyBhIG5ldyBpbnN0YW5jZQ0KICAgICAqIA0KICAgICAqIEBzZWUgTXlBdXRvbG9hZA0KICAgICAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbW9kdWxlTmFtZSwgJG5hbWUsJHByZWZpeGUgPSBudWxsLCAkZGJOYW1lID0gbnVsbCkNCgl7DQoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJG1vZHVsZU5hbWUsICRuYW1lLCAkcHJlZml4ZSwgJGRiTmFtZSk7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogQWRkIGEgbmV3IEZpZWxkDQogICAgKiANCiAgICAqIEN1cnJlbnRseSwgdGhlIE9ybSBTeXN0ZW0gZG9lbid0IGFsbG93IG1vcmUgdGhhbiB0d28gRmllbGQgZm9yIGFuIEVudGl0eUFzc29jaWF0aW9uDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1GaWVsZCB0aGUgRmllbGQgdG8gYWRkLg0KCSoNCgkqIEBleGNlcHRpb24gT3JtSWxsZWdhbENvbmZpZ3VyYXRpb25FeGNlcHRpb24gaWYgd2UgdHJ5IHRvIHVzZSBtb3JlIHRoYW4gdHdvIEZpZWxkcyBpbiB0aGUgZW50aXR5DQogICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkKE9ybUZpZWxkICRuZXdGaWVsZCkNCgl7DQoJCSR0aGlzLT5uYkZpZWxkICsrOw0KCQkNCgkJaWYoJHRoaXMtPm5iRmllbGQgPiAyKQ0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uICgiSXQncyBpbXBvc3NpYmxlIHRvIHVzZSBtb3JlIHRoYW4gdHdvIEZpZWxkIGluIHRoZSBFbnRpdHlBc3NvY2lhdGlvbiAiLiAkdGhpcy0+Z2V0TmFtZSgpKTsNCgkJCQkNCgkJcGFyZW50OjphZGQoJG5ld0ZpZWxkKTsNCgl9DQoNCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormexample.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgT3JtRXhhbXBsZSBDbGFzcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCiANCi8qKg0KICogUmVwcmVzZW50cyBhIGdyb3VwIG9mIGRpZmZlcmVudHMgT3JtQ3JpdGVyaWEgKENyaXRlcmlhcykgdG8gcHJvY2VzcyBhIHNlYXJjaCAiQnkgRXhhbXBsZSIgb24gYSBPcm1FbnRpdHkgaW4gRGF0YWJhc2UNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQpmaW5hbCBjbGFzcyBPcm1FeGFtcGxlIA0Kew0KCXByaXZhdGUgJENyaXRlcmlhcyA9IGFycmF5KCk7DQoJDQogICAgLyoqDQogICAgKiBQdWJsaWMgQ29uc3RydWN0b3INCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCgl7DQoJfQ0KCQ0KICAgIA0KICAgIC8qKg0KICAgICogQWRkIGEgbmV3IENyaXRlcmlhIG9uIHRoZSBleGlzdGluZyBsaXN0DQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgTmFtZSBvZiB0aGUgZmllbGQgDQogICAgKiBAcGFyYW0gT3JtVHlwZUNyaXRlcmlhIFR5cGUgb2YgQ3JpdGVyaWENCiAgICAqIEBwYXJhbSBhcnJheSBhbGwgdGhlIHBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIHBhcmFtZXRlciAkdHlwZUNyaXRlcmlhDQogICAgKiBAcGFyYW0gYm9vbGVhbiBbT3B0aW9ubmFsXSBpZiB3ZSBtdXN0IGlnbm9yZSB0aGUgY2FzZSAoYXplIGVxdWFscyBBWkUpIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiDQogICAgKiANCiAgICAqIEBzZWUgT3JtVHlwZUNyaXRlcmlhDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gYWRkQ3JpdGVyaWEoJGZpZWxkbmFtZSwgJHR5cGVDcml0ZXJpYSwgJHBhcmFtc0NyaXRlcmlhLCAkaWdub3JlQ2FzZSA9IGZhbHNlKQ0KCXsNCgkJaWYoIWlzX2FycmF5KCRwYXJhbXNDcml0ZXJpYSkpDQoJCXsNCgkJCXRocm93IG5ldyBFeGNlcHRpb24oInRoZSBwYXJhbWV0ZXIgXCRwYXJhbXNDcml0ZXJpYSBmb3IgdGhlIENyaXRlcmlhIG9mIHRoZSBGaWVsZCBbIi4kZmllbGRuYW1lLiJdIG11c3QgYmUgYW4gYXJyYXkiKTsNCgkJfQ0KCQkNCgkJJHRoaXMtPkNyaXRlcmlhc1tdID0gbmV3IE9ybUNyaXRlcmlhKCRmaWVsZG5hbWUsICR0eXBlQ3JpdGVyaWEsICRwYXJhbXNDcml0ZXJpYSwgJGlnbm9yZUNhc2UpOw0KCX0NCg0KICAgIC8qKg0KICAgICogUmV0dXJuIGFsbCB0aGUgQ3JpdGVyaWFzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBFeGFtcGxlIE9iamVjdA0KICAgICogDQogICAgKiBAcmV0dXJuIGFycmF5PENyaXRlcmlhPiB0aGUgbGlzdCBvZiBDcml0ZXJpYXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IEV4YW1wbGUgT2JqZWN0DQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q3JpdGVyaWFzKCl7DQoJCXJldHVybiAkdGhpcy0+Q3JpdGVyaWFzOw0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormfield.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybUZpZWxkDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KLyoqDQogKiAgIFJlcHJlc2VudCBhIE9ybUVudGl0eSdzIGZpZWxkIHdpdGggYWxsIGl0cyBwcm9wZXJ0aWVzDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KY2xhc3MgT3JtRmllbGQgDQp7DQoJLyoqDQoJICogVGhlICh1bmlxdWUpIG5hbWUgb2YgdGhlIGZpZWxkDQoJICovDQoJcHJpdmF0ZSAkbmFtZTsNCgkNCgkvKioNCgkgKiBUaGUgT3JtQ0FTVCB2YWx1ZSBvZiB0aGUgZmllbGQNCgkgKi8NCglwcml2YXRlICR0eXBlOw0KCQ0KCS8qKg0KCSAqIFRoZSBtYXggc2l6ZSBvZiB0aGUgZmllbGQuIE1heSBiZSBudWxsIGlmICR0eXBlIGlzIERhdGUsIFRpbWUsIEJ1ZmZlciwgTm9uZSAuLi4NCgkgKi8NCglwcml2YXRlICRzaXplOw0KCQ0KCS8qKg0KCSAqIEJvb2xlYW4gOiB0cnVlIGlmIHRoZSB2YWx1ZSBtYXkgYmUgTlVMTA0KCSAqLw0KCXByaXZhdGUgJG51bGxhYmxlOw0KCQ0KCS8qKg0KCSAqIHRoZSBPcm1LRVkgdmFsdWUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbA0KCSAqLw0KCXByaXZhdGUgJEtFWTsNCgkNCgkvKioNCgkgKiB0aGUgbmFtZSBvZiB0aGUga2V5LiBPbmx5IHVzZWQgZm9yIEZvcmVpZ25LZXkgYW5kIEFzc29jaWF0ZUtleQ0KCSAqLw0KCXByaXZhdGUgJEtFWU5hbWU7DQoJDQoJLyoqDQoJICogVGhlIGRlZmF1bHQgdmFsdWUuIE5vdCB1c2VkIGJ5IGRlZmF1bHQuDQoJICoqLw0KCXByaXZhdGUgJGRlZmF1bHRWYWx1ZTsNCgkNCiAgICAvKioNCiAgICAqIHB1YmxpYyBjb25zdHJ1Y3Rvcg0KICAgICogCQ0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgKHVuaXF1ZSkgbmFtZSBvZiB0aGUgZmllbGQNCiAgICAqIEBwYXJhbSBPcm1DQVNUIFRoZSBPcm1DQVNUIHZhbHVlIG9mIHRoZSBmaWVsZCBleGFtcGxlIDogT3JtT3JtQ0FTVDo6JElOVEVHRVINCiAgICAqIEBwYXJhbSBpbnQgVGhlIG1heCBzaXplIG9mIHRoZSBmaWVsZC4gTWF5IGJlIG51bGwgaWYgJHR5cGUgaXMgRGF0ZSwgVGltZSwgQnVmZmVyLCBOb25lIC4uLg0KICAgICogQHBhcmFtIHRydWUgaWYgdGhlIHZhbHVlIG1heSBiZSBOVUxMLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlDQogICAgKiBAcGFyYW0gT3JtS0VZIHRoZSBLRVkgdmFsdWUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbCBleGFtcGxlOiBPcm1LRVk6OiRQSyBmb3IgYSBwcmltYXJ5IGtleQ0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUga2V5LiBPbmx5IHVzZWQgZm9yIEZvcmVpZ25LZXkgYW5kIEFzc29jaWF0ZUtleSBleGFtcGxlIDogIkN1c3RvbWVyLmN1c3RvbWVyX2lkIiBpbiB0aGUgZmllbGQgImN1c3RvbWVyIiBvZiBhbiBlbnRpdHkgIk9yZGVyIi4NCiAgICAqIA0KICAgICogQHJldHVybiBPcm1GaWVsZCB0aGUgRmllbGQgT2JqZWN0DQogICAgKiANCiAgICAqIA0KICAgICogQHNlZSBPcm1DQVNUDQogICAgKiBAc2VlIE9ybUtFWQ0KCSogQHNlZSBPcm1FbnRpdHkNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWVsZG5hbWUsICRjYXN0LCAkc2l6ZSA9IG51bGwsICRudWxsYWJsZSA9IGZhbHNlLCAkS0VZID0gbnVsbCwgJEtFWU5hbWU9bnVsbCkgew0KCQ0KCQlpZihlbXB0eSgkS0VZKSAmJiAhZW1wdHkoJEtFWU5hbWUpKSB7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbENvbmZpZ3VyYXRpb25FeGNlcHRpb24oJ0ltcG9zc2libGUgdG8gc3BlY2lmeSBhIGtleU5hbWUgcGFyYW1ldGVyIGZvciB0aGUgZmllbGQgJy4kZmllbGRuYW1lLicgaWYgdGhlIGtleSBpcyBub3QgJEZLIG9yICRBSycpOw0KCQl9DQoJCWlmKCRLRVkgPT0gT3JtS0VZOjokUEsgJiYgIWVtcHR5KCRLRVlOYW1lKSkgew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdJbXBvc3NpYmxlIHRvIHNwZWNpZnkgYSBrZXlOYW1lIHBhcmFtZXRlciBmb3IgdGhlIGZpZWxkICcuJGZpZWxkbmFtZS4nIGlmIHRoZSBrZXkgaXMgbm90ICRGSyBvciAkQUsnKTsNCgkJfQ0KCQlpZigoJEtFWSA9PSBPcm1LRVk6OiRGSyB8fCAkS0VZID09IE9ybUtFWTo6JEFLKSAmJiBlbXB0eSgkS0VZTmFtZSkpIHsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignJEZLIGtleSBvciAkQUsga2V5IGZvciB0aGUgZmllbGQgJy4kZmllbGRuYW1lLicgbmVlZCBhIGtleU5hbWUnKTsNCgkJfQ0KCQkNCgkJaWYoKCRjYXN0ID09IE9ybUNBU1Q6OiREQVRFIHx8ICRjYXN0ID09IE9ybUNBU1Q6OiRCVUZGRVIgfHwgJGNhc3QgPT0gT3JtQ0FTVDo6JFRJTUUpICYmICFlbXB0eSgkc2l6ZSkpIHsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignVGhlIE9ybUNBU1Q6OkRBVEUgb3IgdGhlIE9ybUNBU1Q6OkJVRkZFUiBvciB0aGUgT3JtQ0FTVDo6VElNRSBvZiBmaWVsZCAnLiRmaWVsZG5hbWUuJyBtdXN0IG5vdCBoYXZlIHNpemUgdmFsdWUnKTsNCgkJfQ0KCQkNCg0KCQlpZigkbnVsbGFibGUgPT0gbnVsbCkgew0KCQkJJG51bGxhYmxlID0gZmFsc2U7DQoJCX0NCgkJCQ0KCQkkdGhpcy0+bmFtZSAJPSAkZmllbGRuYW1lOw0KCQkkdGhpcy0+dHlwZSAJPSAkY2FzdDsNCgkJJHRoaXMtPnNpemUgCT0gJHNpemU7DQoJCSR0aGlzLT5udWxsYWJsZSA9ICRudWxsYWJsZTsNCgkJJHRoaXMtPktFWSAJCT0gJEtFWTsNCgkJJHRoaXMtPktFWU5hbWUgCT0gJEtFWU5hbWU7DQoJfQ0KCQ0KDQogICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIG5hbWUNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgdGhlICh1bmlxdWUpIG5hbWUgb2YgRmllbGQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkNCgl7cmV0dXJuICR0aGlzLT5uYW1lO30NCg0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciB0eXBlDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBDQVNUIHZhbHVlIG9mIEZpZWxkDQogICAgKiANCiAgICAqIEBzZWUgT3JtQ0FTVA0KICAgICogDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQ0KCXtyZXR1cm4gJHRoaXMtPnR5cGU7fQ0KCQ0KICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIHNpemUNCiAgICAqIA0KICAgICogQHJldHVybiBpbnQgdGhlIHNpemUgb2YgRmllbGQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkNCgl7cmV0dXJuICR0aGlzLT5zaXplO30NCg0KICAgLyoqDQogICAgKiByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkUEsNCiAgICAqIA0KICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgRmllbGQgaGFzIGEgJFBLDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGlzUHJpbWFyeUtFWSgpDQoJe3JldHVybiAkdGhpcy0+S0VZID09IE9ybUtFWTo6JFBLO30NCg0KICAgLyoqDQogICAgKiByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkRksNCiAgICAqIA0KICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgRmllbGQgaGFzIGEgJEZLDQogICAgKi8gICAgCQ0KCXB1YmxpYyBmdW5jdGlvbiBpc0ZvcmVpZ25LRVkoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBPcm1LRVk6OiRGSzt9DQoNCiAgIC8qKg0KICAgICogcmV0dXJuIHRydWUgaWYgRmllbGQgaGFzIGEgJEFLDQogICAgKiANCiAgICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIEZpZWxkIGhhcyBhICRBSw0KICAgICovICAgIAkNCglwdWJsaWMgZnVuY3Rpb24gaXNBc3NvY2lhdGVLRVkoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBPcm1LRVk6OiRBSzt9DQoJDQogICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIGtleU5hbWUNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgdGhlIGtleU5hbWUgb2YgRmllbGQNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEtFWU5hbWUoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWU5hbWU7fQ0KCQ0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciBudWxsYWJsZSANCiAgICAqIA0KICAgICogQHJldHVybiB0cnVlIGlmIEZpZWxkIGlzIG9wdGlvbmFsIGluIGRhdGFiYXNlDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaXNOdWxsYWJsZSgpDQoJe3JldHVybiAkdGhpcy0+bnVsbGFibGU7fQ0KCQ0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciBkZWZhdWx0VmFsdWUNCiAgICAqIA0KICAgICogQHJldHVybiBtaXhlZCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBGaWVsZA0KICAgICogDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSgpDQoJe3JldHVybiAkdGhpcy0+ZGVmYXVsdFZhbHVlO30NCgkNCiAgIC8qKg0KICAgICogc2V0dGVyIGZvciBkZWZhdWx0VmFsdWUNCiAgICAqIA0KICAgICogQHBhcmFtIG1peGVkIHRoZSBkZWZhdWx0IHZhbHVlIG9mIEZpZWxkDQogICAgKiANCiAgICAqLwkNCglwdWJsaWMgZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKCRkZWZhdWx0VmFsdWUpew0KCQlpZigkdGhpcy0+dHlwZSA9PSBPcm1DQVNUOjokQlVGRkVSKXsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRoZSBGaWVsZCAiLiR0aGlzLT5uYW1lLiIgb2YgdHlwZSBCVUZGRVIgY2FuJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgIik7DQoJCX0NCgkJJHRoaXMtPmRlZmF1bHRWYWx1ZSA9ICRkZWZhdWx0VmFsdWU7DQoJfQ0KCQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormillegalargumentexception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogQ2xhc3NlIGV4dGVuZHMgRXhjZXB0aW9uLCB1c2VkIHdoZW4gdGhlIHBhcmFtZXRlcnMgaXMgbm90IHRoZSBvbmUgZXhwZWN0ZWQNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsNCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZz1OVUxMLCAkY29kZT0wKQ0KICAgIHtwYXJlbnQ6Ol9fY29uc3RydWN0KCRtc2csICRjb2RlKTt9DQp9DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormillegalconfigurationexception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogQ2xhc3NlIGV4dGVuZHMgRXhjZXB0aW9uLCB1c2VkIHdoZW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiBFbnRpdGllcyBpc24ndCBjb3JyZWN0DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KKi8NCmNsYXNzIE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uICB7DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtc2c9TlVMTCwgJGNvZGU9MCkNCiAgICB7cGFyZW50OjpfX2NvbnN0cnVjdCgkbXNnLCAkY29kZSk7fQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormindexing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgYWxsIHRoZSBDbXNNYWRlU2ltcGxlJ3MgaW5kZXhpbmcgc3lzdGVtDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KDQovKioNCiAqICAgQWxsb3cgYSBxdWljayBhbmQgc2ltcGxlIGluZGV4aW5nIHN5c3RlbSB3aXRoIG1vZHVsZXMgbGlrZSBTZWFyY2gNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgIFRoZSBtb3N0IG9mIHRoZSB3b3JrIHdhcyBtYWRlIGZyb20gRHVrZXRvd24ncyB3b3JrIC0gdGhhbmsgdG8gaGltDQogKiAgIGh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy92aWV3dG9waWMucGhwP3A9MjYxNTA4I3AyNjE1MDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgICANCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLyAgIA0KZmluYWwgY2xhc3MgT3JtSW5kZXhpbmcNCnsJDQoJDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldFNlYXJjaCgpDQoJew0KCQkkbW9kb3BzID0gY21zbXMoKS0+R2V0TW9kdWxlT3BlcmF0aW9ucygpOw0KCQlyZXR1cm4gJG1vZG9wcy0+R2V0U2VhcmNoTW9kdWxlKCk7DQoJfQ0KDQoJLyoqDQogICAgKiB2aWRlIGwnaW5kZXhhZ2UgDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IG1vZHVsZS4NCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gRGVsZXRlQWxsV29yZHMoT3JtRW50aXR5ICRlbnRpdHkpDQoJewkNCgkJJHNlYXJjaG1vZHVsZSA9IE9ybUluZGV4aW5nOjpnZXRTZWFyY2goKTsNCgkJJHNlYXJjaG1vZHVsZS0+RGVsZXRlV29yZHMoJGVudGl0eS0+Z2V0TW9kdWxlTmFtZSgpLCBudWxsLCAkZW50aXR5LT5nZXROYW1lKCkpOw0KCX0NCg0KICAgLyoqDQogICAgKiB2aWRlIGwnaW5kZXhhZ2UgZCd1biDpbGVtZW50IGVuIHBhcnRpY3VsaWVyDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IG1vZHVsZS4NCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gRGVsZXRlV29yZHMoT3JtRW50aXR5ICRlbnRpdHksICRzaWQgPSBudWxsKQ0KCXsJDQoJCWlmKCRzaWQgPT0gbnVsbCkNCgkJCSRzaWQgPSAkZW50aXR5LT5nZXQoJGVudGl0eS0+Z2V0UGsoKS0+Z2V0TmFtZSgpKTsNCgkJDQoJCSRzZWFyY2htb2R1bGUgPSBPcm1JbmRleGluZzo6Z2V0U2VhcmNoKCk7DQoJCSRzZWFyY2htb2R1bGUtPkRlbGV0ZVdvcmRzKCRlbnRpdHktPmdldE1vZHVsZU5hbWUoKSwgJHNpZCwgJGVudGl0eS0+Z2V0TmFtZSgpKTsNCgl9DQoJDQoJDQoJcHVibGljIHN0YXRpYyBmaW5hbAlmdW5jdGlvbiBBZGRXb3JkcygkZW50aXR5KQ0KICAgIHsNCgkJJHNlYXJjaG1vZHVsZSA9IE9ybUluZGV4aW5nOjpnZXRTZWFyY2goKTsNCgkJJGZpZWxkcyA9ICRlbnRpdHktPmdldEZpZWxkcygpOw0KCQkNCgkJJGNvbnRlbnQgPSAnJzsNCgkJZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkNCgkJew0KCQkJJGNvbnRlbnQuPSAnICcuJGVudGl0eS0+Z2V0KCRmaWVsZC0+Z2V0TmFtZSgpKTsNCgkJfQ0KCQkNCgkJJHNpZCA9ICRlbnRpdHktPmdldCgkZW50aXR5LT5nZXRQaygpLT5nZXROYW1lKCkpOw0KCQkNCgkJLy9lY2hvICRzaWQuJyAnLiRlbnRpdHktPmdldE5hbWUoKS4nICcuJGNvbnRlbnQ7DQoJCSRzZWFyY2htb2R1bGUtPkFkZFdvcmRzKCRlbnRpdHktPmdldE1vZHVsZU5hbWUoKSwgJHNpZCwkZW50aXR5LT5nZXROYW1lKCksJGNvbnRlbnQpOw0KICAgIH0NCgkNCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIFVwZGF0ZVdvcmRzKCRlbnRpdHkpIHsNCgkJT3JtSW5kZXhpbmc6OkRlbGV0ZVdvcmRzKCRlbnRpdHkpOw0KCQlPcm1JbmRleGluZzo6QWRkV29yZHMoJGVudGl0eSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBTZWFyY2hSZWluZGV4KCRtb2R1bGVOYW1lKSB7DQoJCSRlbnRpdHlzID0gTXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKCRtb2R1bGVOYW1lKTsNCgkJZm9yZWFjaCAoJGVudGl0eXMgYXMgJGVudGl0eSkgew0KCQkNCgkJCWlmKCRlbnRpdHktPmlzSW5kZXhhYmxlKCkpIHsNCgkJCQ0KCQkJCU9ybUluZGV4aW5nOjpEZWxldGVBbGxXb3JkcygkZW50aXR5KTsNCgkJCQkNCgkJCQkkbGlzdGUgPSBhcnJheSgpOw0KCQkJCWlmKCEkZW50aXR5LT5pc0ZpZWxkQnlOYW1lRXhpc3RzKEZpZWxkX0FjdGl2ZTo6JG5hbWUpKSB7DQoJCQkJCSRsaXN0ZSA9IE9ybUNvcmU6OnNlbGVjdEFsbCgkZW50aXR5KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZXhhbXBsZSA9IG5ldyBPcm1FeGFtcGxlKCk7DQoJCQkJCSRleGFtcGxlLT5hZGRDcml0ZXJpYShGaWVsZF9BY3RpdmU6OiRuYW1lLCBPcm1UeXBlQ3JpdGVyaWE6OiRFUSwgYXJyYXkoMSkpOw0KCQkJCQkkbGlzdGUgPSBPcm1Db3JlOjpzZWxlY3RCeUV4YW1wbGUoJGVudGl0eSwgJGV4YW1wbGUpOw0KCQkJCX0NCgkJCQkNCgkJCQlmb3JlYWNoKCRsaXN0ZSBhcyAkc2luZ2xlRW50aXR5KSB7DQoJCQkJCU9ybUluZGV4aW5nOjpBZGRXb3Jkcygkc2luZ2xlRW50aXR5KTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBDYWxsZWQgYnkgbW9kdWxlIFNlYXJjaCB0byBkaXNwbGF5IGEgcmVzdWx0DQoJICovDQoJZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCYkbW9kdWxlLCAkaWQsICRyZXR1cm5pZCwgJGVudGl0eUlkLCAkYXR0ciA9ICcnKQ0KICAgIHsJDQoJCSRyZXN1bHQgPSBhcnJheSgpOw0KCQkNCgkJLyokbWxlID0gTWxlRm9yTW1tZnM6OmdldFJvb3RVcmwoKTsNCgkJaWYoJG1sZSA9PSBudWxsKQ0KCQl7DQoJCQkkbWxlPSdmcic7DQoJCX0qLw0KCQkNCgkJDQoJCSRlbnRpdHlzID0gbXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKCRtb2R1bGUtPmdldE5hbWUoKSk7DQoJCWZvcmVhY2ggKCRlbnRpdHlzIGFzICRlbnRpdHkpDQoJCXsNCgkJCWlmKCRlbnRpdHktPmlzSW5kZXhhYmxlKCkpDQoJCQl7CQkNCg0KCQkJCWlmICgkYXR0ciA9PSAkZW50aXR5LT5nZXROYW1lKCkpDQoJCQkJew0KCQkJCQkkbXlFbnRpdHkgPSBPcm1Db3JlOjpzZWxlY3RCeUlkKCRlbnRpdHksICRlbnRpdHlJZCk7DQoJCQkJCQ0KCQkJCQkvLyRjdXJyZW50TGFuZ0lTTyA9ICgkbWxlID09ICdmcic/J2ZyX0ZSJzonZW5fVVMnKTsgLy9UT0RPIDogc2UgZOltZXJkZXIgcG91ciBy6WN1cOlyZXIgbGEgbGFuZ3VlIGxp6WUgYXUgJHJldHVybklkOw0KCQkJCQkNCgkJCQkJJHByZXR0eVVybCA9ICcnOw0KCQkJCQkkbGluayA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZmljaGUnLCAkcmV0dXJuaWQsIA0KCQkJCQkJCQkJJycsIA0KCQkJCQkJCQkJYXJyYXkoImVjbGFzcyI9PiRteUVudGl0eS0+Z2V0TmFtZSgpLCAiZWNsYXNzSWQiPT4kZW50aXR5SWQpLCcnLHRydWUsbnVsbCxudWxsLG51bGwsJHByZXR0eVVybCk7DQoJCQkJIAkJCQkgICAgDQoJCQkJCSRyZXN1bHRbMF0gPSAkbXlFbnRpdHktPmdldE5hbWUoKTsNCgkJCQkJJHJlc3VsdFsxXSA9IGh0bWxfZW50aXR5X2RlY29kZSgkbXlFbnRpdHktPmdldE5hbWUoKS4nICMnLiRlbnRpdHlJZCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7DQoJCQkJCSRyZXN1bHRbMV0gPSBodG1sX2VudGl0eV9kZWNvZGUoJHJlc3VsdFsxXSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7DQoJCQkJCQ0KCQkJCQkNCgkJCQkJJHJlc3VsdFsyXSA9ICRsaW5rOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KDQoJDQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormisortable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGludGVyZmFjZSBJU29ydGFibGUgd2hpY2ggYWxsb3cgdG8gc29ydCByZXN1bHRzIGZvciBhbiBlbnRpdHkNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEludGVyZmFjZSB3aWNoIGFsbG93IHRvIHNvcnQgcmVzdWx0cyBmb3IgYW4gZW50aXR5DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KaW50ZXJmYWNlIE9ybUlTb3J0YWJsZQ0Kew0KCQ0KICAgIC8qKg0KICAgICogRnVuY3Rpb24gd2hpY2ggY29tcGFyZSB0d28gZW50aXRpZXMgaW4gcGFyYW1ldGVycw0KICAgICogDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgdGhlIGZpcnN0IGVudGl0eSB3aXRoIGFsbCB2YWx1ZXMgc2V0dGVkDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IHRoZSBzZWNvbmQgZW50aXR5IHdpdGggYWxsIHZhbHVlcyBzZXR0ZWQNCgkqDQogICAgKiBAcmV0dXJuIEludGVnZXIgOiAwIGlmIGVxdWFscywgMSBpZiB0aGUgZmlyc3QgZW50aXR5IGlzIHN1cGVyaW9yLCBlbHNlIC0xDQogICAgKiANCiAgICAqIEBzZWUgT3JtRW50aXR5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBhcmVUbyhPcm1FbnRpdHkgJGVudGl0eTEsIE9ybUVudGl0eSAkZW50aXR5Mik7DQp9DQoNCg0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormkey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIGZvciB0aGUgZGlmZmVyZW50IGRhdGFiYXNlIGtleQ0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCi8qKg0KICogQ2xhc3MgZGVmaW5lcyB0aGUgZGlmZmVyZW50cyBrZXlzIHVzZWQgaW4gdGhlIE9ybSBzeXN0ZW0NCiAqIA0KICogIE9ybUtFWTo6JFBLIGRlZmluZXMgYSBwcmltYXJ5IGtleQ0KICogIE9ybUtFWTo6JEZLIGRlZmluZXMgYSBmb3JlaWduIGtleSA6IGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgMCwxLT5uIA0KICogIE9ybUtFWTo6JEFLIGRlZmluZXMgYW4gYXNzb2NpYXRlIGtleSA6IGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgdGhhdCBuZWVkaW5nIGEgdGhpcmQgdGFibGUNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KKi8NCmNsYXNzIE9ybUtFWQ0Kew0KCXB1YmxpYyBzdGF0aWMgJFBLID0gMHg5OTAxOyAvLyBQcmltYXJ5IEtFWQ0KCXB1YmxpYyBzdGF0aWMgJEZLID0gMHg5OTAyOyAvLyBGb3JlaWduIEtFWSBhIGxpbmsgYmV0d2VlbiAyIGVudGl0aWVzIDAsMS0+bg0KCXB1YmxpYyBzdGF0aWMgJEFLID0gMHg5OTAzOyAvLyBBc3NvY2lhdGUgS0VZIGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgbi0+biB0aGF0IG5lZWRpbmcgYSB0aGlyZCB0YWJsZQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormlimit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdoaWNoIHdpbGwgbWFuYWdlIHRoZSBTcWwgTElNSVQNCiAqDQogKiBAc2luY2UgMC4yLjANCiAqIEBhdXRob3IgSGVyaXF1ZXQNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KDQoNCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdoaWNoIHdpbGwgbWFuYWdlIHRoZSBTcWwgTElNSVQNCiAqIA0KICogQHNpbmNlIDAuMi4wDQogKiBAYXV0aG9yIEhlcmlxdWV0DQogKiBAcGFja2FnZSBPcm0NCiovDQpjbGFzcyBPcm1MaW1pdA0KewkNCglwcml2YXRlICRvZmZzZXQgPSAwOw0KCXByaXZhdGUgJHJvd19jb3VudCA9IDA7DQoNCglmdW5jdGlvbiBfX2NvbnN0cnVjdCgkb2Zmc2V0PTAsICRyb3dfY291bnQ9MCkgew0KCQkkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsNCgkJJHRoaXMtPnJvd19jb3VudCA9ICRyb3dfY291bnQ7DQoJfQ0KCQ0KICAgLyoqDQogICAgKiByZXR1cm4gdGhlIExJTUlUIGNsYXVzZQ0KICAgICogDQogICAgKiBAcmV0dXJuIHRoZSBMSU1JVCBjbGF1c2UNCiAgICAqLyAgICAgIA0KCWZ1bmN0aW9uIGdldExpbWl0KCkJew0KCQlpZigkdGhpcy0+b2Zmc2V0ID09IDAgJiYgJHRoaXMtPnJvd19jb3VudCA9PSAwKSB7IC8vIG5vIGxpbWl0IHNldA0KCQkJcmV0dXJuICcnOw0KCQl9DQoJCQ0KCQlpZigkdGhpcy0+b2Zmc2V0IDwgMCkgew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBvZmZzZXQgdmFsdWU6IHskdGhpcy0+b2Zmc2V0fS4gTXVzdCBiZSA+PSAwIik7DQoJCX0NCgkJDQoJCWlmKCR0aGlzLT5yb3dfY291bnQgPD0gMCkgew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCByb3dfY291bnQgdmFsdWU6IHskdGhpcy0+cm93X2NvdW50fS4gTXVzdCBiZSA+IDAiKTsNCgkJfQ0KCQkNCgkJJGxpbWl0ID0gJyBMSU1JVCAnOw0KCQkNCgkJaWYoJHRoaXMtPm9mZnNldCA9IDApIHsNCgkJCSRsaW1pdC49ICR0aGlzLT5vZmZzZXQ7DQoJCX0NCgkJDQoJCSRsaW1pdC49ICcgJy4kdGhpcy0+cm93X2NvdW50Ow0KCQkNCgkJcmV0dXJuICRsaW1pdDsNCgl9DQoJDQogICAvKioNCiAgICAqIFNldCBvZmZzZXQNCiAgICAqIA0KICAgICovDQoJZnVuY3Rpb24gc2V0T2Zmc2V0KCRvZmZzZXQpIHsNCgkJJHRoaXMtPm9mZnNldCA9ICRvZmZzZXQ7DQoJfQ0KCQ0KICAgLyoqDQogICAgKiBTZXQgcm93X2NvdW50DQogICAgKiANCiAgICAqLw0KCWZ1bmN0aW9uIHNldFJvd0NvdW50KCRyb3dfY291bnQpIHsNCgkJJHRoaXMtPnJvd19jb3VudCA9ICRyb3dfY291bnQ7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormorderby.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdoaWNoIHdpbGwgbWFuYWdlIHRoZSBTcWwgc29ydGluZyBvZiB0aGUgRW50aXR5DQogKg0KICogQHNpbmNlIDAuMi4wDQogKiBAYXV0aG9yIEhlcmlxdWV0DQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCg0KDQovKioNCiAqIENvbnRhaW5zIHRoZSBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgU3FsIHNvcnRpbmcgb2YgdGhlIEVudGl0eQ0KICogDQogKiAgT3JtQ0FTVDo6JERFU0MgDQogKg0KICogQHNpbmNlIDAuMi4wDQogKiBAYXV0aG9yIEhlcmlxdWV0DQogKiBAcGFja2FnZSBPcm0NCiovDQpjbGFzcyBPcm1PcmRlckJ5DQp7DQoJcHJpdmF0ZSAkb3JkZXJzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgJEFTQyA9ICdBU0MnOw0KCXB1YmxpYyBzdGF0aWMgJERFU0MgPSAnREVTQyc7DQoJDQoJLyoqDQogICAgKiBwdWJsaWMgY29uc3RydWN0b3INCiAgICAqIAkNCiAgICAqIEBwYXJhbSBhcnJheSAkb3JkZXJzIGFuIGhhc2ggd2l0aCBvcmRlciBieSBkZWZpbml0aW9ucw0KCSovDQoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9yZGVycz1hcnJheSgpKSB7DQoJCWZvcmVhY2goJG9yZGVycyBhcyAkZmllbGQgPT4gJG9yZGVyKSB7DQoJCQlpZigkb3JkZXIgPT0gT3JtT3JkZXJCeTo6JEFTQykgew0KCQkJCSR0aGlzLT5hZGRBc2MoJGZpZWxkKTsNCgkJCX0NCgkJCWVsc2UgaWYoJG9yZGVyID09IE9ybU9yZGVyQnk6OiRERVNDKSB7DQoJCQkJJHRoaXMtPmFkZERlc2MoJGZpZWxkKTsJCQkNCgkJCX0NCgkJCWVsc2Ugew0KCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgb3JkZXIgZm9yIE9SREVSIEJZOiB7JG9yZGVyfS4iKTsNCgkJCX0NCgkJfQ0KCX0NCgkNCiAgIC8qKg0KICAgICogcmV0dXJuIE9SREVSIEJZIGNsYXVzZQ0KICAgICogDQogICAgKiBAcmV0dXJuIE9SREVSIEJZIGNsYXVzZQ0KICAgICovICAgICAgDQoJZnVuY3Rpb24gZ2V0T3JkZXJCeSgpCXsNCgkJJG9yZGVyYnkgPSAnIE9SREVSIEJZICc7DQoJCQ0KCQlpZihjb3VudCgkdGhpcy0+b3JkZXJzKSA9PSAwKSB7DQoJCQlyZXR1cm4gJyc7DQoJCX0NCgkJDQoJCSRpPTE7DQoJCWZvcmVhY2goJHRoaXMtPm9yZGVycyBhcyAka2V5ID0+ICR2YWx1ZSkgew0KCQkJDQoJCQkkb3JkZXJieSAuPSAoJGkrKz4xPycsJzonJykuJyAnLiRrZXkuJyAnLiR2YWx1ZTsNCgkJfQ0KCQkNCgkJcmV0dXJuICRvcmRlcmJ5Ow0KCX0NCgkNCiAgIC8qKg0KICAgICogQWRkIGEgbmV3IGZpZWxkIGluIG9yZGVyIGJ5OiBERVNDDQogICAgKiANCiAgICAqLw0KCWZ1bmN0aW9uIGFkZEFzYygkZmllbGQpIHsNCgkJJHRoaXMtPm9yZGVycyA9IGFycmF5X21lcmdlKCR0aGlzLT5vcmRlcnMsIGFycmF5KCRmaWVsZCA9PiAnJykpOyAvLyBBU0Mgbm90IG1hbmRhdG9yeQ0KCX0NCgkNCiAgIC8qKg0KICAgICogQWRkIGEgbmV3IGZpZWxkIGluIG9yZGVyIGJ5OiBERVNDDQogICAgKiANCiAgICAqLw0KCWZ1bmN0aW9uIGFkZERlc2MoJGZpZWxkKSB7DQoJCSR0aGlzLT5vcmRlcnMgPSBhcnJheV9tZXJnZSgkdGhpcy0+b3JkZXJzLCBhcnJheSgkZmllbGQgPT4gT3JtT3JkZXJCeTo6JERFU0MpKTsNCgl9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormtrace.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgYWxsIHRoZSBkZWJ1ZyBzeXN0ZW0uDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KDQovKioNCiAqICBBbGxvdyBkaXNwbGF5IHN0YWNrdHJhY2UgYW5kIG90aGVyIGluZm9ybWF0aW9ucyBpbiBhIGNvbnNvbGUgb3Igb24gdGhlIHBhZ2UNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICogIGV4YW1wbGUNCiAqICA8Y29kZT4NCiAqICAgICAgICAgIE9ybVRyYWNlOjpkZWJ1ZygnaSBhbSBoZXJlICEnKTsNCiAqICAgICAgICAgIE9ybVRyYWNlOjppbmZvKCdwcm9jZXNzIGZpbmlzaGVkJyk7DQogKiAgICAgICAgICBPcm1UcmFjZTo6d2FybignQmUgY2FyZnVsbCA6IHRvbyBtdWNoIHJlc3VsdHMgd2lsbCBiZSBkaXNwbGF5ZWQnKTsNCiAqICAgICAgICAgIE9ybVRyYWNlOjplcnJvcignb3VwcyBob3VzdG9uLCB3ZSBoYXZlIGdvdCBhIHByb2JsZW0uLi4gOiggJyk7DQogKiAgPC9jb2RlPg0KICogDQogKiB0aGUgcHJvcGVydHkgJGxldmVsIG9mIHRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VzIHRvIGRpc3BsYXlpbmcNCiAqICBTbyBhIGxldmVsIG9mICJXQVJOIiB3aWxsIG9ubHkgZGlzcGxheSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcw0KICogIEJ5IGRlZmF1bHQgdGhlIGxldmVsIGlzIHNldHRlZCB0byBXQVJODQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLyAgIA0KIA0KZmluYWwgY2xhc3MgT3JtVHJhY2UNCnsNCglwdWJsaWMgc3RhdGljICRERUJVRyA9IDA7DQoJcHVibGljIHN0YXRpYyAkSU5GTyA9IDE7DQoJcHVibGljIHN0YXRpYyAkV0FSTiA9IDI7DQoJcHVibGljIHN0YXRpYyAkRVJST1IgPSAzOw0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJGxvZ0ZpbGU7DQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9nVXJsOw0KCQ0KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsNCgl9DQoNCgkvKioNCiAgICAqIERpc3BsYXkgYSBtZXNzYWdlIHdpdGggREVCVUcgbGV2ZWwNCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIGRlYnVnKCRtc2cpIHsJDQoJCXNlbGY6OmlubmVyV3JpdGVyKE9ybVRyYWNlOjokREVCVUcsICdkZWJ1ZycsICRtc2cpOw0KCX0NCg0KICAgIC8qKg0KICAgICogRGlzcGxheSBhIG1lc3NhZ2Ugd2l0aCBJTkZPIGxldmVsDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbAlmdW5jdGlvbiBpbmZvKCRtc2cpIHsJDQoJCXNlbGY6OmlubmVyV3JpdGVyKE9ybVRyYWNlOjokSU5GTywgJ2luZm8nLCAkbXNnKTsNCgl9IA0KDQogICAgLyoqDQogICAgKiBEaXNwbGF5IGEgbWVzc2FnZSB3aXRoIFdBUk4gbGV2ZWwNCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIHdhcm4oJG1zZykgewkNCgkJc2VsZjo6aW5uZXJXcml0ZXIoT3JtVHJhY2U6OiRXQVJOLCAnd2FybicsICRtc2cpOw0KCX0gDQoNCiAgICAvKioNCiAgICAqIERpc3BsYXkgYSBtZXNzYWdlIHdpdGggRVJST1IgbGV2ZWwNCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIGVycm9yKCRtc2cpIHsJDQoJCXNlbGY6OmlubmVyV3JpdGVyKE9ybVRyYWNlOjokRVJST1IsICdlcnJvcicsICRtc2cpOw0KCX0NCgkNCgkvKioNCgkgKiBXaWxsIHJldHVybiB0aGUgcGF0aCBvZiB0aGUgbG9nIGZpbGUNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIHRoZSBwYXRoIG9mIHRoZSBsb2cgZmlsZQ0KCSAqKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldExvZ0ZpbGUoKXsNCgkJaWYoc2VsZjo6JGxvZ0ZpbGUgPT0gbnVsbCl7DQoJCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7DQoJCQlzZWxmOjokbG9nRmlsZSA9ICRjb25maWdbJ3Jvb3RfcGF0aCddLicvdG1wL2NhY2hlL29ybS5sb2cnOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9nRmlsZTsNCgl9DQoJDQoJLyoqDQoJICogV2lsbCByZXR1cm4gdGhlIHVybCBvZiB0aGUgbG9nIGZpbGUNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIHRoZSB1cmwgb2YgdGhlIGxvZyBmaWxlDQoJICoqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2V0TG9nVXJsKCl7DQoJCWlmKHNlbGY6OiRsb2dVcmwgPT0gbnVsbCl7DQoJCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7DQoJCQlzZWxmOjokbG9nVXJsID0gJGNvbmZpZ1sncm9vdF91cmwnXS4nL3RtcC9jYWNoZS9vcm0ubG9nJzsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGxvZ1VybDsNCgl9DQoJDQoJLyoqDQoJICogRG8gYWxsIHRoZSBzdWZmIGJlaGluZA0KCSAqDQoJICogQHBhcmFtIHN0cmluZyB0aGUgbGV2ZWwgb2YgbWVzc2FnZS4NCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBjc3MgY2xhc3MgdG8gZGlzcGxheSB0aGUgImlubGluZSIgbWVzc2FnZQ0KCSAqIEBwYXJhbSBzdHJpbmcgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheQ0KCSAqLw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGlubmVyV3JpdGVyKCRsZXZlbCwgJGNzc0NsYXNzLCAkbXNnKXsNCgkJJG9ybSA9IGNtc21zKCktPkdldE1vZHVsZU9wZXJhdGlvbnMoKS0+Z2V0X21vZHVsZV9pbnN0YW5jZSgnT3JtJyk7DQoNCgkJaWYoJG9ybS0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnLCBPcm1UcmFjZTo6JElORk8pID4gJGxldmVsKSB7cmV0dXJuO30NCgkJCQkNCgkJLy9pbiBmaWxlIGxvZw0KCQlmaWxlX3B1dF9jb250ZW50cyhzZWxmOjpnZXRMb2dGaWxlKCkgLCBkYXRlKCdZLW0tZCBIOmk6cycsIHRpbWUoKSkuIiAtIFskY3NzQ2xhc3NdIC0gJG1zZyBcbiIsIEZJTEVfQVBQRU5EICk7DQoNCgkJLy9JbiBwaHAgbG9nDQoJCWVycm9yX2xvZygkbXNnKTsNCgl9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormtypecriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIE9ybVR5cGVDcml0ZXJpYSBjbGFzcw0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogRW51bSBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBPcm1UeXBlQ3JpdGVyaWENCiAqIA0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQpjbGFzcyBPcm1UeXBlQ3JpdGVyaWENCnsNCiAgICAvKioNCiAgICAqIElzIGVxdWFscyB0bw0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkRVEgPSAnID0gJzsNCiAgICANCiAgICAvKioNCiAgICAqIElzIGRpZmZlcmVudCBPZg0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkTkVRID0gJyAhPSAnOw0KICAgIA0KICAgIC8qKg0KICAgICogaXMgc3RyaWN0bHkgZ3JlYXRlciAgdGhhbg0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkR1QgPSAnID4gJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGdyZWF0ZXIgIG9yIGVxdWFscyB0bw0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkR1RFID0gJyA+PSAnOw0KICAgIA0KICAgIC8qKg0KICAgICogaXMgc3RyaWN0bHkgbGVzc2VyIHRoYW4NCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJExUID0gJyA8ICc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBsZXNzZXIgb3IgZXF1YWxzIHRvDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRMVEUgPSAnIDw9ICc7DQoJDQoJLyoqDQogICAgKiBpcyBOVUxMIG9yIGlzIEVtcHR5DQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRFTVBUWSA9ICdpcyBlbXB0eSgpJzsNCgkNCiAgICAvKioNCiAgICAqIGlzIE5vdCBOVUxMIGFuZCBpcyBOb3QgRW1wdHkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5FTVBUWSA9ICdpcyBub3QgZW1wdHkoKSc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBOVUxMDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICROVUxMID0gJyBpcyBudWxsICc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBOb3QgTlVMTA0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkTk5VTEwgPSAnIGlzIG5vdCBudWxsJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGJlZm9yZSAoYSBEYXRlKQ0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkQkVGT1JFID0gJyBiZWZvcmUgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGFmdGVyIChhIERhdGUpDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRBRlRFUiA9ICcgYWZ0ZXIgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGJldHdlZW4gKGEgRGF0ZSkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJEJFVFdFRU4gPSAnIGFmdGVyICc7DQogICAgIA0KICAgIC8qKg0KICAgICogaXMgY29udGFpbmVkIGludG8gdGhlIGFycmF5DQogICAgKiANCiAgICAqIC8hXCBuZWVkIGF0IGxhc3QgMiB2YWx1ZXMgaW4gdGhlIGFycmF5DQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRJTiA9ICdpbiAoJWEpJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIG5vdCBjb250YWluZWQgaW50byB0aGUgYXJyYXkNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICogLyFcIG5lZWQgYXQgbGFzdCAyIHZhbHVlcyBpbiB0aGUgYXJyYXkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5JTiA9ICdub3QgaW4gKCVhKSc7DQogICAgDQogICAgLyoqDQogICAgKiBjb250YWlucyB0aGUgc3RyaW5nDQogICAgKiANCiAgICAqIC8hXCBkb24ndCBmb3JnZXQgdG8gYWRkIHRoZSB3aWxkY2FyZCAnJScNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJExJS0UgPSAnIGxpa2UgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGRvZXNuJ3QgY29udGFpbiB0aGUgc3RyaW5nDQogICAgKiANCiAgICAqIC8hXCBkb24ndCBmb3JnZXQgdG8gYWRkIHRoZSB3aWxkY2FyZCAnJScNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5MSUtFID0gJyBub3QgbGlrZSAnOw0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCg0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvZ2xldmVsJywgT3JtVHJhY2U6OiRJTkZPKTsNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjYWNoZVR5cGUnLCBPcm1UcmFjZTo6JE5PTkUpOw0KDQokdGhpcy0+QXVkaXQoIDAsIA0KCSAgICAgICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgDQoJICAgICAgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpICk7DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdsb2dsZXZlbCcpOw0KJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2NhY2hlVHlwZScpOw0KDQovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cNCiR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCi8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZw0KJHRoaXMtPkF1ZGl0KCAwLCAgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAgJHRoaXMtPkxhbmcoJ3VwZ3JhZGVkJywgJHRoaXMtPkdldFZlcnNpb24oKSkpOw0KDQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/Orm.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCgkvKioNCgkqIENsYXNzIG9mIGNtc21hZGVzaW1wbGUncyBBUEkuIFVzZWQgdG8gbWFrZSBhIGxpbmsgYmV0d2VlbiB0aGUgQVBJIG9mIENtc01hZGVTaW1wbGUgYW5kIG90aGVyIG1vZHVsZXMnDQoJKg0KCSogQHNpbmNlIDAuMC4xDQoJKiBAYXV0aG9yIEJlc3MNCgkqIEBwYWNrYWdlIE9ybQ0KCSoqLw0KDQoJLyoqDQoJKiBUaGUgQ2xhc3MgT3JtIGRlZmluZSB0aGUgbW9kdWxlIE9ybSBhbmQgYWxsb3cgaGF2aW5nIGFsbCB0aGUgb3JtIGZ1bmN0aW9uYWxpdGllcyBpbnRvIGFub3RoZXIgbW9kdWxlDQoJKg0KCSogQHNpbmNlIDAuMC4xDQoJKiBAYXV0aG9yIEJlc3MNCgkqIEBwYWNrYWdlIGNtc21zDQoJKi8NCmNsYXNzIE9ybSBleHRlbmRzIENNU01vZHVsZSB7DQoNCglmdW5jdGlvbiBHZXROYW1lKCkgew0KCQlyZXR1cm4gJ09ybSc7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOw0KCX0NCg0KCWZ1bmN0aW9uIEdldFZlcnNpb24oKSB7DQoJCXJldHVybiAnMC4yLjAnOw0KCX0NCiAgDQoJZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkNCiAJew0KICAgIAlyZXR1cm4gYXJyYXkoKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRIZWxwKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3IoKSB7DQoJCXJldHVybiAnS2V2aW4gRGFuZXppcyAoYWthIEJlc3MpJzsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsNCgkJcmV0dXJuICdjb250YWN0IGF0IGZ1cmllIHBvaW50IGJlJzsNCgl9DQoNCglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpIHsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOw0KCX0NCg0KCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgew0KCQlyZXR1cm4gIjEuMTEuMCI7DQoJfQ0KDQoJZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmdW5jdGlvbiBIYXNBZG1pbigpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkgew0KCQlyZXR1cm4gJ2V4dGVuc2lvbnMnOw0KCX0NCg0KCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gSW5pdGlhbGl6ZUZyb250ZW5kKCkgew0KCX0NCg0KCWZ1bmN0aW9uIEluaXRpYWxpemVBZG1pbigpIHsNCgl9DQoNCglmdW5jdGlvbiBBbGxvd1NtYXJ0eUNhY2hpbmcoKSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmdW5jdGlvbiBMYXp5TG9hZEZyb250ZW5kKCkgew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHsNCgkgIHJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7DQoJfQ0KDQoJZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOw0KCX0NCg0KCWZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOw0KCX0gIA0KCQ0KCWZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJG1zZykgew0KCQllY2hvICI8aDM+Ii4kbXNnLiI8L2gzPiI7DQoJfSANCgkJIA0KCXByaXZhdGUgZnVuY3Rpb24gR2V0TXlNb2R1bGVQYXRoKCkgew0KCQlyZXR1cm4gcGFyZW50OjpHZXRNb2R1bGVQYXRoKCk7CQkNCgl9DQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19hdXRvbG9hZCgpIHsJDQoJCXNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgkdGhpcywgJ2F1dG9sb2FkX2NsYXNzZXMnKSk7DQoJCS8vc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCR0aGlzLCAnYXV0b2xvYWRfY2xhc3Nlc19hZGRvbicpKTsNCgkJDQoJCS8vV2UncmUgbGlzdGluZyB0aGUgY2xhc3MgZGVjbGFyZWQgaW50byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjaGlsZCBtb2R1bGUNCgkJJHJlcGVydG9pcmUgPSBjbXNfam9pbl9wYXRoKCR0aGlzLT5HZXRNeU1vZHVsZVBhdGgoKSwnbGliJyk7DQoJCQ0KCQkkbGlzdGVbJ2VudGl0aWVzJ10gPSBhcnJheSgpOw0KCQkkbGlzdGVbJ2Fzc29jaWF0ZSddID0gYXJyYXkoKTsNCgkJDQoJCSRvYmplY3RzID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRyZXBlcnRvaXJlKSk7DQoJCWZvcmVhY2goJG9iamVjdHMgYXMgJG5hbWUgPT4gJG9iamVjdCl7DQoJCQlpZihzdHJpcG9zKCRuYW1lLCAnY2xhc3MuZW50aXR5LicpICE9PSBGQUxTRSl7CQkJDQoJCQkJJGNsYXNzbmFtZSA9IHN1YnN0cigkb2JqZWN0LT5nZXRGaWxlTmFtZSgpICwgMTMgLHN0cmxlbigkb2JqZWN0LT5nZXRGaWxlTmFtZSgpKSAtIDQgLSAxMyk7DQoJCQkJJGxpc3RlWydlbnRpdGllcyddW10gPSBhcnJheSgnZmlsZW5hbWUnPT4kbmFtZSwgJ2Jhc2VuYW1lJz0+JG9iamVjdC0+Z2V0RmlsZU5hbWUoKSwgJ2NsYXNzbmFtZSc9PiRjbGFzc25hbWUpOw0KCQkJfSBlbHNlaWYoc3RyaXBvcygkbmFtZSwgJ2NsYXNzLmFzc29jLicpICE9PSBGQUxTRSkgew0KCQkJCSRjbGFzc25hbWUgPSBzdWJzdHIoJG9iamVjdC0+Z2V0RmlsZU5hbWUoKSAsIDEyICxzdHJsZW4oJG9iamVjdC0+Z2V0RmlsZU5hbWUoKSkgLSA0IC0gMTIpOw0KCQkJCSRsaXN0ZVsnYXNzb2NpYXRlJ11bXSA9IGFycmF5KCdmaWxlbmFtZSc9PiRuYW1lLCAnYmFzZW5hbWUnPT4kb2JqZWN0LT5nZXRGaWxlTmFtZSgpLCAnY2xhc3NuYW1lJz0+JGNsYXNzbmFtZSk7DQoJCQl9IGVsc2Ugew0KCQkJfQ0KCQl9DQoJCQ0KCQlmb3JlYWNoKCRsaXN0ZVsnZW50aXRpZXMnXSBhcyAkZWxlbWVudCkgew0KCQkJJGNsYXNzTmFtZSA9ICRlbGVtZW50WydjbGFzc25hbWUnXTsNCgkJCSRmaWxlbmFtZSA9ICRlbGVtZW50WydmaWxlbmFtZSddOw0KCQkJT3JtVHJhY2U6OmRlYnVnKCJpbXBvcnRpbmcgRW50aXR5ICIuJGNsYXNzTmFtZS4iIGludG8gdGhlIG1vZHVsZSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQkJcmVxdWlyZV9vbmNlKCRmaWxlbmFtZSk7CQkJDQoJCQkkZW50aXR5ID0gbmV3ICRjbGFzc05hbWUoKTsNCgkJfQ0KCQlmb3JlYWNoKCRsaXN0ZVsnYXNzb2NpYXRlJ10gYXMgJGVsZW1lbnQpIHsNCgkJCSRjbGFzc05hbWUgPSAkZWxlbWVudFsnY2xhc3NuYW1lJ107DQoJCQkkZmlsZW5hbWUgPSAkZWxlbWVudFsnZmlsZW5hbWUnXTsNCgkJCU9ybVRyYWNlOjpkZWJ1ZygiaW1wb3J0aW5nIEFzc29jaWF0ZSBFbnRpdHkgIi4kY2xhc3NOYW1lLiIgaW50byB0aGUgbW9kdWxlICIuJHRoaXMtPmdldE5hbWUoKSk7DQoJCQlyZXF1aXJlX29uY2UoJGZpbGVuYW1lKTsNCgkJCSRlbnRpdHkgPSBuZXcgJGNsYXNzTmFtZSgpOw0KCQl9DQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBhdXRvbG9hZF9jbGFzc2VzKCRjbGFzc25hbWUpew0KCQkkT3JtID0gbmV3IE9ybSgpOw0KCQkkcGF0aCA9ICRPcm0tPkdldE15TW9kdWxlUGF0aCgpOw0KCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJsaWIiLCJjbGFzcy4iLnN0cnRvbG93ZXIoJGNsYXNzbmFtZSkuIi5waHAiKTsNCgkJDQoJCWlmKGZpbGVfZXhpc3RzKCRmbikpew0KCQkJcmVxdWlyZV9vbmNlKCRmbik7DQoJCQlPcm1UcmFjZTo6ZGVidWcoImltcG9ydGluZyAkZm4gd2l0aCBzdWNjZXNzIik7DQoJCX0gZWxzZSB7DQoJCQlPcm1UcmFjZTo6ZGVidWcoIkZpbGUgJGZuIG5vdCBmb3VuZCwgd2Ugc2tpcCBpdCIpOw0KCQl9DQoJfQ0KCQ0KCS8qKg0KCSAqIFNob3J0Y3V0IHRvIGNhbGwgYWxsIHRoZSBpbnN0YW5jZXMgZm9yIGEgc2luZ2xlIG1vZHVsZQ0KCSAqDQoJICogQHJldHVybiBMaXN0PE9ybUVudGl0eT4gdGhlIGVudGl0aWVzIGZvciB0aGUgY3VycmVudCBwYXJlbnQncyBuYW1lc3BhY2UNCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGdldEFsbEluc3RhbmNlcygpew0KCQlyZXR1cm4gTXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKHBhcmVudDo6R2V0TmFtZSgpKTsNCgl9DQoJLyoNCglwdWJsaWMgZnVuY3Rpb24gYXV0b2xvYWRfY2xhc3Nlc19hZGRvbigkY2xhc3NuYW1lKXsNCgkJT3JtVHJhY2U6OmRlYnVnKCImbmJzcDsmbmJzcDsmbmJzcDskY2xhc3NuYW1lIik7DQoJCQ0KCQkkcGF0aCA9ICR0aGlzLT5HZXRNeU1vZHVsZVBhdGgoKTsNCgkJDQoJCSRmbiA9IG51bGw7DQoJICAgaWYoc3RyaXBvcygkY2xhc3NuYW1lLCAiSFRNTF9GSUVMRCIpICE9PSBGQUxTRSkNCgkgICB7DQoJCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJjbGFzcyIsImNsYXNzLmFkZC5maWVsZGh0bWwucGhwIik7DQoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIlNFQVJDSF9GSUVMRCIpICE9PSBGQUxTRSkNCgkgICB7DQoJCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJjbGFzcyIsImNsYXNzLmFkZC5zZWFyY2hmaWVsZC5waHAiKTsNCgkgICB9IGVsc2UgaWYoc3RyaXBvcygkY2xhc3NuYW1lLCAiRklFTERfIikgIT09IEZBTFNFKQ0KCSAgIHsNCgkJCSRmbiA9IGNtc19qb2luX3BhdGgoJHBhdGgsImNsYXNzIiwiY2xhc3MuYWRkLmZpZWxkc3N5c3RlbS5waHAiKTsNCgkgICB9IGVsc2UgaWYoc3RyaXBvcygkY2xhc3NuYW1lLCAiRklMVFJFXyIpICE9PSBGQUxTRSkNCgkgICB7DQoJCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJjbGFzcyIsImNsYXNzLmFkZC5maWx0cmUucGhwIik7DQoJICAgfQ0KCSAgIA0KCSAgIGlmKCRmbiAhPSBudWxsKQ0KCSAgIHsNCgkJCU9ybVRyYWNlOjpkZWJ1ZyggImltcG9ydCBkJ3VuIGFkZG9uIGR1IHByb2pldCAiLiR0aGlzLT5nZXROYW1lKCkuIjogJGZuIik7DQoJICAgDQoJCQlpZihmaWxlX2V4aXN0cygkZm4pKXsNCgkJCQlyZXF1aXJlX29uY2UoJGZuKTsNCgkJCX0NCgkJfQ0KCX0qLw0KCS8qDQoJZnVuY3Rpb24gU2VhcmNoUmVpbmRleCgmJG1vZHVsZSA9IG51bGwpIHsNCgkJLy9PbiDpdml0ZSBkZSBzJ2F1dG8taW5kZXhlci4NCgkJaWYoJHRoaXMtPmdldE5hbWUoKSA9PSAnTW1tZnMnKQ0KCQkJcmV0dXJuOwkJDQoJCQkNCgkJLy8gT3JtSW5kZXhpbmc6OnNldFNlYXJjaCgkbW9kdWxlKTsNCgkJT3JtSW5kZXhpbmc6OlNlYXJjaFJlaW5kZXgoJHRoaXMtPmdldE5hbWUoKSk7DQoJfSovDQoNCgkvKioNCgkgKiBBcHBlbOllIHBhciBTZWFyY2ggcG91ciBhZmZpY2hlciB1biBy6XN1bHRhdA0KCSAqLy8qDQoJZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCRyZXR1cm5pZCwgJGVudGl0eUlkLCAkYXR0ciA9ICcnKSB7CQ0KCQkvL09uIG5lIHJldG91cm5lIHJpZW4gZGUgTW1tZnMgZGUgdG91dGUgbWFuaehyZQ0KCQlpZigkdGhpcy0+Z2V0TmFtZSgpID09ICdNbW1mcycpDQoJCQlyZXR1cm47CQ0KCQkNCgkJcmV0dXJuIE9ybUluZGV4aW5nOjpTZWFyY2hSZXN1bHQoJHRoaXMsICRpZCwgJHJldHVybmlkLCAkZW50aXR5SWQsICRhdHRyKTsNCgl9Ki8NCg0KfSANCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPg0KCWxhYmVsLmhlbHB7DQoJCQ0KCX0NCjwvc3R5bGU+DQoNCg0KeyRmb3Jtc3RhcnR9DQoJPGgzPlNlbGVjdCB0aGUgdHlwZSBPZiBDYWNoZTwvaDM+DQoJCXskc2VsZWN0Q2FjaGV9eyRkZWxldGVDYWNoZX08bGFiZWwgZm9yPSd7JGlkfWNhY2hlJyBjbGFzcz0naGVscCcgLz5MZWFybiBtb3JlIGFib3V0IHRoZXNlIG9wdGlvbnMgb24gPGEgaHJlZj0nIycgdGFyZ2V0PSdfYmxhbmsnPnRoZSB3aWtpPC9hPi48L2xhYmVsPg0KCTxici8+DQoJeyRzdWJtaXR9DQoJPGgzPlNlbGVjdCB0aGUgbGV2ZWwgb2YgbWVzc2FnZSBpbnRvIHRoZSBjb25zb2xlPC9oMz4NCgkJeyRzZWxlY3RMb2d9eyRkZWxldGVMb2d9PGxhYmVsIGZvcj0neyRpZH1sZXZlbCcgY2xhc3M9J2hlbHAnIC8+TGVhcm4gbW9yZSBhYm91dCB0aGVzZSBvcHRpb25zIG9uIDxhIGhyZWY9JyMnIHRhcmdldD0nX2JsYW5rJz50aGUgd2lraTwvYT4uPC9sYWJlbD4NCgk8YnIvPg0KCXskc3VibWl0fQ0KPC9mb3JtPg0KPGhyLz57Kg0KPHVsPjxsaT48Yj5ERUJVRyA6PC9iPiBFdmVyeXRoaW5nIHdpbGwgYmUgd3JvdGUuIEVWRVJZVEhJTkcgITwvbGk+DQo8bGk+PGI+SU5GTyA6PC9iPiB0aGUgZGVmYXVsdCB2YWx1ZS4gR3JlYXQgZm9yIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC48L2xpPg0KPGxpPjxiPldBUk4gOjwvYj4gd2lsbCBiZSBkaXNwbGF5ZWQgOiB0aGUgZXJyb3JzIGFuZCB0aGUgd2FybmluZ3MuPC9saT4NCjxsaT48Yj5FUlJPUiA6PC9iPiAgd2lsbCBiZSBkaXNwbGF5ZWQgOiB0aGUgZXJyb3JzLjwvbGk+PC91bD4NCjx1bD48bGk+PGI+Tk9ORSA6PC9iPiB3ZSB3b24ndCB1c2UgY2FjaGluZyBzeXN0ZW0gOiBHcmVhdCBkdXJpbmcgeW91ciBkZXZlbG9wbWVudDwvbGk+DQo8bGk+PGI+Q0FMTCA6PC9iPiB0aGUgZnJhbWV3b3JrIHdpbGwgdHJ5IHRvIHJlbWVtYmVyIHRoZSBsYXN0IHJlc2VhcmNoIGJ1dCBvbmx5IGZvciB0aGUgY3VycmVudCBjYWxsIG9mIFBIUC48L2xpPjwvdWw+Kn0NCg0KPHByZSBpZD0nb3V0cHV0Jz48L3ByZT4NCntsaXRlcmFsfQ0KPHNjcmlwdD4NCg0KZnVuY3Rpb24gZG9VcGRhdGUoKSB7DQokLmFqYXgoe3R5cGU6ICJHRVQiLCB1cmwgOiAiey9saXRlcmFsfXskdXJsTG9nfXtsaXRlcmFsfSIsIGNhY2hlOmZhbHNlLA0KICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7DQogICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gNCkgew0KICAgICAgICAgICAgICAgIC8vIERhdGEgYXJlIGFzc3VtZWQgdG8gYmUgaW4gSFRNTCBmb3JtYXQNCiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gc29tZXRoaW5nIGxpa2UgPHAvPiBpbiBjYXNlIG9mIG5vIHVwZGF0ZXMNCiAgICAgICAgICAgICAgICAkKCIjb3V0cHV0IikudGV4dChkYXRhKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgc2V0VGltZW91dCgiZG9VcGRhdGUoKSIsIDIwMDApOw0KICAgICAgICAgICB9fSk7DQogIA0KfQ0KDQpzZXRUaW1lb3V0KCJkb1VwZGF0ZSgpIiwgMjAwMCk7DQo8L3NjcmlwdD57L2xpdGVyYWx9]]></data>
	</file>
</module>
