<?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>CMSForms</name>
	<version>0.0.8</version>
  <mincmsversion>1.8.2</mincmsversion>
	<help><![CDATA[PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgJmx0O2N5YmVydG90b3BoZUBnbWFpbC5jb20mZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC4wLjg8YnIgLz4=]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/CMSForms.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCglNb2R1bGU6IENNUyBGb3JtcyAtIFRoaXMgbW9kdWxlIGhlbHBzIGRldmVsb3BlcnMgdG8gaGFuZGxlIGZvcm1zIGZvciB0aGVpciBmcm9udGVuZCBvciBiYWNrZW5kIGFwcGxpY2F0aW9ucwoJCglDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwIMKpCiovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9jbGFzc2VzL0NNU0Zvcm0uY2xhc3MucGhwJzsKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9saWIvY2xhc3Nlcy9DTVNGb3JtV2lkZ2V0LmNsYXNzLnBocCc7CnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL2NsYXNzZXMvQ01TRm9ybVZhbGlkYXRvci5jbGFzcy5waHAnOwoKY2xhc3MgQ01TRm9ybXMgZXh0ZW5kcyBDTVNNb2R1bGUKewoJcHVibGljIGZ1bmN0aW9uIEdldE5hbWUoKQkJCQl7CXJldHVybiAnQ01TRm9ybXMnOwkgfQoJcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSAgICAgICAgICAgCXsgcmV0dXJuICcwLjAuOCc7IH0KCXB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3IoKSAgICAgICAgICAgIAl7IHJldHVybiAnSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyJzsgfQoJcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgICAgICAgCXsgcmV0dXJuICdjeWJlcnRvdG9waGVAZ21haWwuY29tJzsgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRsYW5nID0gYXJyYXkoCgkKCQoJCgkKCQovLyBFeGNlcHRpb25zCgonZmllbGRfaXNfZW1wdHknID0+ICdUaGUgZmllbGQgJXMgaXMgZW1wdHkuJywJCidmaWVsZF9jYW5ub3RfYmVfZW1wdHknID0+ICdUaGUgZmllbGQgIiVzIiBjYW5ub3QgYmUgZW1wdHkuJywJCid1bmtub3duIGZpZWxkJyA9PiAnVW5rbm93biBmaWVsZCAiJXMiJywKJ2ZpZWxkcyBub3QgZXF1YWwnID0+ICdUaGUgIiVzIiBhbmQgIiVzIiBoYXZlIHRvIGJlIHRoZSBzYW1lLicsCidpbnZhbGlkIGVtYWlsJyA9PiAnVGhlIGVtYWlsICZsYXF1bzslcyZyYXF1bzsgaXMgbm90IHZhbGlkLicsCidmaWVsZCBub3QgdW5pcXVlJyA9PiAnJXMgYWxyZWFkeSBleGlzdHMuJwoJCgkKCQoJCgkKCQopOw==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/CMSForm.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgkvKgoJCVRoaXMgY2xhc3MgYWltIHRvIGhhbmRsZSBDTVMgRm9ybXMgdmVyeSBkaWZmZXJlbnRseS4KCQkKCQlBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4KCQlDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwCgkJTGljZW5jZTogR1BMCQkKCQoJKi8KCmNsYXNzIENNU0Zvcm0JZXh0ZW5kcwlDbXNPYmplY3QKewoJCglwcm90ZWN0ZWQgJG1vZHVsZV9uYW1lOwoJcHJvdGVjdGVkICRpZDsgLy8gVGhlIGZvcm0gSUQKCXByb3RlY3RlZCAkcmV0dXJuaWQ7Cglwcm90ZWN0ZWQgJGFjdGlvbjsJCglwcm90ZWN0ZWQgJG1ldGhvZCA9ICdnZXQnOwoJcHJvdGVjdGVkICRlbmN0eXBlOwoJCglwcm90ZWN0ZWQgJHdpZGdldHMgPSBhcnJheSgpOyAvLyBUaGUgZm9ybSB3aWRnZXRzCglwcm90ZWN0ZWQgJGhpZGRlbl93aWRnZXRzID0gYXJyYXkoKTsgLy8gU3BlY2lmaWMgd2lkZ2V0cyBzaG93biBvbiB0aGUgYmVnaW47Cglwcm90ZWN0ZWQgJGZpZWxkc2V0cyA9IGFycmF5KCk7IC8vIFN1YiBmb3JtcyBmb3IgZmllbGRzZXRzCgkKCXByb3RlY3RlZCAkbGFiZWxzID0gYXJyYXkoCgkJJ3N1Ym1pdCcgPT4gJ1N1Ym1pdCcsCgkJJ2FwcGx5JyA9PiAnQXBwbHknLAoJCSdjYW5jZWwnID0+ICdDYW5jZWwnLAoJCSduZXh0JyA9PiAnTmV4dCcsCgkJJ3ByZXZpb3VzJyA9PiAnUHJldmlvdXMnCgkJKTsKCQkKCXByb3RlY3RlZCAkYWN0aXZlX2J1dHRvbnMgPSBhcnJheSgnc3VibWl0JywnY2FuY2VsJyk7Cglwcm90ZWN0ZWQgJGZvcm1fZXJyb3JzID0gYXJyYXkoKTsgCglwcm90ZWN0ZWQgJHNob3dfcHJpb3JpdHkgPSBmYWxzZTsKCQoJcHJvdGVjdGVkICR0ZW1wbGF0ZXMgPSBhcnJheSgKCQknd2lkZ2V0JyA9PiAnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJPGRpdiBjbGFzcz0icGFnZXRleHQiPiVMQUJFTCU6PC9kaXY+CgkJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+JUlOUFVUJSA8ZW0+JVRJUFMlPC9lbT48L2Rpdj4KCQkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+CgkJPC9kaXY+JywKCQknZXJyb3JzJyA9PiAnPGRpdiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+JywKCQknYnV0dG9ucycgPT4gJzxwPiVCVVRUT05TJTwvcD4nCgkJKTsKCQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVfbmFtZSwgJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQpCgl7CgkJJHRoaXMtPm1vZHVsZV9uYW1lID0gJG1vZHVsZV9uYW1lOwoJCSR0aGlzLT5pZCA9ICRpZDsKCQkkdGhpcy0+cmV0dXJuaWQgPSAkcmV0dXJuaWQ7CgkJJHRoaXMtPmFjdGlvbiA9ICRhY3Rpb247Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRNdWx0aXBhcnRGb3JtKCkKCXsKCQkkdGhpcy0+bWV0aG9kID0gJ3Bvc3QnOwoJCSR0aGlzLT5lbmN0eXBlID0gJ211bHRpcGFydC9mb3JtLWRhdGEnOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gcHJvY2VzcygpCgl7CgkJZm9yZWFjaCgkdGhpcy0+d2lkZ2V0cyBhcyAkd2lkZ2V0KQoJCXsKCQkJJHdpZGdldC0+cHJvY2VzcygpOwoJCX0KCQkKCQlmb3JlYWNoKCR0aGlzLT5oaWRkZW5fd2lkZ2V0cyBhcyAkd2lkZ2V0KQoJCXsKCQkJJHdpZGdldC0+cHJvY2VzcygpOwoJCX0JCQoJCQoJCWZvcmVhY2goJHRoaXMtPmZpZWxkc2V0cyBhcyAkZmllbGRzZXQpCgkJewoJCQkkZmllbGRzZXQtPnByb2Nlc3MoKTsKCQl9Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiByZW5kZXIoKQoJewoJCS8vIFRPRE8KCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldFRlbXBsYXRlKCR0ZW1wbGF0ZV9uYW1lLCAkdGVtcGxhdGUpCgl7CgkJJHRoaXMtPnRlbXBsYXRlc1skdGVtcGxhdGVfbmFtZV0gPSAkdGVtcGxhdGU7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJzKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddKSkKCQl7CQkJCgkJCSRodG1sID0gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUZvcm1TdGFydCgkdGhpcy0+aWQsICR0aGlzLT5hY3Rpb24sICR0aGlzLT5yZXR1cm5pZCwgJHRoaXMtPm1ldGhvZCwgJHRoaXMtPmVuY3R5cGUpOwoJCQlmb3JlYWNoKCR0aGlzLT5oaWRkZW5fd2lkZ2V0cyBhcyAkd2lkZ2V0KQoJCQl7CgkJCQkkaHRtbCAuPSAkd2lkZ2V0OwoJCQl9CQkJCgkJCXJldHVybiAkaHRtbDsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRGb290ZXJzKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddKSkKCQl7CQkJCgkJCSRodG1sID0gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUZvcm1FbmQoKTsKCQkJcmV0dXJuICRodG1sOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldExhYmVsKCRsYWJlbCwgJHRpdGxlKQoJewoJCSR0aGlzLT5sYWJlbHNbJGxhYmVsXSA9ICR0aXRsZTsKCX0KCQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0QnV0dG9ucygkYnV0dG9ucyA9IGFycmF5KCkpCgl7CgkJaWYgKGlzX2FycmF5KCRidXR0b25zKSkJJHRoaXMtPmFjdGl2ZV9idXR0b25zID0gJGJ1dHRvbnM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRCdXR0b25zKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGh0bWwgPSAnJzsKCQlmb3JlYWNoKCR0aGlzLT5hY3RpdmVfYnV0dG9ucyBhcyAkYnV0dG9uKQoJCXsKCQkJJGh0bWwgLj0gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUlucHV0U3VibWl0KCR0aGlzLT5pZCwgJGJ1dHRvbiwgJHRoaXMtPmxhYmVsc1skYnV0dG9uXSk7CgkJfQoJCQoJCXJldHVybiAkaHRtbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldFdpZGdldCgkbmFtZSwkdHlwZSwkc2V0dGluZ3MgPSBhcnJheSgpKQoJewoJCSR3aWRnZXQgPSBuZXcgQ01TRm9ybVdpZGdldCgmJHRoaXMsJHRoaXMtPmlkLCR0aGlzLT5tb2R1bGVfbmFtZSwkbmFtZSwkdHlwZSwkc2V0dGluZ3MpOwoJCWlmICgkdHlwZSA9PSAnaGlkZGVuJykKCQl7CgkJCSR0aGlzLT5oaWRkZW5fd2lkZ2V0c1skbmFtZV0gPSAkd2lkZ2V0OwoJCX0KCQllbHNlaWYgKCR0eXBlID09ICdmaWxlJykKCQl7CgkJCSR0aGlzLT5zZXRNdWx0aXBhcnRGb3JtKCk7IC8vIElmIHdlIGFkZCBmaWxlcywgd2UgaGF2ZSB0byBiZSBwb3N0ZWQgbXVsdGlwYXJ0IGZvcm1zLi4uCgkJCSR0aGlzLT53aWRnZXRzWyRuYW1lXSA9ICR3aWRnZXQ7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT53aWRnZXRzWyRuYW1lXSA9ICR3aWRnZXQ7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0V2lkZ2V0cygpCgl7CgkJcmV0dXJuICR0aGlzLT53aWRnZXRzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0V2lkZ2V0KCRuYW1lKQoJewoJCWlmIChpc3NldCgkdGhpcy0+d2lkZ2V0c1skbmFtZV0pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT53aWRnZXRzWyRuYW1lXTsKCQl9CgkJZWxzZWlmIChpc3NldCgkdGhpcy0+aGlkZGVuX3dpZGdldHNbJG5hbWVdKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+aGlkZGVuX3dpZGdldHNbJG5hbWVdOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzaG93V2lkZ2V0cygkdGVtcGxhdGU9bnVsbCkKCXsKCQkkaHRtbCA9ICcnOwoJCWZvcmVhY2goJHRoaXMtPndpZGdldHMgYXMgJHdpZGdldCkKCQl7CgkJCSRodG1sIC49ICR3aWRnZXQtPnNob3coJHRlbXBsYXRlKTsKCQl9CgkJcmV0dXJuICRodG1sOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gaGFzRXJyb3JzKCkKCXsKCQkkaGFzX2Vycm9ycyA9IGZhbHNlOwoJCQoJCWZvcmVhY2goJHRoaXMtPndpZGdldHMgYXMgJHdpZGdldCkKCQl7CgkJCWlmKCR3aWRnZXQtPmhhc0Vycm9ycygpKQoJCQl7CgkJCQkkaGFzX2Vycm9ycyA9IHRydWU7CgkJCX0KCQl9CgkJCgkJZm9yZWFjaCgkdGhpcy0+aGlkZGVuX3dpZGdldHMgYXMgJHdpZGdldCkKCQl7CgkJCWlmKCR3aWRnZXQtPmhhc0Vycm9ycygpKQoJCQl7CgkJCQkkaGFzX2Vycm9ycyA9IHRydWU7CgkJCX0KCQl9CgkJCgkJZm9yZWFjaCgkdGhpcy0+ZmllbGRzZXRzIGFzICRmaWVsZHNldCkKCQl7CgkJCWlmKCRmaWVsZHNldC0+aGFzRXJyb3JzKCkpCgkJCXsKCQkJCSRoYXNfZXJyb3JzID0gdHJ1ZTsKCQkJfQoJCX0KCQkKCQlpZiAoY291bnQoJHRoaXMtPmZvcm1fZXJyb3JzKSAhPSAwKQoJCXsKCQkJJGhhc19lcnJvcnMgPSB0cnVlOwoJCX0KCQkKCQlyZXR1cm4gJGhhc19lcnJvcnM7IAoJfQoJCglwdWJsaWMgZnVuY3Rpb24gbm9FcnJvcigpCgl7CgkJcmV0dXJuICEkdGhpcy0+aGFzRXJyb3JzKCk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQoJewoJCXJldHVybiAkdGhpcy0+Zm9ybV9lcnJvcnM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzaG93RXJyb3JzKCkKCXsKCQkkaHRtbCA9ICcnOwoJCWlmKGNvdW50KCR0aGlzLT5mb3JtX2Vycm9ycykgPiAwKQoJCXsKCQkJJGh0bWwgLj0gJzx1bCBjbGFzcz0iZXJyb3JzIj4nOwoJCQlmb3JlYWNoKCR0aGlzLT5mb3JtX2Vycm9ycyBhcyAkcHJpb3JpdHkgPT4gJGVycm9ycykKCQkJewoJCQkJJGh0bWwgLj0gJzxsaT4nOwoJCQkJaWYgKCR0aGlzLT5zaG93X3ByaW9yaXR5KQkkaHRtbCAuPSAnPGVtIGNsYXNzPSJmb3JtX2Vycm9yX3ByaW9yaXR5Ij4nLiRwcmlvcml0eS4nPC9lbT4nOwoJCQkJJGh0bWwgLj0gJzx1bD4nOwoJCQkJZm9yZWFjaCgkZXJyb3JzIGFzICRlcnJvcikKCQkJCXsKCQkJCQkkaHRtbCAuPSAnPGxpPicuJGVycm9yLic8L2xpPic7CgkJCQl9CQkJCQoJCQkJJGh0bWwgLj0gJzwvdWw+PC9saT4nOwoJCQl9CgkJCSRodG1sIC49ICc8L3VsPic7CgkJfQoJCXJldHVybiAkaHRtbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldEVycm9yKCRtZXNzYWdlLCRwcmlvcml0eT0nZGVmYXVsdCcpCgl7CgkJJHRoaXMtPmZvcm1fZXJyb3JzWyRwcmlvcml0eV1bXSA9ICRtZXNzYWdlOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gaXNTdWJtaXR0ZWQoKQoJewoJCWlmIChpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLidzdWJtaXQnXSkpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gaXNBcHBsaWVkKCkKCXsKCQlpZiAoaXNzZXQoJF9SRVFVRVNUWyR0aGlzLT5pZC4nYXBwbHknXSkpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQkKCQoJcHVibGljIGZ1bmN0aW9uIGlzQ2FuY2VsbGVkKCkKCXsKCQlpZiAoaXNzZXQoJF9SRVFVRVNUWyR0aGlzLT5pZC4nY2FuY2VsJ10pKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNQb3N0ZWQoKQoJewoJCS8vIEFkZCBjaGVjayBmb3IgbmV4dCBhbmQgcHJldmlvdXMKCQlpZiAoJHRoaXMtPmlzU3VibWl0dGVkKCkgfHwgJHRoaXMtPmlzQXBwbGllZCgpKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldEZpZWxkc2V0KCRsZWdlbmQpCgl7CgkJJHRoaXMtPmZpZWxkc2V0c1skbGVnZW5kXSA9IG5ldyBDTVNGb3JtRmllbGRzZXQoJHRoaXMsJGxlZ2VuZCk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZHNldCgkbGVnZW5kKQoJewoJCWlmIChpc3NldCgkdGhpcy0+ZmllbGRzZXRzWyRsZWdlbmRdKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+ZmllbGRzZXRzWyRsZWdlbmRdOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHJlbmRlckZpZWxkc2V0cygkd2lkZ2V0X3RlbXBsYXRlID0gbnVsbCkKCXsKCQkkaHRtbCA9ICcnOwoJCWZvcmVhY2goJHRoaXMtPmZpZWxkc2V0cyBhcyAkZmllbGRzZXQpCgkJewoJCQkkaHRtbCAuPSAkZmllbGRzZXQtPnJlbmRlcigkd2lkZ2V0X3RlbXBsYXRlKTsKCQl9CgkJcmV0dXJuICRodG1sOwoJfQoJCn0KCmNsYXNzIENNU0Zvcm1GaWVsZHNldCBleHRlbmRzIENNU0Zvcm0KewoJcHJvdGVjdGVkICRsZWdlbmQ7CgkKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgmJGZvcm0sICRsZWdlbmQpCgl7CgkJcGFyZW50OjpfX2NvbnN0cnVjdCgkZm9ybS0+bW9kdWxlX25hbWUsICRmb3JtLT5pZCwgJGZvcm0tPmFjdGlvbiwgJGZvcm0tPnJldHVybmlkKTsKCQkkdGhpcy0+bGVnZW5kID0gJGxlZ2VuZDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHJlbmRlcigkd2lkZ2V0X3RlbXBsYXRlPW51bGwpCgl7CgkJJGh0bWwgPSAnPGZpZWxkc2V0PjxsZWdlbmQ+Jy4kdGhpcy0+bGVnZW5kLic8L2xlZ2VuZD4nOwoJCSRodG1sIC49ICR0aGlzLT5zaG93V2lkZ2V0cygkd2lkZ2V0X3RlbXBsYXRlKTsKCQkkaHRtbCAuPSAnPC9maWVsZHNldD4nOwoJCXJldHVybiAkaHRtbDsKCX0KCQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/classes/CMSFormValidator.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgkvKgoJCVRoaXMgY2xhc3MgYWltIHRvIGhhbmRsZSBDTVMgRm9ybXMgdmVyeSBkaWZmZXJlbnRseS4KCQkKCQlBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4KCQlDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwCgkJTGljZW5jZTogR1BMCQkKCQoJKi8KCQpjbGFzcyBDTVNGb3JtVmFsaWRhdG9yCnsKCXByb3RlY3RlZCAkd2lkZ2V0OwoJcHJvdGVjdGVkICR2YWxpZGF0b3I7Cglwcm90ZWN0ZWQgJHBhcmFtczsKCQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCYkd2lkZ2V0LCR2YWxpZGF0b3IsJHBhcmFtcykKCXsKCQkkdGhpcy0+d2lkZ2V0ID0gJHdpZGdldDsKCQkkdGhpcy0+dmFsaWRhdG9yID0gJHZhbGlkYXRvcjsKCQkkdGhpcy0+cGFyYW1zID0gJHBhcmFtczsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGNoZWNrKCkKCXsKCQlzd2l0Y2goJHRoaXMtPnZhbGlkYXRvcikKCQl7CgkJCWNhc2UgJ25vdF9lbXB0eSc6CgkJCQlyZXR1cm4gJHRoaXMtPkNoZWNrTm90RW1wdHkoKTsKCQkJY2FzZSAnZXF1YWxfZmllbGQnOgoJCQkJcmV0dXJuICR0aGlzLT5DaGVja0VxdWFsRmllbGQoKTsKCQkJY2FzZSAnZW1haWwnOgoJCQkJcmV0dXJuICR0aGlzLT5DaGVja0VtYWlsKCk7CgkJCWNhc2UgJ3VuaXF1ZSc6CgkJCQlyZXR1cm4gJHRoaXMtPkNoZWNrVW5pcXVlKCk7CgkJCWRlZmF1bHQ6CgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIGZvcm0gdmFsaWRhdG9yICInLiR0aGlzLT52YWxpZGF0b3IgLiciLicpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIENoZWNrVW5pcXVlKCkKCXsKCQkkdmFsdWUgPSBpbXBsb2RlKCd8JywkdGhpcy0+d2lkZ2V0LT5nZXRWYWx1ZXMoKSk7CgkJaWYgKGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5wYXJhbXMsICR2YWx1ZSkgIT09IG51bGwpCgkJewoJCQlnbG9iYWwgJGdDbXM7CgkJCXRocm93IG5ldyBFeGNlcHRpb24oJGdDbXMtPm1vZHVsZXNbJ0NNU0Zvcm1zJ11bJ29iamVjdCddLT5sYW5nKCdmaWVsZCBub3QgdW5pcXVlJywgJHZhbHVlKSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gQ2hlY2tOb3RFbXB0eSgpCgl7CQoJCWdsb2JhbCAkZ0NtczsKCQkkdmFsdWVzID0gJHRoaXMtPndpZGdldC0+Z2V0VmFsdWVzKCk7CgkJaWYgKGlzX2FycmF5KCR2YWx1ZXMpICYmIGNvdW50KCR2YWx1ZXMpID09IDApCgkJewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnZmllbGRfY2Fubm90X2JlX2VtcHR5JywgJHRoaXMtPndpZGdldC0+Z2V0RnJpZW5kbHlOYW1lKCkpKTsKCQl9CgkJZWxzZWlmKGVtcHR5KCR2YWx1ZXMpKQoJCXsKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigkZ0Ntcy0+bW9kdWxlc1snQ01TRm9ybXMnXVsnb2JqZWN0J10tPmxhbmcoJ2ZpZWxkX2Nhbm5vdF9iZV9lbXB0eScsICR0aGlzLT53aWRnZXQtPmdldEZyaWVuZGx5TmFtZSgpKSk7CgkJfQoJCQoJCXJldHVybiB0cnVlOwoJfQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gQ2hlY2tFcXVhbEZpZWxkKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJCSR2YWx1ZTEgPSBzZXJpYWxpemUoJHRoaXMtPndpZGdldC0+Z2V0VmFsdWVzKCkpOwoJCQkKCQkJdHJ5CgkJCXsKCQkJCSR2YWx1ZTIgPSBzZXJpYWxpemUoJHRoaXMtPndpZGdldC0+Z2V0Rm9ybSgpLT5nZXRXaWRnZXQoJHRoaXMtPnBhcmFtcyktPmdldFZhbHVlcygpKTsKCQkJfQoJCQljYXRjaChFeGNlcHRpb24gJGUpCgkJCXsKCQkJCXRocm93IG5ldyBFeGNlcHRpb24oJGdDbXMtPm1vZHVsZXNbJ0NNU0Zvcm1zJ11bJ29iamVjdCddLT5sYW5nKCd1bmtub3duIGZpZWxkJywgJHRoaXMtPnBhcmFtcykpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCQoJCQlpZiAoJHZhbHVlMSAhPSAkdmFsdWUyKQoJCQl7CgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnZmllbGRzIG5vdCBlcXVhbCcsICR0aGlzLT53aWRnZXQtPmdldEZyaWVuZGx5TmFtZSgpLCAkdGhpcy0+d2lkZ2V0LT5nZXRGb3JtKCktPmdldFdpZGdldCgkdGhpcy0+cGFyYW1zKS0+Z2V0RnJpZW5kbHlOYW1lKCkpKTsKCQkJfQoJCQkKCQkJcmV0dXJuIHRydWU7CgkJCgl9CgkKCXByb3RlY3RlZCBmdW5jdGlvbiBDaGVja0VtYWlsKCkKCXsKCQkkZW1haWwgPSBpbXBsb2RlKCd8JywgJHRoaXMtPndpZGdldC0+Z2V0VmFsdWVzKCkpOwoJCWlmICghc2VsZjo6dmFsaWRFbWFpbCgkZW1haWwpKQoJCXsKCQkJZ2xvYmFsICRnQ21zOwoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnaW52YWxpZCBlbWFpbCcsICRlbWFpbCkpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCS8vIEV4dGVybmFsIGZ1bmN0aW9ucwoJLyoqCglWYWxpZGF0ZSBhbiBlbWFpbCBhZGRyZXNzLgoJUHJvdmlkZSBlbWFpbCBhZGRyZXNzIChyYXcgaW5wdXQpCglSZXR1cm5zIHRydWUgaWYgdGhlIGVtYWlsIGFkZHJlc3MgaGFzIHRoZSBlbWFpbCAKCWFkZHJlc3MgZm9ybWF0IGFuZCB0aGUgZG9tYWluIGV4aXN0cy4KCSovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHZhbGlkRW1haWwoJGVtYWlsKQoJewoJICAgJGlzVmFsaWQgPSB0cnVlOwoJICAgJGF0SW5kZXggPSBzdHJycG9zKCRlbWFpbCwgIkAiKTsKCSAgIGlmIChpc19ib29sKCRhdEluZGV4KSAmJiAhJGF0SW5kZXgpCgkgICB7CgkgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgfQoJICAgZWxzZQoJICAgewoJICAgICAgJGRvbWFpbiA9IHN1YnN0cigkZW1haWwsICRhdEluZGV4KzEpOwoJICAgICAgJGxvY2FsID0gc3Vic3RyKCRlbWFpbCwgMCwgJGF0SW5kZXgpOwoJICAgICAgJGxvY2FsTGVuID0gc3RybGVuKCRsb2NhbCk7CgkgICAgICAkZG9tYWluTGVuID0gc3RybGVuKCRkb21haW4pOwoJICAgICAgaWYgKCRsb2NhbExlbiA8IDEgfHwgJGxvY2FsTGVuID4gNjQpCgkgICAgICB7CgkgICAgICAgICAvLyBsb2NhbCBwYXJ0IGxlbmd0aCBleGNlZWRlZAoJICAgICAgICAgJGlzVmFsaWQgPSBmYWxzZTsKCSAgICAgIH0KCSAgICAgIGVsc2UgaWYgKCRkb21haW5MZW4gPCAxIHx8ICRkb21haW5MZW4gPiAyNTUpCgkgICAgICB7CgkgICAgICAgICAvLyBkb21haW4gcGFydCBsZW5ndGggZXhjZWVkZWQKCSAgICAgICAgICRpc1ZhbGlkID0gZmFsc2U7CgkgICAgICB9CgkgICAgICBlbHNlIGlmICgkbG9jYWxbMF0gPT0gJy4nIHx8ICRsb2NhbFskbG9jYWxMZW4tMV0gPT0gJy4nKQoJICAgICAgewoJICAgICAgICAgLy8gbG9jYWwgcGFydCBzdGFydHMgb3IgZW5kcyB3aXRoICcuJwoJICAgICAgICAgJGlzVmFsaWQgPSBmYWxzZTsKCSAgICAgIH0KCSAgICAgIGVsc2UgaWYgKHByZWdfbWF0Y2goJy9cXC5cXC4vJywgJGxvY2FsKSkKCSAgICAgIHsKCSAgICAgICAgIC8vIGxvY2FsIHBhcnQgaGFzIHR3byBjb25zZWN1dGl2ZSBkb3RzCgkgICAgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgICAgfQoJICAgICAgZWxzZSBpZiAoIXByZWdfbWF0Y2goJy9eW0EtWmEtejAtOVxcLVxcLl0rJC8nLCAkZG9tYWluKSkKCSAgICAgIHsKCSAgICAgICAgIC8vIGNoYXJhY3RlciBub3QgdmFsaWQgaW4gZG9tYWluIHBhcnQKCSAgICAgICAgICRpc1ZhbGlkID0gZmFsc2U7CgkgICAgICB9CgkgICAgICBlbHNlIGlmIChwcmVnX21hdGNoKCcvXFwuXFwuLycsICRkb21haW4pKQoJICAgICAgewoJICAgICAgICAgLy8gZG9tYWluIHBhcnQgaGFzIHR3byBjb25zZWN1dGl2ZSBkb3RzCgkgICAgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgICAgfQoJICAgICAgZWxzZSBpZgoJKCFwcmVnX21hdGNoKCcvXihcXFxcLnxbQS1aYS16MC05ISMlJmBfPVxcLyRcJyorP157fXx+Li1dKSskLycsCgkgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlKCJcXFxcIiwiIiwkbG9jYWwpKSkKCSAgICAgIHsKCSAgICAgICAgIC8vIGNoYXJhY3RlciBub3QgdmFsaWQgaW4gbG9jYWwgcGFydCB1bmxlc3MgCgkgICAgICAgICAvLyBsb2NhbCBwYXJ0IGlzIHF1b3RlZAoJICAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXiIoXFxcXCJ8W14iXSkrIiQvJywKCSAgICAgICAgICAgICBzdHJfcmVwbGFjZSgiXFxcXCIsIiIsJGxvY2FsKSkpCgkgICAgICAgICB7CgkgICAgICAgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgICAgICAgfQoJICAgICAgfQoJICAgICAgaWYgKCRpc1ZhbGlkICYmICEoY2hlY2tkbnNycigkZG9tYWluLCJNWCIpIHx8IAoJIGNoZWNrZG5zcnIoJGRvbWFpbiwiQSIpKSkKCSAgICAgIHsKCSAgICAgICAgIC8vIGRvbWFpbiBub3QgZm91bmQgaW4gRE5TCgkgICAgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgICAgfQoJICAgfQoJICAgcmV0dXJuICRpc1ZhbGlkOwoJfQp9]]></data>
	</file>
	<file>
	  <filename>/lib/classes/CMSFormWidget.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgkvKgoJCVRoaXMgY2xhc3MgYWltIHRvIGhhbmRsZSBDTVMgRm9ybXMgdmVyeSBkaWZmZXJlbnRseS4KCQkKCQlBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4KCQlDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwCgkJTGljZW5jZTogR1BMCQkKCQoJKi8KCmNsYXNzIENNU0Zvcm1XaWRnZXQJZXh0ZW5kcyBDbXNPYmplY3QKewoJLy8gU2V0dGluZ3MKCXByb3RlY3RlZCAkaWQ7IC8vIFRoZSBmb3JtIElECglwcm90ZWN0ZWQgJG1vZHVsZV9uYW1lOwoJcHJvdGVjdGVkICRuYW1lOyAvLyBUaGUgaW5wdXQgbmFtZQoJcHJvdGVjdGVkICR0eXBlOwoJcHJvdGVjdGVkICRpbnB1dDsKCXByb3RlY3RlZCAkdmFsdWVzID0gYXJyYXkoKTsKCXByb3RlY3RlZCAkc2V0dGluZ3MgPSBhcnJheSgpOwoJcHJvdGVjdGVkICRmb3JtX2Vycm9yczsKCXByb3RlY3RlZCAkc2hvd19wcmlvcml0eSA9IGZhbHNlOwovLwlwcm90ZWN0ZWQgJHZhbGlkYXRpb25zID0gYXJyYXkoKTsKCXByb3RlY3RlZCAkc2hvd25lZCA9IGZhbHNlOwoJcHJvdGVjdGVkICRmb3JtOwoJCglwcm90ZWN0ZWQgJGlzX3ZhbGlkID0gdHJ1ZTsKCQoJcHVibGljIHN0YXRpYyAkZmllbGRzID0gYXJyYXkoCgkJJ3RleHQnIAkJCT0+IGFycmF5KCd0aXRsZScgPT4gJ1RleHQgZmllbGQnLCAnYWRvJyA9PiAnQygyNTUpJyksCgkJJ3RleHRhcmVhJyAJPT4gYXJyYXkoJ3RpdGxlJyA9PiAnVGV4dCBhcmVhJywgCSdhZG8nID0+ICdYTCcpLAoJCSdjaGVja2JveCcgCT0+IGFycmF5KCd0aXRsZScgPT4gJ0NoZWNrYm94JywgCSdhZG8nID0+ICdJJyksCgkJJ3NlbGVjdCcgCQk9PiBhcnJheSgndGl0bGUnID0+ICdTZWxlY3QnLCAJCSdhZG8nID0+ICdDKDI1NSknKSwKCQkncGFzc3dvcmQnICA9PiBhcnJheSgndGl0bGUnID0+ICdQYXNzd29yZCcsIAknYWRvJyA9PiAnQygyNTUpJyksCgkJJ2RhdGUnIAkJCT0+IGFycmF5KCd0aXRsZScgPT4gJ0RhdGUnLCAJCQknYWRvJyA9PiAnRFQnKSwKCQkndGltZScgCQkJPT4gYXJyYXkoJ3RpdGxlJyA9PiAnVGltZScsIAkJCSdhZG8nID0+ICdEVCcpLAoJCSdmaWxlJyAJCQk9PiBhcnJheSgndGl0bGUnID0+ICdGaWxlJywgCQkJJ2FkbycgPT4gJ0MoMjU1KScpCgkJKTsKCQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCYkZm9ybSwgJGlkLCAkbW9kdWxlX25hbWUsICRuYW1lLCAkdHlwZSwkc2V0dGluZ3M9YXJyYXkoKSkKCXsKCQkkdGhpcy0+Zm9ybSA9ICYkZm9ybTsKCQkkdGhpcy0+aWQgPSAkaWQ7CgkJJHRoaXMtPm1vZHVsZV9uYW1lID0gJG1vZHVsZV9uYW1lOwoJCSR0aGlzLT5uYW1lID0gJG5hbWU7CgkJJHRoaXMtPnR5cGUgPSAkdHlwZTsKCQkkdGhpcy0+c2V0dGluZ3MgPSAkc2V0dGluZ3M7CgkJJHRoaXMtPmluaXQoKTsKCX0KCQoJLy8gU0VUVVAKCQoJLy8gRklMTAoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdCgpCgl7CgkJJHRoaXMtPmluaXRWYWx1ZXMoKTsKCX0KCQoJCXByb3RlY3RlZCBmdW5jdGlvbiBpbml0VmFsdWVzKCkKCQl7CQoJCQlnbG9iYWwgJGdDbXM7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkKCQkJewoJCQkJY2FzZSAnY2hlY2tib3gnOgoJCQkJCWlmKAoJCQkJCQkhaXNzZXQoJF9SRVFVRVNUWyR0aGlzLT5pZC4kdGhpcy0+bmFtZV0pCgkJCQkJCSYmCgkJCQkJCSgKCQkJCQkJCWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ3N1Ym1pdCddKQoJCQkJCQkJfHwKCQkJCQkJCWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ2FwcGx5J10pCgkJCQkJCSkKCgkJCQkJKQoJCQkJCXsKCQkJCQkJLy8gQ2FzZSB3aGVuIGNoZWNrYm94IGlzIHVuY2hlY2tlZCBhbmQgZm9ybSBpcyBzdWJtaXR0ZWQsIHdlIHNob3VsZCBlbXB0eSB0aGUgdmFsdWUKCQkJCQkJJHRoaXMtPnNldFZhbHVlcygpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQlkZWZhdWx0OgoJCQkJCWlmIChpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLiR0aGlzLT5uYW1lXSkpCgkJCQkJewoJCQkJCQlpZiAoaXNfYXJyYXkoJF9SRVFVRVNUWyR0aGlzLT5pZC4kdGhpcy0+bmFtZV0pKQoJCQkJCQl7CgkJCQkJCQkkdGhpcy0+c2V0VmFsdWVzKCRfUkVRVUVTVFskdGhpcy0+aWQuJHRoaXMtPm5hbWVdKTsKCQkJCQkJfSAKCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkkdGhpcy0+c2V0VmFsdWVzKGh0bWxfZW50aXR5X2RlY29kZSgkX1JFUVVFU1RbJHRoaXMtPmlkLiR0aGlzLT5uYW1lXSkpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2VpZihpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ZhbHVlJ10pKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnNldFZhbHVlcygkdGhpcy0+c2V0dGluZ3NbJ3ZhbHVlJ10pOwoJCQkJCX0KCQkJCQllbHNlaWYoCgkJCQkJCWlzc2V0KCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10pICYmICFpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLidzdWJtaXQnXSkgJiYgIWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ2FwcGx5J10pKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnNldFZhbHVlcygkdGhpcy0+ZmV0Y2hWYWx1ZXMoKSk7CgkJCQkJfQoJCQkJCWVsc2VpZihpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkgJiYgJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPmdldFByZWZlcmVuY2UoJHRoaXMtPnNldHRpbmdzWydwcmVmZXJlbmNlJ10pICE9ICcnKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnNldFZhbHVlcygkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Z2V0UHJlZmVyZW5jZSgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkpOwoJCQkJCX0KCgkJCQkJaWYoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydkZWZhdWx0X3ZhbHVlJ10pICYmICEkdGhpcy0+Zm9ybS0+aXNTdWJtaXR0ZWQoKSkgCgkJCQkJewoJCQkJCQlpZiAoJHRoaXMtPmlzRW1wdHkoKSkKCQkJCQkJewoJCQkJCQkJJHRoaXMtPnNldFZhbHVlcygkdGhpcy0+c2V0dGluZ3NbJ2RlZmF1bHRfdmFsdWUnXSk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJYnJlYWs7CgkJCX0KCQl9CgoKCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGZldGNoVmFsdWVzKCkKCQl7CgkJCWlmKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10pICYmIGlzX29iamVjdCgkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddKSkKCQkJewoJCQkJaWYgKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snZ2V0X21ldGhvZCddKSkKCQkJCXsKCQkJCQlyZXR1cm4gJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXS0+eyR0aGlzLT5zZXR0aW5nc1snZ2V0X21ldGhvZCddfSgpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRuYW1lID0gaXNzZXQoJHRoaXMtPnNldHRpbmdzWydmaWVsZF9uYW1lJ10pPyR0aGlzLT5zZXR0aW5nc1snZmllbGRfbmFtZSddOiR0aGlzLT5uYW1lOwoJCQoJCQkJCWlmKG1ldGhvZF9leGlzdHMoJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXSwgJ2dldCcpKQoJCQkJCXsKCQkJCQkJcmV0dXJuICR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10tPmdldCgkbmFtZSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCQl0cnkKCQkJCQkJCXsKCQkJCQkJCQlyZXR1cm4gJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXS0+JG5hbWU7CgkJCQkJCQl9CgkJCQkJCQljYXRjaChFeGNlcHRpb24gJGUpCgkJCQkJCQl7CgkJCQkJCQkvLwlkaWUoJ3VuYWJsZSB0byBkbycpOyAvLyBUT0RPOiBUcmVhdGggZXJyb3IKCQkJCQkJCX0KCQkJCQl9CgkJCQl9CQkJCgkJCX0KCQl9CgkKCS8vIFJFTkRFUgoJCglwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCgl7CgkJLy8gVE9ETzogUkVGQUNUT1JJTkcKCQlpZiAoJHRoaXMtPnR5cGUgPT0gJ2hpZGRlbicpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmdldElucHV0KCk7CgkJfQoJCWVsc2UKCQl7CgkJCSRodG1sID0gJwoJCQk8ZGl2IGNsYXNzPSJmb3JtX3dpZGdldCI+CgkJCQk8ZGl2IGNsYXNzPSJmb3JtX2xhYmVsIj48bGFiZWwgZm9yPSInLiR0aGlzLT5pZC4kdGhpcy0+bmFtZS4nIj4nLiR0aGlzLT5nZXRMYWJlbCgpLic8L2xhYmVsPjwvZGl2Pic7CQkJCQkJCgkJCWlmIChjb3VudCgkdGhpcy0+Zm9ybV9lcnJvcnMpKQoJCQl7CgkJCQkkaHRtbCAuPSAnPGRpdiBjbGFzcz0iZm9ybV9lcnJvcnMiPicgLiAkdGhpcy0+c2hvd0Vycm9ycygpIC4gJzwvZGl2Pic7CgkJCX0JCQkJCgkJCSRodG1sIC49ICcKCQkJCTxkaXYgY2xhc3M9ImZvcm1faW5wdXQiPicuJHRoaXMtPmdldElucHV0KCkuJzwvZGl2PgoJCQk8L2Rpdj4nOwoJCQlyZXR1cm4gJGh0bWw7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2hvdygkdGVtcGxhdGUgPSBudWxsLCAkZm9yY2UgPSBmYWxzZSkKCXsKCQkvLyBUT0RPOiBSRUZBQ1RPUklORwoJCQoJCWlmICghJHRoaXMtPnNob3duZWQgfHwgJGZvcmNlKQoJCXsKCQkJJGh0bWwgPSAnJzsKCQkJaWYgKCFpc19udWxsKCR0ZW1wbGF0ZSkpCgkJCXsKCQkJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoJyVMQUJFTCUnLCAkdGhpcy0+Z2V0TGFiZWwoKSwgJHRlbXBsYXRlKTsKCQkJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoJyVJTlBVVCUnLCAkdGhpcy0+Z2V0SW5wdXQoKSwgJHRleHQpOwoJCQkJJHRleHQgPSBzdHJfcmVwbGFjZSgnJUVSUk9SUyUnLCAkdGhpcy0+c2hvd0Vycm9ycygpLCAkdGV4dCk7CgkJCQkkdGV4dCA9IHN0cl9yZXBsYWNlKCclVElQUyUnLCAkdGhpcy0+Z2V0VGlwcygpLCAkdGV4dCk7CgkJCQkkaHRtbCAuPSAkdGV4dDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRodG1sIC49ICR0aGlzOwkJCQkKCQkJfQkJCgkJCSR0aGlzLT5zaG93bmVkID0gdHJ1ZTsKCQkJcmV0dXJuICRodG1sOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQoJewoJCXJldHVybiAkdGhpcy0+bmFtZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEZvcm0oKQoJewoJCWlmKCFpc19vYmplY3QoJHRoaXMtPmZvcm0pKQoJCXsKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbignQW4gZXJyb3Igb2NjdXJlZCByZXRyaWV2aW5nIHRoZSBmb3JtIG9iamVjdC4nKTsKCQl9CgkJcmV0dXJuICR0aGlzLT5mb3JtOwoJfQoJCgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRGcmllbmRseU5hbWUoKQoJewoJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ2xhYmVsJ10pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zZXR0aW5nc1snbGFiZWwnXTsKCQl9CgkJLy8gVHJ5IHRvIGdldCBpdCBmcm9tIGxhbmd1YWdlIGZpbGUKCQlnbG9iYWwgJGdDbXM7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddKSkKCQl7CgkJCXJldHVybiAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+bGFuZygnZm9ybV8nLiR0aGlzLT5uYW1lKTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgkJCglwdWJsaWMgZnVuY3Rpb24gZ2V0TGFiZWwoKQoJewoJCXJldHVybiAkdGhpcy0+Z2V0RnJpZW5kbHlOYW1lKCk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRUaXBzKCkKCXsKCQlpZiAoaXNzZXQoJHRoaXMtPnNldHRpbmdzWyd0aXBzJ10pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zZXR0aW5nc1sndGlwcyddOwoJCX0KCQkvLyBUcnkgdG8gZ2V0IGl0IGZyb20gbGFuZ3VhZ2UgZmlsZQoJCWdsb2JhbCAkZ0NtczsKCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10pKQoJCXsKCQkJLy8gVE9ETzogVGhpcyBzaG91bGQgYmUgc2hvd24gb25seSBpdCB0aGUgbGFuZyBrZXkgZXhpc3RzLi4uCgkJCS8vcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5sYW5nKCd0aXBzXycuJHRoaXMtPm5hbWUpOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldElucHV0KCkKCXsJCgkJaWYgKCFlbXB0eSgkdGhpcy0+aW5wdXQpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5pbnB1dDsKCQl9CgkJCgkJZ2xvYmFsICRnQ21zOwoJCWlmIChpc3NldCgkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXSkpCgkJewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCgkJCXsKCQkJCWNhc2UgJ3RleHQnOgoJCQkJCXJldHVybiAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlSW5wdXRUZXh0KCR0aGlzLT5pZCwgJHRoaXMtPm5hbWUsICR0aGlzLT5nZXRWYWx1ZSgpLCBpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3NpemUnXSk/JHRoaXMtPnNldHRpbmdzWydzaXplJ106ODApOwkJCQkKCQkJCWNhc2UgJ2hpZGRlbic6CgkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVJbnB1dEhpZGRlbigkdGhpcy0+aWQsICR0aGlzLT5uYW1lLCAkdGhpcy0+Z2V0VmFsdWUoKSk7CgkJCQljYXNlICdzZWxlY3QnOgoJCQkJCWlmKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snZXhwYW5kZWQnXSkgJiYgJHRoaXMtPnNldHRpbmdzWydleHBhbmRlZCddID09IHRydWUpCgkJCQkJewoJCQkJCQlyZXR1cm4gc2VsZjo6Q3JlYXRlSW5wdXRFeHBhbmRlZExpc3QoJHRoaXMtPmlkLCAkdGhpcy0+bmFtZSwgaXNzZXQoJHRoaXMtPnNldHRpbmdzWyd2YWx1ZXMnXSk/JHRoaXMtPnNldHRpbmdzWyd2YWx1ZXMnXTphcnJheSgpLCAkdGhpcy0+Z2V0VmFsdWVzKCksICcnLCBpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ211bHRpcGxlJ10pP3RydWU6ZmFsc2UsICR0aGlzLT5zZXR0aW5ncyk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXJldHVybiBzZWxmOjpDcmVhdGVJbnB1dFNlbGVjdExpc3QoJHRoaXMtPmlkLCAkdGhpcy0+bmFtZSwgaXNzZXQoJHRoaXMtPnNldHRpbmdzWyd2YWx1ZXMnXSk/JHRoaXMtPnNldHRpbmdzWyd2YWx1ZXMnXTphcnJheSgpLCAkdGhpcy0+Z2V0VmFsdWVzKCksIGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snc2l6ZSddKT8kdGhpcy0+c2V0dGluZ3NbJ3NpemUnXToxLCAnJywgaXNzZXQoJHRoaXMtPnNldHRpbmdzWydtdWx0aXBsZSddKT90cnVlOmZhbHNlKTsKCQkJCQl9CgkJCQkJCgkJCQljYXNlICdjaGVja2JveCc6CgkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVJbnB1dENoZWNrYm94KCR0aGlzLT5pZCwgJHRoaXMtPm5hbWUsICcxJywgKGludGVnZXIpJHRoaXMtPmdldFZhbHVlKCkpOwoJCQkJY2FzZSAndGV4dGFyZWEnOgoJCQkJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3Nob3dfd3lzaXd5ZyddKSAmJiAkdGhpcy0+c2V0dGluZ3NbJ3Nob3dfd3lzaXd5ZyddID09IHRydWUpCgkJCQkJewoJCQkJCQlyZXR1cm4gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZVRleHRBcmVhKHRydWUsICR0aGlzLT5pZCwgJHRoaXMtPmdldFZhbHVlKCksICR0aGlzLT5uYW1lKTsJCQkJCQkKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJHRoaXMtPmlkLCAkdGhpcy0+Z2V0VmFsdWUoKSwgJHRoaXMtPm5hbWUpOwoJCQkJCX0KCQkJCWNhc2UgJ2NvZGVhcmVhJzoKCQkJCQlyZXR1cm4gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZVRleHRBcmVhKHRydWUsICR0aGlzLT5pZCwgJHRoaXMtPmdldFZhbHVlKCksICR0aGlzLT5uYW1lLCdwYWdlYmlndGV4dGFyZWEnLCAnJywnJywgJycsIDkwLCAxNSwgJ0VkaXRBcmVhJyk7CgkJCQljYXNlICd0aW1lJzoKCQkJCQlyZXR1cm4gc2VsZjo6Q3JlYXRlVGltZVNlbGVjdCgkdGhpcy0+aWQsJHRoaXMtPm5hbWUsJHRoaXMtPmdldFZhbHVlcygpKTsKCQkJCWNhc2UgJ2RhdGUnOgoJCQkJCXJldHVybiBzZWxmOjpDcmVhdGVEYXRlU2VsZWN0KCR0aGlzLT5pZCwkdGhpcy0+bmFtZSwkdGhpcy0+Z2V0VmFsdWVzKCksICR0aGlzLT5zZXR0aW5ncyk7CgkJCQljYXNlICdwYWdlcyc6CgkJCQkJcmV0dXJuICRnQ21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5DcmVhdGVIaWVyYXJjaHlEcm9wZG93bignJywgJHRoaXMtPmdldFZhbHVlKCksICR0aGlzLT5pZCAuICR0aGlzLT5uYW1lKTsKCQkJCQkJLy8kdGhpcy0+Z2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9wYWdlJywpCgkJCQljYXNlICdzdGF0aWMnOgoJCQkJCXJldHVybiAkdGhpcy0+Z2V0VmFsdWUoKTsKCQkJCWNhc2UgJ2ZpbGUnOgoJCQkJCXJldHVybiAkdGhpcy0+Z2V0VXBsb2FkRmllbGQoKTsKCQkJCWNhc2UgJ3Bhc3N3b3JkJzoKCQkJCQlyZXR1cm4gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUlucHV0UGFzc3dvcmQoJHRoaXMtPmlkLCAkdGhpcy0+bmFtZSwgJHRoaXMtPmdldFZhbHVlKCkKCQkJCQksaXNzZXQoJHRoaXMtPnNldHRpbmdzWydzaXplJ10pPyR0aGlzLT5zZXR0aW5nc1snc2l6ZSddOjIwKTsKCQkJCWRlZmF1bHQ6CgkJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQl9CgkJcmV0dXJuIG51bGw7CgkJCgl9CgkKCS8vIFBST0NFU1MKCQoJcHVibGljIGZ1bmN0aW9uIHByb2Nlc3MoJHNhdmUgPSB0cnVlKQoJewoJCS8vIFZhbGlkYXRlCgkJJHRoaXMtPnZhbGlkYXRlKCk7CgkJCgkJLy8gU2F2ZSB2YWx1ZXMKCQlpZiAoJHNhdmUgPT0gdHJ1ZSkKCQl7CgkJCSR0aGlzLT5zYXZlKCk7CgkJfQoJfQoJCgkvLyBWQUxJREFUSU9OCgkKCXByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZSgpCgl7CgkJaWYgKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1sndmFsaWRhdG9ycyddKSAmJiBpc19hcnJheSgkdGhpcy0+c2V0dGluZ3NbJ3ZhbGlkYXRvcnMnXSkpCgkJewoJCQkvL3Zhcl9kdW1wKCR0aGlzLT5zZXR0aW5nc1sndmFsaWRhdG9ycyddKTsKCQkJLy8gQ0hBTkdFIFRIQVQKCQkJCgkJCWZvcmVhY2ggKCR0aGlzLT5zZXR0aW5nc1sndmFsaWRhdG9ycyddIGFzICR2YWxpZGF0b3IgPT4gJHZhbHVlKQoJCQl7CgkJCQkkdmFsaWRhdGUgPSBuZXcgQ01TRm9ybVZhbGlkYXRvcigmJHRoaXMsJHZhbGlkYXRvciwkdmFsdWUpOwoJCQkJdHJ5CgkJCQl7CgkJCQkJaWYoJHZhbGlkYXRlLT5jaGVjaygpID09PSBmYWxzZSkgJHRoaXMtPmlzX3ZhbGlkID0gZmFsc2U7CgkJCQl9CgkJCQljYXRjaChFeGNlcHRpb24gJGUpCgkJCQl7CgkJCQkJJHRoaXMtPnNldEVycm9yKCRlLT5nZXRNZXNzYWdlKCksICdmb3JtIGVycm9yJyk7CgkJCQl9CgkJCQkKCQkJfQoJCX0KCX0KCQoJcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoKQoJewoJCWlmICgoJHRoaXMtPmlzX3ZhbGlkID09IGZhbHNlICkgfHwgJHRoaXMtPmhhc0Vycm9ycygpKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGFkZFZhbGlkYXRvcigkdmFsaWRhdG9yLCAkcGFyYW1zID0gYXJyYXkoKSkKCXsKCQkkdGhpcy0+c2V0dGluZ3NbJ3ZhbGlkYXRvcnMnXVskdmFsaWRhdG9yXSA9ICRwYXJhbXM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiByZW1vdmVWYWxpZGF0b3IoJHZhbGlkYXRvcikKCXsKCQl1bnNldCgkdGhpcy0+c2V0dGluZ3NbJ3ZhbGlkYXRvcnMnXVskdmFsaWRhdG9yXSk7Cgl9CgkKCS8vIFNBVkUKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNhdmUoKQoJewoJCWlmKCR0aGlzLT5pc1ZhbGlkKCkgPT0gdHJ1ZSkKCQl7CgkJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddKSkKCQkJewoJCQkJJHRoaXMtPnNhdmVPYmplY3QoKTsKCQkJfQoJCQlpZiAoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydwcmVmZXJlbmNlJ10pKQoJCQl7CgkJCQkkdGhpcy0+c2F2ZVByZWZlcmVuY2UoKTsKCQkJfQoJCX0KCX0KCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNhdmVPYmplY3QoKQoJewoJCWlmKGlzX29iamVjdCgkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddKSAmJiAkdGhpcy0+dHlwZSAhPSAnZmlsZScpCgkJewoJCQkvLyBUaGlzIGRvIG5vdCBzYXZlIHRoZSBvYmplY3Qgc3RhdGUsIHNvIHdlIGhhdmUgdG8gZG8gaXQgb3V0c2lkZSB0aGUgZm9ybQoKCQkJaWYgKCR0aGlzLT50eXBlID09ICdkYXRlJykKCQkJewoJCQkJLy8kdmFsdWVzID0gJHRoaXMtPnZhbHVlczsgQWx3YXlzIHNhdmUgaXQgYXMgYSBzdHJpbmcKCQkJCWlmIChjb3VudCgkdGhpcy0+dmFsdWVzKSA+IDEpCgkJCQl7CQkJCQkKCQkJCQkkdmFsdWVzID0gJHRoaXMtPnZhbHVlc1snMCddIC4gJy0nIC4gJHRoaXMtPnZhbHVlc1snMSddIC4gJy0nIC4gJHRoaXMtPnZhbHVlc1snMiddOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSR2YWx1ZXMgPSAkdGhpcy0+Z2V0VmFsdWUoKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR2YWx1ZXMgPSAkdGhpcy0+Z2V0VmFsdWUoKTsKCQkJfQkJCgkJCgkJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3NldF9tZXRob2QnXSkpCgkJCXsKCQkJCSR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10tPnskdGhpcy0+c2V0dGluZ3NbJ3NldF9tZXRob2QnXX0oJHZhbHVlcyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydmaWVsZF9uYW1lJ10pKQoJCQkJewoJCQkJCSRuYW1lID0gJHRoaXMtPnNldHRpbmdzWydmaWVsZF9uYW1lJ107CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJG5hbWUgPSAkdGhpcy0+bmFtZTsKCQkJCX0KCQkJCQoJCQkJaWYobWV0aG9kX2V4aXN0cygkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddLCAnc2V0JykpCgkJCQl7CQkKCQkJCQkkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddLT5zZXQoJG5hbWUsICR2YWx1ZXMpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXRyeQoJCQkJCXsKCQkJCQkJJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXS0+JG5hbWUgPSAkdmFsdWVzOwoJCQkJCX0KCQkJCQljYXRjaChFeGNlcHRpb24gJGUpCgkJCQkJewoJCQkJCQlkaWUoJ3VuYWJsZSB0byBkbycpOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJCgkJCX0KCQl9Cgl9CgkKCXByb3RlY3RlZCBmdW5jdGlvbiBzYXZlUHJlZmVyZW5jZSgpCgl7CgkJaWYoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydwcmVmZXJlbmNlJ10pICYmICFpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLidjYW5jZWwnXSkpCgkJewoJCQkvLyBDaGVjayBpZiB0aGVyZSBpcyBubyBjYW5jZWwgYnV0dG9uIGZpcnN0IGJlY2F1c2Ugd2Ugc2F2ZSB0aGUgdmFsdWUgZGlyZWN0bHkgIQoJCQlnbG9iYWwgJGdDbXM7CgkJCSRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5zZXRQcmVmZXJlbmNlKCR0aGlzLT5zZXR0aW5nc1sncHJlZmVyZW5jZSddLCAkdGhpcy0+Z2V0VmFsdWUoKSk7CgkJfQoJfQoJCgkvLyBBQ0NFU1MKCQoJcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCkKCXsKCQlpZiAoKCR0aGlzLT50eXBlID09ICdkYXRlJykgJiYgIChjb3VudCgkdGhpcy0+dmFsdWVzKSA+IDEpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT52YWx1ZXNbJzAnXSAuICctJyAuICR0aGlzLT52YWx1ZXNbJzEnXSAuICctJyAuICR0aGlzLT52YWx1ZXNbJzInXTsKCQl9CgkJZWxzZWlmIChjb3VudCgkdGhpcy0+dmFsdWVzKSA9PSAxKQoJCXsKCQkJcmVzZXQoJHRoaXMtPnZhbHVlcyk7CgkJCXJldHVybiAoc3RyaW5nKSBjdXJyZW50KCR0aGlzLT52YWx1ZXMpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gKHN0cmluZykgaW1wbG9kZSgnfCcsJHRoaXMtPnZhbHVlcyk7CgkJfQkJCgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRWYWx1ZSgkdmFsdWUsICRrZXkgPSAwKQoJewoJCSR0aGlzLT52YWx1ZXNbJGtleV0gPSAoc3RyaW5nKSR2YWx1ZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlcygpCgl7CgkJcmV0dXJuICR0aGlzLT52YWx1ZXM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRWYWx1ZXMoJHZhbHVlcyA9IGFycmF5KCkpCgl7CgkJaWYgKGlzX2FycmF5KCR2YWx1ZXMpKQoJCXsKCQkJJHRoaXMtPnZhbHVlcyA9ICR2YWx1ZXM7CgkJfQoJCWVsc2VpZiAoc3RycG9zKCR2YWx1ZXMsICd8JykgIT09IGZhbHNlKQoJCXsKCQkJJHRoaXMtPnZhbHVlcyA9IGV4cGxvZGUoJ3wnLCAkdmFsdWVzKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPnZhbHVlc1swXSA9ICR2YWx1ZXM7CgkJfQkJCgl9CQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlcygkdmFsdWVzKQoJewoJCWlmIChpc19hcnJheSgkdmFsdWVzKSkKCQl7CgkJCSR0aGlzLT52YWx1ZXMgPSAkdmFsdWVzOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+dmFsdWVzID0gYXJyYXkoJHZhbHVlcyk7CgkJfQoJfQoJCQoJcHVibGljIGZ1bmN0aW9uIGlzRW1wdHkoKQoJewoJCWlmICgoY291bnQoJHRoaXMtPnZhbHVlcykgPT0gMSkgJiYgKGVtcHR5KCR0aGlzLT52YWx1ZXNbMF0pKSB8fCAoY291bnQoJHRoaXMtPnZhbHVlcykgPT0gMCkpCgkJCXJldHVybiB0cnVlOwoJCQlyZXR1cm4gZmFsc2U7Cgl9CgkJCglwdWJsaWMgZnVuY3Rpb24gZ2V0U3RyaW5nVmFsdWUoKQoJewoJCS8vREVQUkVDQVRFRAoJCXJldHVybiAkdGhpcy0+Z2V0VmFsdWUoKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVzVG9TdHJpbmcoKQoJewoJCS8vIERFUFJFQ0FURUQKCQlyZXR1cm4gKHN0cmluZykkdGhpcy0+Z2V0VmFsdWUoKTsKCX0KCQoJCglwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eVZhbHVlcygpCgl7CgkJLy9ERVBSRUNBVEVECgkJCgkJaWYgKGlzX2FycmF5KCR0aGlzLT52YWx1ZXMpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5pc0VtcHR5KCk7CgkJfQoJCWVsc2VpZihlbXB0eSgkdGhpcy0+dmFsdWVzKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCQoJLy8gRElWRVJTCgkKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmllbGRzTGlzdCgpCgl7CgkJJGxpc3QgPSBhcnJheSgpOwoJCWZvcmVhY2goc2VsZjo6JGZpZWxkcyBhcyAkdHlwZSA9PiAkZmllbGQpCgkJewoJCQkkbGlzdFskdHlwZV0gPSAkZmllbGRbJ3RpdGxlJ107CgkJfQoJCXJldHVybiAkbGlzdDsKCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBZG9UeXBlKCR0eXBlKQoJewoJCWlmIChpc3NldChzZWxmOjokZmllbGRzWyR0eXBlXVsnYWRvJ10pKQoJCXsKCQkJcmV0dXJuIHNlbGY6OiRmaWVsZHNbJHR5cGVdWydhZG8nXTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuICdDKDI1NSknOyAvLyBCZXR0ZXIgdGhhbiBub3RoaW5nLi4uCgkJfQoJfQoJCQkJCglwdWJsaWMgZnVuY3Rpb24gZ2V0VXBsb2FkRmllbGQoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZmllbGQgPSAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlSW5wdXRGaWxlKCR0aGlzLT5pZCwgJHRoaXMtPm5hbWUsICcnLCBpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3NpemUnXSk/JHRoaXMtPnNldHRpbmdzWydzaXplJ106MzApOwoJCSRobWwgPSAnPHNwYW4+JzsKCQlpZiAoY291bnQoJHRoaXMtPnZhbHVlcykpCgkJewoJCQkkZmlsZV91cmwgPSBpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ2Jhc2VfdXJsJ10pPyR0aGlzLT5zZXR0aW5nc1snYmFzZV91cmwnXTonJzsKCQkJaWYgKChzdWJzdHIoJGZpbGVfdXJsLCAtMSkgIT0gJy8nKSAmJiAoc3Vic3RyKCR0aGlzLT52YWx1ZXNbMF0sMCwxKSAhPSAnLycpKSAkZmlsZV91cmwgLicvJzsKCQkJJGZpbGVfdXJsIC49ICR0aGlzLT52YWx1ZXNbMF07CgkJCQoJCQlpZiAoc2VsZjo6aXNJbWFnZSgkdGhpcy0+dmFsdWVzWzBdKSkKCQkJewoJCQkJJHRleHQgPSAnPGltZyBzcmM9IicuJGZpbGVfdXJsLiciIC8+JzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0ZXh0ID0gYmFzZW5hbWUoJHRoaXMtPnZhbHVlc1swXSk7CgkJCX0KCQkJCgkJCSRodG1sIC49ICc8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWJvdHRvbTogN3B4OyI+PGEgaHJlZj0iJy4kZmlsZV91cmwuICciIHJlbD0iZXh0ZXJuYWwiID4nLiAkdGV4dCAuJzwvYT48L3NwYW4+ICc7CgkJfQoJCQoJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ2RlbGV0ZV9jaGVja2JveCddKSkKCQl7CgkJCSRmaWVsZCAuPSAnICcgLiAgJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUlucHV0Q2hlY2tib3goJHRoaXMtPmlkLCAkdGhpcy0+c2V0dGluZ3NbJ2RlbGV0ZV9jaGVja2JveCddLCAnMScpIC4gJyAnIC4gICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5sYW5nKCdkZWxldGUnKTsKCQl9CgkJCgkJJGh0bWwgLj0gJGZpZWxkIC4gJzwvc3Bhbj4nOwoJCXJldHVybiAkaHRtbDsKCX0KCQoJLy8gVG9vbHMKCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVEYXRlU2VsZWN0KCRpZCwkbmFtZSwkdmFsdWVzLCRzZXR0aW5ncykKCXsKCQlpZiAoY291bnQoJHZhbHVlcykgPT0gMSkKCQl7CgkJCWlmIChzdHJwb3MoJHZhbHVlc1swXSwgJy0nKSAhPT0gZmFsc2UpICR2YWx1ZXMgPSBleHBsb2RlKCctJywkdmFsdWVzWzBdKTsKCQl9CgkJJHN0YXJ0X3llYXIgPSBpc3NldCgkc2V0dGluZ3NbJ3N0YXJ0X3llYXInXSk/JHNldHRpbmdzWydzdGFydF95ZWFyJ106ZGF0ZSgnWScpOwoJCSRudW1iZXJfeWVhcnMgPSBpc3NldCgkc2V0dGluZ3NbJ251bWJlcl95ZWFycyddKT8kc2V0dGluZ3NbJ251bWJlcl95ZWFycyddOjIwOwoJCSRlbmRfeWVhciA9ICRzdGFydF95ZWFyICsgJG51bWJlcl95ZWFyczsKCQkKCQkkeWVhciA9IHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJG5hbWUuJ1swXScsc2VsZjo6Q3JlYXRlTnVtYmVyTGlzdCgkZW5kX3llYXIsJHN0YXJ0X3llYXIpLGFycmF5KCR2YWx1ZXNbMF0pLDEsJycsZmFsc2UpOwoJCSRtb250aCA9IHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJG5hbWUuJ1sxXScsc2VsZjo6Q3JlYXRlTW9udGhzTGlzdCgpLGFycmF5KCR2YWx1ZXNbMV0pLDEsJycsZmFsc2UpOwoJCSRkYXkgPSBzZWxmOjpDcmVhdGVJbnB1dFNlbGVjdExpc3QoJGlkLCRuYW1lLidbMl0nLHNlbGY6OkNyZWF0ZU51bWJlckxpc3QoMzEsMSksYXJyYXkoJHZhbHVlc1syXSksMSwnJyxmYWxzZSk7CgkJaWYgKGlzc2V0KCRzZXR0aW5nc1snZXVyb3BlYW5fZGF0ZSddKSkKCQl7CgkJCXJldHVybiAkZGF5IC4gJG1vbnRoIC4gJHllYXI7CgkJfQoJCXJldHVybiAkeWVhciAuICRtb250aCAuICRkYXk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQ3JlYXRlVGltZVNlbGVjdCgkaWQsJG5hbWUsJHZhbHVlcykKCXsKCQkkaG91cnMgPSBzZWxmOjpDcmVhdGVJbnB1dFNlbGVjdExpc3QoJGlkLCRuYW1lLidbMF0nLHNlbGY6OkNyZWF0ZU51bWJlckxpc3QoMjMpLGFycmF5KCR2YWx1ZXNbMF0pLDEsJycsZmFsc2UpOwoJCSRtaW51dGVzID0gc2VsZjo6Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KCRpZCwkbmFtZS4nWzFdJyxzZWxmOjpDcmVhdGVOdW1iZXJMaXN0KDU5KSxhcnJheSgkdmFsdWVzWzFdKSwxLCcnLGZhbHNlKTsKCQkkc2Vjb25kcyA9IHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJG5hbWUuJ1syXScsc2VsZjo6Q3JlYXRlTnVtYmVyTGlzdCg1OSksYXJyYXkoJHZhbHVlc1syXSksMSwnJyxmYWxzZSk7CgkJcmV0dXJuICRob3VycyAuICcgOiAnIC4gJG1pbnV0ZXMgLiAnIDogJyAuICRzZWNvbmRzOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQ3JlYXRlTW9udGhzTGlzdCgpCgl7CgkJJG1vbnRocyA9IGFycmF5KCk7CgkJZm9yICgkaSA9IDE7ICRpIDw9IDEyOyArKyRpKSB7CgkJCSR0ID0gbWt0aW1lKDAsIDAsIDAsICRpLCAxLCAyMDAwKTsKCQkJJG1vbnRoc1skaV0gPSBkYXRlKCdNJywgJHQpOwoJCX0KCQlyZXR1cm4gJG1vbnRoczsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENyZWF0ZU51bWJlckxpc3QoJGVuZCwgJHN0YXJ0PTApCgl7CgkJaWYgKCgkZW5kIDwgMCl8fCghaXNfbnVtZXJpYygkZW5kKSkpICRlbmQgPSAxOwoJCSRsaXN0ID0gYXJyYXkoKTsKCQlmb3IgKCRpID0gJHN0YXJ0OyAkaSA8PSAkZW5kOyAkaSsrKQoJCXsKCQkJJGxpc3RbJGldID0gKHN0cmluZykkaTsKCQl9CgkJcmV0dXJuICRsaXN0OwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsICRuYW1lLCAkaXRlbXMsICRzZWxlY3RlZGl0ZW1zPWFycmF5KCksICRzaXplPTMsICRhZGR0dGV4dD0nJywgJG11bHRpcGxlID0gdHJ1ZSkKCXsKCSAgJGlkID0gY21zX2h0bWxlbnRpdGllcygkaWQpOwoJICAkbmFtZSA9IGNtc19odG1sZW50aXRpZXMoJG5hbWUpOwoJICAkc2l6ZSA9IGNtc19odG1sZW50aXRpZXMoJHNpemUpOwoJICAkbXVsdGlwbGUgPSBjbXNfaHRtbGVudGl0aWVzKCRtdWx0aXBsZSk7CgkKCQlpZigkbXVsdGlwbGUgPT0gdHJ1ZSkKCQl7CgkJCSRuYW1lIC49ICdbXSc7CgkJfQoJCgkJJHRleHQgPSAnPHNlbGVjdCBuYW1lPSInLiRpZC4kbmFtZS4nIic7CgkJaWYgKCRhZGR0dGV4dCAhPSAnJykKCQl7CgkJCSR0ZXh0IC49ICcgJyAuICRhZGR0dGV4dDsKCQl9CgkJaWYoICRtdWx0aXBsZSApCgkJICB7CgkJCSR0ZXh0IC49ICcgbXVsdGlwbGU9Im11bHRpcGxlIiAnOwoJCSAgfQoJCSAgCgkJICBpZiAoJHNpemUgPiAxKQoJCSAgewoJCSAgCSR0ZXh0IC49ICcgc2l6ZT0iJy4kc2l6ZS4nIic7CgkJICB9CgkJCgkJJHRleHQgLj0gJz4nOwoJCQoJCSRjb3VudCA9IDA7CgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRrZXk9PiR2YWx1ZSkKCQl7CgkJICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkKCQkgCXsKCQkJCSR0ZXh0IC49ICc8b3B0Z3JvdXAgbGFiZWw9IicgLiAka2V5IC4gJyI+JzsKCQkJCWZvcmVhY2ggKCR2YWx1ZSBhcyAka2V5MiA9PiAkZW50cnkpCgkJCQl7CgkJCQkJJHRleHQgLj0gc2VsZjo6Z2VuZXJhdGVPcHRpb24oJGtleTIsICRlbnRyeSwgJHNlbGVjdGVkaXRlbXMpOwoJCQkJCSRjb3VudCsrOwoJCQkJfQoJCQkJJHRleHQgLj0gJzwvb3B0Z3JvdXA+JzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0ZXh0IC49IHNlbGY6OmdlbmVyYXRlT3B0aW9uKCRrZXksICR2YWx1ZSwgJHNlbGVjdGVkaXRlbXMpOwoJCQkJJGNvdW50Kys7CgkJCX0KCQl9CgkJJHRleHQgLj0gJzwvc2VsZWN0PicuIlxuIjsKCQoJCXJldHVybiAkdGV4dDsKCX0KCQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZU9wdGlvbigka2V5LCAkdmFsdWUsICRzZWxlY3RlZGl0ZW1zKQoJewogIAkvLyBpZiAoaXNfYXJyYXkoJHZhbHVlKSkKICAJLy8gIAl7CiAgCS8vIAkJJGFycmF5ID0gYXJyYXlfc2hpZnQoJHZhbHVlKTsKICAJLy8gCQkka2V5ID0gaW1wbG9kZSgnfCcsYXJyYXlfa2V5cygkYXJyYXkpKTsKICAJLy8gCQkkdmFsdWUgPSBpbXBsb2RlKCd8JywgJGFycmF5KTsKICAJLy8gCX0KCgkJLy8kdmFsdWUgPSBjbXNfaHRtbGVudGl0aWVzKCR2YWx1ZSk7CgkJJHZhbHVlID0gJHZhbHVlOwoKCQkkdGV4dCA9ICc8b3B0aW9uIHZhbHVlPSInLiRrZXkuJyInOwoJCWlmIChpbl9hcnJheSgka2V5LCAkc2VsZWN0ZWRpdGVtcykpCgkJewoJCQkkdGV4dCAuPSAnICcgLiAnc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJfQoJCSR0ZXh0IC49ICc+JzsKCQkkdGV4dCAuPSAkdmFsdWU7CgkJJHRleHQgLj0gJzwvb3B0aW9uPic7CgkJCgkJcmV0dXJuICR0ZXh0OwkKCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBDcmVhdGVJbnB1dEV4cGFuZGVkTGlzdCgkaWQsICRuYW1lLCAkaXRlbXMsICRzZWxlY3RlZGl0ZW1zPWFycmF5KCksICRhZGR0dGV4dD0nJywgJG11bHRpcGxlID0gdHJ1ZSwgJHBhcmFtcyA9IGFycmF5KCkpCgl7CgkJZ2xvYmFsICRnQ21zOwoJICAkaWQgPSBjbXNfaHRtbGVudGl0aWVzKCRpZCk7CgkgICRuYW1lID0gY21zX2h0bWxlbnRpdGllcygkbmFtZSk7CgkgICRtdWx0aXBsZSA9IGNtc19odG1sZW50aXRpZXMoJG11bHRpcGxlKTsKCQoJCSRsaXN0ID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRpdGVtcyBhcyAka2V5ID0+ICRpdGVtKQoJCXsKCQkJaWYgKGlzX2FycmF5KCRpdGVtKSkKCQkJewoJCQkJJGxpc3RbXSA9IGFycmF5KCdsYWJlbCcgPT4gJzxzdHJvbmc+JyAuICRrZXkgLiAnPC9zdHJvbmc+JywgJ2lucHV0JyA9PiAnJyk7CgkKCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGtleTIgPT4gJGVudHJ5KQoJCQkJewoJCQkJCSBzZWxmOjpnZW5lcmF0ZUV4cGFuZGVkTGlzdCgmJGxpc3QsICRpZCwgJGVudHJ5LCAkbmFtZSwgJGtleTIsICRzZWxlY3RlZGl0ZW1zLCAkbXVsdGlwbGUsICRhZGR0dGV4dCk7CgkJCQl9CgkJCQkKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXNlbGY6OmdlbmVyYXRlRXhwYW5kZWRMaXN0KCYkbGlzdCwgJGlkLCAkaXRlbSwgJG5hbWUsICRrZXksICRzZWxlY3RlZGl0ZW1zLCAkbXVsdGlwbGUsICRhZGR0dGV4dCk7CgkJCX0KCQl9CgkJCgkJaWYoaXNzZXQoJHBhcmFtc1snbW9kZSddKSAmJiAoJHBhcmFtc1snbW9kZSddID09ICdodG1sJykpCgkJewoJCQkvLyBUT0RPCgkJCXJldHVybiAnTm90IGltcGxlbWVudGVkIHlldCc7CgkJfQoJCWVsc2VpZihpc3NldCgkcGFyYW1zWydtb2RlJ10pICYmICgkcGFyYW1zWydtb2RlJ10gPT0gJ2FycmF5JykpCgkJewoJCQlyZXR1cm4gJGxpc3Q7CgkJfQoJCWVsc2UKCQl7CgkJCSRodG1sID0gJyc7CgkJCWlmIChjb3VudCgkbGlzdCkgPiAwKQoJCQl7CgkJCQkkaHRtbCAuPSAnPHVsPic7CgkJCQlmb3JlYWNoKCRsaXN0IGFzICRpdGVtKQoJCQkJewoJCQkJCSRodG1sIC49ICc8bGk+Jy4kaXRlbVsnaW5wdXQnXS4gJyAnLiAkaXRlbVsnbGFiZWwnXSAuJzwvbGk+JzsKCQkJCX0KCQkJCSRodG1sIC49ICc8L3VsPic7CgkJCX0KCQkJcmV0dXJuICRodG1sOwoJCX0KCQoJfQoJCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlRXhwYW5kZWRMaXN0KCYkbGlzdCwgJGlkLCAkaXRlbSwgJG5hbWUsICRrZXksICRzZWxlY3RlZGl0ZW1zLCAkbXVsdGlwbGUsICRhZGR0dGV4dCkKCXsKCQlpZiAoaW5fYXJyYXkoJGtleSwgJHNlbGVjdGVkaXRlbXMpKQoJCXsKCQkJJHRleHQgPSAnIGNoZWNrZWQ9ImNoZWNrZWQiJyAuICcgJyAuICRhZGR0dGV4dDsKCQl9CgkJZWxzZQoJCXsKCQkJJHRleHQgPSAnICcgLiAkYWRkdHRleHQ7CgkJfQoJCQoJCWlmKCRtdWx0aXBsZSkKCQl7CQkJCQoJCQkkbGlzdFtdID0gYXJyYXkoCgkJCQknbGFiZWwnID0+ICc8bGFiZWwgZm9yPSInLiRpZC4kbmFtZS4nWycuJGtleS4nXSI+JyAuICRpdGVtIC4gJzwvbGFiZWw+JywKCQkJCSdpbnB1dCcgPT4gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iJy4kaWQuJG5hbWUuJ1snLiRrZXkuJ10iIGlkPSInLiRpZC4kbmFtZS4nWycuJGtleS4nXSIgdmFsdWU9IicuJGtleS4nIicuJHRleHQuJyAvPicKCQkJCSk7CgkJfQoJCWVsc2UKCQl7CgkJCSRsaXN0W10gPSBhcnJheSgKCQkJCSdsYWJlbCcgPT4gJzxsYWJlbCBmb3I9IicuJGlkLiRuYW1lLiRrZXkuJyI+JyAuICRpdGVtIC4gJzwvbGFiZWw+JywKCQkJCSdpbnB1dCcgPT4gJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iJy4kaWQuJG5hbWUuJyIgaWQ9IicuJGlkLiRuYW1lLiRrZXkuJyIgdmFsdWU9IicuJGtleS4nIicuJHRleHQuJyAvPicKCQkJCSk7CgkJfQoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSW1hZ2UoJGZpbGVuYW1lKQoJewoJCSR2YWxpZF9leHRlbnNpb25zID0gYXJyYXkoJ2pwZWcnLCdqcGcnLCdnaWYnLCdwbmcnKTsKCQlpZiAoaW5fYXJyYXkoc2VsZjo6Z2V0RmlsZUV4dGVuc2lvbigkZmlsZW5hbWUpLCR2YWxpZF9leHRlbnNpb25zKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUV4dGVuc2lvbigkZmlsZW5hbWUpCgl7CgkJJGZpbGUgPSBleHBsb2RlKCcuJywgJGZpbGVuYW1lKTsKICAJCWlmIChjb3VudCgkZmlsZSkgPiAxKQoJICAJewoJICAJCXJldHVybiBlbmQoJGZpbGUpOwoJICAJfQoJICAJZWxzZSAKCSAgCXsKCSAgCQlyZXR1cm4gbnVsbDsKCSAgCX0KCX0KCgkvLyBFUlJPUlMKCQkKCXB1YmxpYyBmdW5jdGlvbiBoYXNFcnJvcnMoKQoJewoJCWlmIChjb3VudCgkdGhpcy0+Zm9ybV9lcnJvcnMpID09IDApCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gbm9FcnJvcigpCgl7CgkJcmV0dXJuICEkdGhpcy0+aGFzRXJyb3JzKCk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQoJewoJCXJldHVybiAkdGhpcy0+Zm9ybV9lcnJvcnM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzaG93RXJyb3JzKCkKCXsKCQkkaHRtbCA9ICcnOwoJCWlmKGNvdW50KCR0aGlzLT5mb3JtX2Vycm9ycykgPiAwKQoJCXsKCQkJJGh0bWwgLj0gJzx1bCBjbGFzcz0iZm9ybV93aWRnZXRfZXJyb3JzIj4nOwoJCQlmb3JlYWNoKCR0aGlzLT5mb3JtX2Vycm9ycyBhcyAkcHJpb3JpdHkgPT4gJGVycm9ycykKCQkJewoJCQkJJGh0bWwgLj0gJzxsaT4nOwoJCQkJaWYgKCR0aGlzLT5zaG93X3ByaW9yaXR5KSAkaHRtbCAuPSAnPGVtIGNsYXNzPSJmb3JtX3dpZGdldF9lcnJvcl9wcmlvcml0eSI+Jy4kcHJpb3JpdHkuJzwvZW0+JzsKCQkJCSRodG1sIC49ICc8dWw+JzsKCQkJCWZvcmVhY2goJGVycm9ycyBhcyAkZXJyb3IpCgkJCQl7CgkJCQkJJGh0bWwgLj0gJzxsaSBjbGFzcz0iZm9ybV93aWRnZXRfZXJyb3JfbWVzc2FnZSI+Jy4kZXJyb3IuJzwvbGk+JzsKCQkJCX0JCQkJCgkJCQkkaHRtbCAuPSAnPC91bD48L2xpPic7CgkJCX0KCQkJJGh0bWwgLj0gJzwvdWw+JzsKCQl9CgkJcmV0dXJuICRodG1sOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0RXJyb3IoJG1lc3NhZ2UsJHByaW9yaXR5PSdkZWZhdWx0JykKCXsKCQkkdGhpcy0+Zm9ybV9lcnJvcnNbJHByaW9yaXR5XVtdID0gJG1lc3NhZ2U7Cgl9CgkKCgkKfQ==]]></data>
	</file>
</module>
