<?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>CodeMirror</name>
	<version>2.3.1</version>
  <mincmsversion>1.10</mincmsversion>
	<help><![CDATA[PHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLjxoMz5QYXJhbWV0cmU8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0cmV0IGFuZ2l2ZXIgaHZpbGtldCBzcHJvZyBkZXIgc2thbCBicnVnZXMgdGlsIHZpc25pbmcgZm9yIGJlcyZvc2xhc2g7Z2VuZGUuIElra2UgYWxsZSBtb2R1bGVyIHVuZGVyc3Qmb3NsYXNoO3R0ZXIgZWxsZXIgYmVoJm9zbGFzaDt2ZXIgZGV0dGUuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+TGF2ZXQgYWY6IE1vcnRlbiBQb3Vsc2VuICZsdDsmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0OyZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAyLjMuMTxiciAvPjxiciAvPkhpc3RvcmlrIG92ZXIgJmFlbGlnO25kcmluZ2VyOjxiciAvPjx1bD4KICA8bGk+Mi4zLjEgLSBBcHBseS1idXR0b24gaW4gZWRpdCBjc3MgYXJlIGZpeGVkLCB0ZW1wbGF0ZXMgc3RpbGwgaGF2ZSBjb3JlIGJ1ZyA6KDwvbGk+CiAgPGxpPjIuMy4wIC0gUmVpbXBsZW1lbnRlZCBsaW5ld3JhcHBpbmcsIGF1dG9tYXRlZCB0aGVtZSBkZXRlY3Rpb248L2xpPgogIDxsaT4yLjIuMyAtIFVwZGF0ZWQgdG8gQ00gMi4yLjM8L2xpPgogIDxsaT4yLjIuMiAtIFVwZGF0ZWQgdG8gQ00gMi4yLjE8L2xpPgogIDxsaT4yLjIuMSAtIFVwZGF0ZWQgdG8gQ00gMi4yLjAsIGFkZGVkIHRhYi13aWR0aCBzZXR0aW5nPC9saT4KICA8bGk+Mi4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMTUsIGFkZGVkIG9wdGlvbmFsIGZ1bGxzY3JlZW4gbW9kZTwvbGk+CiAgPGxpPjIuMS4yIC0gVXBkYXRlZCB0byBDTSAyLjEyLCBjbGVhbmVyIHdheSBvZiBzYXZpbmcgZWRpdG9yIGNvbnRlbnQgdG8gdGV4dGFyZWE8L2xpPgogIDxsaT4yLjEuMCAtIFVwZGF0ZWQgdG8gQ00gMi4xLjEsIG9uY2UgYWdhaW4gY2hhbmdlIHRlc3Rtb2RlLi4uIDwvbGk+CiAgPGxpPjIuMC4xIC0gVXBkYXRlZCB0byBDTSAyLjAuMTwvbGk+CiAgPGxpPjIuMCAtIFVwZGF0ZWQgdG8gQ00gMi4wIGFuZCByZXdvcmtlZCBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgdG8gbWFrZSB0aGlzIHdvcms8L2xpPgogIDxsaT4wLjEuOSAtIFVwZGF0ZWQgdG8gQ00gMC45MzwvbGk+CiAgPGxpPjAuMS44IC0gVXBkYXRlZCB0byBDTSAwLjksIGFkZGVkIG9wdGlvbiBvbiBob3cgdG8gaGFuZGxlIFRBQjwvbGk+CiAgPGxpPjAuMS43IC0gVXBkYXRlZCB0byBDTSAwLjgwPC9saT4KICA8bGk+MC4xLjYgLSBVcGRhdGVkIHRvIENNIDAuNzAsIEFkZGVkIG9wdGlvbiB0byBtYXRjaCBwYXJlbnRoZXNpczwvbGk+CiAgPGxpPjAuMS41IC0gVXBkYXRlZCB0byBDTSAwLjY2LCByZW1vdmVkIGEgc3RyYW5nZSBcbiBjaGFyIGZyb20gaGVhZGVyb3V0cHV0LCBtYWRlIHRhYmJpbmcgd29yazwvbGk+CiAgPGxpPjAuMS40IC0gRml4ZWQgQ1BVIGhvZ2dpbmcgcHJvYmxlbXMgYnkgcmV3cml0aW5nIHRlc3RhcmVhLWNvZGU8L2xpPgogIDxsaT4wLjEuMyAtIFVwZGF0ZWQgdG8gQ00gMC42NSwgYWRkZWQgb3B0aW9uIHRvIHRvZ2dsZSB3b3Jkd3JhcDwvbGk+CiAgPGxpPjAuMS4yIC0gVXBkYXRlZCB0byBDTSAwLjYzPC9saT4KICA8bGk+MC4xLjEgLSBVcGRhdGVkIHRvIENNIDAuNjIsIGZpeGVkIGV4YW1wbGVzIGFuZCBwcm9iYWJseSBmdW5jdGlvbmFsaXR5IGFzIHdlbGw8L2xpPgogIDxsaT4wLjEuMCAtIEluaXRpYWwgcmVsZWFzZSA8L2xpPgo8L3VsPjxiciAvPg==]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbImV4YW1wbGVzeW50YXgiXSkpIHsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsJHBhcmFtc1siZXhhbXBsZXN5bnRheCJdKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigic2V0dGluZ3MiLCR0aGlzLT5MYW5nKCJzZXR0aW5nc3RhYiIpKTsKLyplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImh0bWwiLCR0aGlzLT5MYW5nKCJodG1sdGVzdCIpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCJwaHAiLCR0aGlzLT5MYW5nKCJwaHB0ZXN0IikpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImNzcyIsJHRoaXMtPkxhbmcoImNzc3Rlc3QiKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigianMiLCR0aGlzLT5MYW5nKCJqc3Rlc3QiKSk7CiovCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgoKZWNobyAkdGhpcy0+U3RhcnRUYWIoInNldHRpbmdzIik7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlc2V0dGluZ3MnLCAkcmV0dXJuaWQpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc3RleHQnLCAkdGhpcy0+TGFuZygic2hvd2xpbmVudW1iZXJzIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJzaG93bGluZW51bWJlcnMiLDEsJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSkpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVudGV4dCcsICR0aGlzLT5MYW5nKCJhbGxvd2Z1bGxzY3JlZW4iKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImFsbG93ZnVsbHNjcmVlbiIsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYWxsb3dmdWxsc2NyZWVuIiwxKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnN0ZXh0JywgJHRoaXMtPkxhbmcoImNzc2FkZGl0aW9ucyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnNpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5fZGVmYXVsdGNzc2FkZGl0aW9ucyksIjYwIikpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJzaXpldGV4dCcsICR0aGlzLT5MYW5nKCJ0YWJzaXplIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYnNpemVpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJ0YWJzaXplIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFic2l6ZSIsMiksIjgiKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RoZW1ldGV4dCcsICR0aGlzLT5MYW5nKCJ0aGVtZSIpKTsKLyokdGhlbWVzPWFycmF5KAogICdkZWZhdWx0Jz0+ImRlZmF1bHQiLAogICdjb2JhbHQnPT4nY29iYWx0JywKICAnZWNsaXBzZSc9PidlY2xpcHNlJywKICAiZWxlZ2FudCI9PiJlbGVnYW50IiwKICAnbW9ub2thaSc9Pidtb25va2FpJywKICAibmVhdCI9PiJuZWF0IiwKICAibmlnaHQiPT4ibmlnaHQiLAogICJydWJ5Ymx1ZSI9PiJydWJ5Ymx1ZSIsCiAgInhxLWRhcmsiPT4ieHEtZGFyayIsCiAgImxlc3Nlci1kYXJrIj0+Imxlc3Nlci1kYXJrIgopOyovCiRmaWxlcz1zY2FuZGlyKGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuImNvZGVtaXJyb3IyIi5ESVJFQ1RPUllfU0VQQVJBVE9SLiJ0aGVtZSIpOwoKJHRoZW1lcz1hcnJheSgpOwpmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsKICBpZiAoJGZpbGVbMF09PSIuIikgY29udGludWU7CiAgJHRoZW1lPXN0cl9yZXBsYWNlKCIuY3NzIiwiIiwkZmlsZSk7CiAgJHRoZW1lc1skdGhlbWVdPSR0aGVtZTsKfQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aGVtZWlucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJ0aGVtZSIsJHRoZW1lcywtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGhlbWUiLCJkZWZhdWx0IikpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5ndGV4dCcsICR0aGlzLT5MYW5nKCJ0ZXh0d3JhcHBpbmciKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5naW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsInRleHR3cmFwcGluZyIsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGV4dHdyYXBwaW5nIiwxKSkpOwoKLyokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVuc3RleHQnLCAkdGhpcy0+TGFuZygiYXV0b21hdGNocGFyZW5zIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVuc2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJhdXRvbWF0Y2hwYXJlbnMiLCIxIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwiMCIpKSk7CiovCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGFiaGFuZGxpbmd0ZXh0JywgJHRoaXMtPkxhbmcoInRhYmhhbmRsaW5nIikpOwokdGFiZnVuY3Rpb25zPWFycmF5KAogICR0aGlzLT5MYW5nKCJ0YWJkZWZhdWx0Iik9PiJkZWZhdWx0IiwKICAkdGhpcy0+TGFuZygidGFiaW5kZW50Iik9PiJpbmRlbnQiLAogICR0aGlzLT5MYW5nKCJ0YWJzcGFjZXMiKT0+ImNsYXNzaWMiLAogICR0aGlzLT5MYW5nKCJ0YWJzaGlmdCIpPT4ic2hpZnQiCik7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGFiaGFuZGxpbmdpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwidGFiaGFuZGxpbmciLCR0YWJmdW5jdGlvbnMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwiaW5kZW50IikpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdzYXZlc2V0dGluZ3MnKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdzZXR0aW5ncy50cGwnKTsKCmVjaG8gJHRoaXMtPkVuZFRhYigpOwovKgplY2hvICR0aGlzLT5TdGFydFRhYigiaHRtbCIpOwoKJGNvbnRlbnQ9Igo8aHRtbD4KICA8aGVhZD4KICAgIDx0aXRsZT5UZXN0aW5nIGh0bWwtc3ludGF4PC90aXRsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICBBbmQgZG9pbmcgYWJzb2x1dGVseSBub3RoaW5nIGVsc2UKICA8L2JvZHk+CjwvaHRtbD4KIjsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdGh0bWwiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywiaHRtbCIpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgplY2hvICR0aGlzLT5FbmRUYWIoKTsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJwaHAiKTsKJGNvbnRlbnQ9Igo8P3BocAogIGZ1bmN0aW9uIHRlc3RQSFAoXCRzb21lcGFyYW0pIHsKICBlY2hvICdEbyB5b3UgdGhpbmsgdGhpcyBsb29rcyBuaWNlPyc7Cn0KPz4KIjsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdHBocCIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCJwaHAiKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYigiY3NzIik7CiRjb250ZW50PSIKLnRlc3Rjc3MgewogIGZvbnQtd2VpZ2h0OmJvbGQ7CiAgaGVpZ2h0OiAxMHB4Owp9CiI7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsImRlZmF1bHRhZG1pbiIpOwplY2hvICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGNvbnRlbnQsInRlc3Rjc3MiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywiY3NzIik7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgoKZWNobyAkdGhpcy0+U3RhcnRUYWIoImpzIik7CiAgICAkY29udGVudD0nCmZ1bmN0aW9uIG15anNmdW5jdGlvbihwYXJhbXMpIHsKICB2YXIgbXNnID0gIlRoaXMgamF2YXNjcmlwdCBpcyBmYW50YXN0aWMhIgogIGZvciAodmFyIGk9MDsgaTw5OTk5OyBpKyspIHsKICAgIGFsZXJ0KG1zZyk7CiAgICAvKlRoaXMgbXVzdCBiZSB0aGUgbW9zdCBhbm5veWluZyBmdW5jdGlvbiBldmVyISovCiAvKiB9CiAgcmV0dXJuIHRydWUKfQonOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0anMiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywianMiKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKKi8KCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKCiRjb250ZW50PSIiOwpzd2l0Y2ggKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJleGFtcGxlc3ludGF4IiwiaHRtbCIpKSB7CiAgY2FzZSAiaHRtbCIgOiB7CiAgICAkY29udGVudD0iCjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlRlc3RpbmcgaHRtbC1zeW50YXg8L3RpdGxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIEFuZCBkb2luZyBhYnNvbHV0ZWx5IG5vdGhpbmcgZWxzZQogIDwvYm9keT4KPC9odG1sPgoiOwogIGJyZWFrOwogIH0KICBjYXNlICJjc3MiIDogewogICAgJGNvbnRlbnQ9IgoudGVzdGNzcyB7CiAgZm9udC13ZWlnaHQ6Ym9sZDsKICBoZWlnaHQ6IDEwcHg7Cn0KIjsKICBicmVhazsKICB9CiAgY2FzZSAicGhwIiA6IHsKICAgICRjb250ZW50PSIKPD9waHAKICBmdW5jdGlvbiB0ZXN0UEhQKFwkc29tZXBhcmFtKSB7CiAgICBlY2hvICdEbyB5b3UgdGhpbmsgdGhpcyBsb29rcyBuaWNlPyc7CiAgfQo/PgoiOwogIGJyZWFrOwogIH0KICBjYXNlICJqcyIgOiB7CiAgICAkY29udGVudD0nCmZ1bmN0aW9uIG15anNmdW50aW9uKHBhcmFtcykgewogIHZhciBtc2cgPSAiVGhpcyBqYXZhc2NyaXB0IGlzIGZhbnRhc3RpYyEiCiAgZm9yICh2YXIgaT0wOyBpPDk5OTk7IGkrKykgewogICAgYWxlcnQobXNnKTsKCiAgfQogIHJldHVybiB0cnVlCn0KJzsKICBicmVhazsKICB9Cn0KCmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsImRlZmF1bHRhZG1pbiIpOwplY2hvICR0aGlzLT5MYW5nKCJleGFtcGxlc3ludGF4IikuIjogIjsKJHN5bnRheGVzPWFycmF5KCR0aGlzLT5MYW5nKCJodG1sdGVzdCIpPT4iaHRtbCIsJHRoaXMtPkxhbmcoImNzc3Rlc3QiKT0+ImNzcyIsJHRoaXMtPkxhbmcoInBocHRlc3QiKT0+InBocCIsJHRoaXMtPkxhbmcoImpzdGVzdCIpPT4ianMiKTsKZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsImV4YW1wbGVzeW50YXgiLCRzeW50YXhlcywtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsImh0bWwiKSwib25jaGFuZ2U9J3RoaXMuZm9ybS5zdWJtaXQoKSciKTsKLy9lY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsImV4YW1wbGVzdWJtaXQiLCR0aGlzLT5MYW5nKCJjaGFuZ2UiKSk7CmVjaG8gIjxici8+IjsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0YXJlYTEiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsImh0bWwiKSk7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYoaXNzZXQoJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pKSAKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwgJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pOwplbHNlCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsICcwJyk7CgppZihpc3NldCgkcGFyYW1zWyJhbGxvd2Z1bGxzY3JlZW4iXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsICRwYXJhbXNbImFsbG93ZnVsbHNjcmVlbiJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhbGxvd2Z1bGxzY3JlZW4iLCAnMCcpOwoKaWYoaXNzZXQoJHBhcmFtc1sidGV4dHdyYXBwaW5nIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCAkcGFyYW1zWyJ0ZXh0d3JhcHBpbmciXSk7CmVsc2UKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidGV4dHdyYXBwaW5nIiwgJzAnKTsKICAKLyppZihpc3NldCgkcGFyYW1zWyJhdXRvbWF0Y2hwYXJlbnMiXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsICRwYXJhbXNbImF1dG9tYXRjaHBhcmVucyJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhdXRvbWF0Y2hwYXJlbnMiLCAnMCcpOyovCgppZihpc3NldCgkcGFyYW1zWyJ0YWJoYW5kbGluZyJdKSkKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidGFiaGFuZGxpbmciLCAkcGFyYW1zWyJ0YWJoYW5kbGluZyJdKTsKCmlmKGlzc2V0KCRwYXJhbXNbInRhYnNpemUiXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRhYnNpemUiLCAkcGFyYW1zWyJ0YWJzaXplIl0pOwoKaWYoaXNzZXQoJHBhcmFtc1siY3NzYWRkaXRpb25zIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJjc3NhZGRpdGlvbnMiLCAkcGFyYW1zWyJjc3NhZGRpdGlvbnMiXSk7CgppZihpc3NldCgkcGFyYW1zWyJ0aGVtZSJdKSkKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidGhlbWUiLCAkcGFyYW1zWyJ0aGVtZSJdKTsKCgokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLGFycmF5KCJtb2R1bGVfbWVzc2FnZSI9PiR0aGlzLT5MYW5nKCJzZXR0aW5nc3NhdmVkIiksInRhYiI9PiJzZXR0aW5ncyIpKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/CodeMirror.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNDTVMgLSBDTVMgTWFkZSBTaW1wbGUNCiMoYykyMDA1LTA2IGJ5IE1vcnRlbiBQb3Vsc2VuIChtb3J0ZW5AcG91bHNlbi5vcmcpDQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KI2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KI1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KI0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiNhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KI0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCg0KDQpjbGFzcyBDb2RlTWlycm9yIGV4dGVuZHMgQ01TTW9kdWxlIHsNCgl2YXIgJG5vZWRpdG9ycz0wOw0KCXZhciAkaGVhZGVyaW5mb3NlbnQ9ZmFsc2U7DQogIHZhciAkX2h0bWxhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfamF2YXNjcmlwdGFjdGl2ZSA9IGZhbHNlOw0KICB2YXIgJF9jc3NhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfcGhwYWN0aXZlID0gZmFsc2U7DQogIHZhciAkX2RlZmF1bHRjc3NhZGRpdGlvbnMgPSAiLkNvZGVNaXJyb3Ige2xpbmUtaGVpZ2h0OiAxLjNlbTsgZm9udC1zaXplOjExcHh9IjsNCg0KDQoJZnVuY3Rpb24gR2V0TmFtZSgpIHsNCgkJcmV0dXJuICdDb2RlTWlycm9yJzsNCgl9DQoNCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBHZXRIZWxwKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoImhlbHAiKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3IoKSB7DQoJCXJldHVybiAnTW9ydGVuIFBvdWxzZW4nOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgew0KCQlyZXR1cm4gJyZsdDttb3J0ZW5AcG91bHNlbi5vcmcmZ3Q7JzsNCgl9DQoNCglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7DQoJCXJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjaGFuZ2Vsb2cudHBsJyk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsNCgkJcmV0dXJuICcyLjMuMSc7DQoJfQ0KCQ0KCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgew0KCQlyZXR1cm4gIjEuMTAiOw0KCX0NCg0KICBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKSB7DQogICAkdGhpcy0+c3ludGF4YWN0aXZlPXRydWU7DQogIH0NCg0KICBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zPWFycmF5KCkpIHsNCiAgICBpZiAoJGNhcGFiaWxpdHk9PSJ3eXNpd3lnIikgcmV0dXJuIHRydWU7DQogICAgaWYgKCRjYXBhYmlsaXR5PT0ic3ludGF4aGlnaGxpZ2h0aW5nIikgcmV0dXJuIHRydWU7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQoNCglmdW5jdGlvbiBJc1dZU0lXWUcoKSB7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCWZ1bmN0aW9uIElzU3ludGF4SGlnaGxpZ2h0ZXIoKSB7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsNCgkJcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyk7DQoJfQ0KDQoJZnVuY3Rpb24gU3ludGF4UGFnZUZvcm1TdWJtaXQoKSB7DQoJCXJldHVybiAiZm9yICh2YXIgY250RWRpdG9yID0gMDsgY250RWRpdG9yIDwgbnVtQ29kZU1pcnJvckFyZWFzOyBjbnRFZGl0b3IrKykge1xuIg0KCQkuICJcdFx0dmFyIGVkaXRvciA9IGV2YWwoJ2NvZGVtaXJyb3JlZGl0b3InICsgY250RWRpdG9yKTtcbiINCiAgICAuIlx0XHRlZGl0b3Iuc2F2ZSgpIg0KICAgIC8qLiAiXHRcdHZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2RlbWlycm9yYXJlYScgKyBjbnRFZGl0b3IpO1xuIg0KICAgICAgLy8uImFsZXJ0KGVkaXRvci5nZXRDb2RlKCkpOyINCgkJLy8uICJcdFx0ZWRpdG9yLnRleHRhcmVhLnZhbHVlID0gZWRpdG9yLmdldENvZGUoKTtcbiINCiAgICAgIC4gIlx0XHR0ZXh0YXJlYS52YWx1ZSA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuIiovDQoJCS4gIlx0fVxuIjsNCgl9DQoJDQoJZnVuY3Rpb24gV1lTSVdZR1BhZ2VGb3JtU3VibWl0KCkgew0KCQlyZXR1cm4gJHRoaXMtPlN5bnRheFBhZ2VGb3JtU3VibWl0KCk7DQoJfQ0KDQoJZnVuY3Rpb24gV1lTSVdZR1RleHRBcmVhKCRuYW1lPSd0ZXh0YXJlYScsJGNvbHVtbnM9JzgwJywkcm93cz0nMTUnLCRlbmNvZGluZz0nJywkY29udGVudD0nJywkc3R5bGVzaGVldD0nJywkYWRkdGV4dD0nJykgew0KCQkkdGhpcy0+d3lzaXd5Z2FjdGl2ZT10cnVlOw0KCQlyZXR1cm4gJHRoaXMtPlN5bnRheFRleHRhcmVhKCRuYW1lLCJodG1sIiwkY29sdW1ucywkcm93cywkZW5jb2RpbmcsJGNvbnRlbnQpOw0KCX0NCg0KCWZ1bmN0aW9uIFN5bnRheFRleHRhcmVhKCRuYW1lPSd0ZXh0YXJlYScsJHN5bnRheD0iaHRtbCIsJGNvbHVtbnM9JzgwJywkcm93cz0nMTUnLCRlbmNvZGluZz0nJywkY29udGVudD0nJywkc3R5bGVzaGVldD0nJywkYWRkdGV4dD0nJykgew0KCQkvLyR0ZXh0YXJlYT0iIjsNCg0KCQkkdGhpcy0+c3ludGF4YWN0aXZlPXRydWU7CQ0KCQkvKmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgidXNlYXV0b2NvbXBsZXRlIiwiMSIpPT0iMCIpICRjbGFzcy49IiBhdXRvY29tcGxldGUtb2ZmIjsNCgkJaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzaG93bGluZW51bWJlcnMiLCIxIik9PSIwIikgJGNsYXNzLj0iIGxpbmVudW1iZXJzLW9mZiI7DQoJCSovDQogICAgICAvKmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2hvd3RvZ2dsZXN5bnRheCIsIjEiKT09IjEiKSB7DQogICAgIA0KCQkJJHRleHRhcmVhLj0iPGJyLz48aW5wdXQgdHlwZT0nY2hlY2tib3gnIGNoZWNrZWQ9JzEnIG9uY2xpY2s9J2NvZGVwcmVzcyIuJHRoaXMtPm5vZWRpdG9ycy4iLnRvZ2dsZUVkaXRvcigpOycgY2hlY2tlZD0nY2hlY2tlZCcgaWQ9J2NvZGVwcmVzc2NoZWNrIi4kdGhpcy0+bm9lZGl0b3JzLiInPjxsYWJlbCBmb3I9J2NvZGVwcmVzc2NoZWNrIi4kdGhpcy0+bm9lZGl0b3JzLiInPiIuJHRoaXMtPkxhbmcoInRvZ2dsZXN5bnRheCIpLiI8L2xhYmVsPiI7DQoJCX0qLw0KICAgICRzbWFydHk9JHRoaXMtPnNtYXJ0eTsNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsIjEiKT09IjEiKXsNCiAgICAgICRzbWFydHktPmFzc2lnbignbGluZW51bWJlcnMnLCAidHJ1ZSIpOw0KICAgIH0gZWxzZSB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ2xpbmVudW1iZXJzJywgImZhbHNlIik7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGV4dHdyYXBwaW5nIiwiMSIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCd0ZXh0d3JhcHBpbmcnLCAidHJ1ZSIpOw0KICAgIH0gZWxzZSB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ3RleHR3cmFwcGluZycsICJmYWxzZSIpOw0KICAgIH0NCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsIjAiKT09IjEiKXsNCiAgICAgICRzbWFydHktPmFzc2lnbignYXV0b21hdGNocGFyZW5zJywgInRydWUiKTsNCiAgICB9IGVsc2Ugew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnMnLCAiZmFsc2UiKTsNCiAgICB9DQoNCiAgICAkdGhlbWU9JHRoaXMtPkdldFByZWZlcmVuY2UoInRoZW1lIiwiZGVmYXVsdCIpOw0KICAgICRzbWFydHktPmFzc2lnbigndGhlbWUnLCAkdGhlbWUpOw0KICAgICR0YWJzaXplPSR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0YWJzaXplIiwiMiIpOw0KICAgICRzbWFydHktPmFzc2lnbigndGFic2l6ZScsICR0YWJzaXplKTsNCg0KDQogICAgLy9saW5lTnVtYmVyczogdHJ1ZSwNCiAgICAvLyRjb25maWc9JHRoaXMtPkdldENvbmZpZygpOw0KICAgICRjb25maWc9Y21zbXMoKS0+R2V0Q29uZmlnKCk7DQoNCiAgICAkc21hcnR5LT5hc3NpZ24oJ3RleHRhcmVhaWQnLCAiY29kZW1pcnJvcmFyZWEiLiR0aGlzLT5ub2VkaXRvcnMpOw0KICAgICRzbWFydHktPmFzc2lnbigndGV4dGFyZWFuYW1lJywgJG5hbWUpOw0KICAgICRzbWFydHktPmFzc2lnbignY29udGVudCcsICRjb250ZW50KTsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ2lkJywgJHRoaXMtPm5vZWRpdG9ycyk7DQogICAgLy8kcGFyc2VyZmlsZT0iIjsgJGNzc2ZpbGU9IiI7DQogICAgLyokY21kaXI9JGNvbmZpZ1sicm9vdF91cmwiXS4nL21vZHVsZXMvQ29kZU1pcnJvci9jb2RlbWlycm9yJzsNCiAgICBzd2l0Y2goJHN5bnRheCkgew0KICAgICAgDQogICAgICBjYXNlICJodG1sIiA6IA0KICAgICAgICAkcGFyc2VyZmlsZT0nInBhcnNleG1sLmpzIic7IA0KICAgICAgICAkY3NzZmlsZT0nIicuJGNtZGlyLicvbW9kZS94bWwveG1sLmNzcyInOw0KICAgICAgICBicmVhazsNCiAgICAgIGNhc2UgImNzcyIgOg0KICAgICAgICAkcGFyc2VyZmlsZT0nInBhcnNlY3NzLmpzIic7DQogICAgICAgICRjc3NmaWxlPSciJy4kY21kaXIuJy9jc3MvY3NzLmNzcyInOw0KICAgICAgICBicmVhazsNCiAgICAgIGNhc2UgImphdmFzY3JpcHQiIDoNCiAgICAgIGNhc2UgImpzIiA6DQogICAgICAgICRwYXJzZXJmaWxlPSdbInRva2VuaXplamF2YXNjcmlwdC5qcyIsICJwYXJzZWphdmFzY3JpcHQuanMiXSc7DQogICAgICAgICRjc3NmaWxlPSciJy4kY21kaXIuJy9jc3MvanNjb2xvcnMuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAicGhwIiA6DQogICAgICAgICRwYXJzZXJmaWxlPSdbInBhcnNleG1sLmpzIiwgInBhcnNlY3NzLmpzIiwgInRva2VuaXplamF2YXNjcmlwdC5qcyIsICJwYXJzZWphdmFzY3JpcHQuanMiLCAicGFyc2VodG1sbWl4ZWQuanMiLCIuLi9jb250cmliL3BocC9qcy90b2tlbml6ZXBocC5qcyIsICIuLi9jb250cmliL3BocC9qcy9wYXJzZXBocC5qcyIsICAgICAgICAgICAgICAgICAgICAgIi4uL2NvbnRyaWIvcGhwL2pzL3BhcnNlcGhwaHRtbG1peGVkLmpzIl0nOw0KICAgICAgICAkY3NzZmlsZT0nWyInLiRjbWRpci4nL2Nzcy94bWxjb2xvcnMuY3NzIiwiJy4kY21kaXIuJy9jc3MvanNjb2xvcnMuY3NzIiwiJy4kY21kaXIuJy9jc3MvY3NzY29sb3JzLmNzcyIsIicuJGNtZGlyLicvY29udHJpYi9waHAvY3NzL3BocGNvbG9ycy5jc3MiXSc7DQogICAgICAgIGJyZWFrOw0KICAgIH0qLw0KICAgIC8vJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYXJzZXJmaWxlJywgJHBhcnNlcmZpbGUpOw0KICAgIC8vJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NmaWxlJywgJGNzc2ZpbGUpOw0KDQogICAgJHNtYXJ0eS0+YXNzaWduKCd0YWJoYW5kbGluZycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0YWJoYW5kbGluZyIsImluZGVudCIpKTsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ2FsbG93ZnVsbHNjcmVlbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJhbGxvd2Z1bGxzY3JlZW4iLCIwIikpOw0KICAgIA0KICAgICRzbWFydHktPmFzc2lnbigncm9vdF91cmwnLCAkY29uZmlnWyJyb290X3VybCJdKTsNCg0KICAgIHN3aXRjaCAoJHN5bnRheCkgew0KICAgICAgY2FzZSAiaHRtbCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAidGV4dC9odG1sIik7ICR0aGlzLT5faHRtbGFjdGl2ZT10cnVlOyBicmVhazsNCiAgICAgIGNhc2UgImpzIjoNCiAgICAgIGNhc2UgImphdmFzY3JpcHQiIDogJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgImphdmFzY3JpcHQiKTskdGhpcy0+X2phdmFzY3JpcHRhY3RpdmU9dHJ1ZTsgIGJyZWFrOw0KICAgICAgY2FzZSAiY3NzIiA6ICRzbWFydHktPmFzc2lnbignbW9kZScsICJjc3MiKTsgJHRoaXMtPl9jc3NhY3RpdmU9dHJ1ZTsgYnJlYWs7DQogICAgICBjYXNlICJwaHAiIDogJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgInBocCIpOyAkdGhpcy0+X3BocGFjdGl2ZT10cnVlOyBicmVhazsNCiAgICB9DQoNCg0KICAgICR0ZXh0YXJlYT0kdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjb2RlbWlycm9yMmFyZWEudHBsJyk7DQoNCgkJJHRoaXMtPm5vZWRpdG9ycysrOw0KDQoJCXJldHVybiAkdGV4dGFyZWE7DQoJfQ0KDQoJZnVuY3Rpb24gV1lTSVdZR0dlbmVyYXRlSGVhZGVyKCRodG1scmVzdWx0PScnKSB7DQoJCXJldHVybiAkdGhpcy0+U3ludGF4R2VuZXJhdGVIZWFkZXIoKTsNCgl9DQoNCglmdW5jdGlvbiBTeW50YXhHZW5lcmF0ZUhlYWRlcigkaHRtbHJlc3VsdD0nJykgew0KCQlpZiAoJHRoaXMtPmhlYWRlcmluZm9zZW50KSByZXR1cm4gIiI7DQoJCWlmICgkdGhpcy0+bm9lZGl0b3JzPT0wKSByZXR1cm4gJyc7DQoJCS8vJEdMT0JBTFNbImNvbmZpZyJdWyJyb290X3BhdGgiXS4NCiAgICAkY29uZmlnPWNtc21zKCktPkdldENvbmZpZygpOw0KICAgICRhbHJlYWR5aW49YXJyYXkoKTsNCg0KICAgICR0aGVtZT0kdGhpcy0+R2V0UHJlZmVyZW5jZSgidGhlbWUiLCJkZWZhdWx0Iik7DQoNCgkJJHNjcmlwdHBhdGg9JGNvbmZpZ1sicm9vdF91cmwiXS4iL21vZHVsZXMvQ29kZU1pcnJvci9jb2RlbWlycm9yMiI7DQoJCSRoZWFkZXI9IiI7DQogICAgJGhlYWRlci49Jw0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy9saWIvY29kZW1pcnJvci5jc3MiLz4nOw0KCQkkaGVhZGVyLj0nDQoJICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4nOw0KICAgIGlmICgkdGhlbWUhPSJkZWZhdWx0Iikgew0KICAgICAgJGhlYWRlci49Jw0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy90aGVtZS8nLiR0aGVtZS4nLmNzcyIvPic7DQogICAgICAvKiRoZWFkZXIuPScNCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvdGhlbWUvZGVmYXVsdC5jc3MiLz4nOyovDQogICAgfQ0KICAgIGlmICgkdGhpcy0+X2h0bWxhY3RpdmUpIHsNCg0KICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2Nzcy9jc3MuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109ImNzcy5qcyI7DQogICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4nOw0KICAgICAgJGFscmVhZHlpbltdPSJqYXZhc2NyaXB0LmpzIjsNCiAgICAgICRoZWFkZXIuPScNCiAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4nOw0KICAgICAgJGFscmVhZHlpbltdPSJ4bWwuanMiOw0KICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109Imh0bWxtaXhlZC5qcyI7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+X2phdmFzY3JpcHRhY3RpdmUpIHsNCiAgICAgIGlmICghaW5fYXJyYXkoImphdmFzY3JpcHQuanMiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iamF2YXNjcmlwdC5qcyI7DQogICAgICB9DQogICAgICAgICAgICANCg0KICAgIH0NCiAgICBpZiAoJHRoaXMtPl9jc3NhY3RpdmUpIHsNCiAgICAgIGlmICghaW5fYXJyYXkoImNzcy5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2Nzcy9jc3MuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iY3NzLmpzIjsNCiAgICAgIH0NCg0KICAgIH0NCiAgICBpZiAoJHRoaXMtPl9waHBhY3RpdmUpIHsNCiAgICAgIGlmICghaW5fYXJyYXkoImNzcy5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJjc3MuanMiOw0KICAgICAgfQ0KICAgICAgaWYgKCFpbl9hcnJheSgiamF2YXNjcmlwdC5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4nOw0KICAgICAgICAkYWxyZWFkeWluW109ImphdmFzY3JpcHQuanMiOw0KICAgICAgfQ0KICAgICAgaWYgKCFpbl9hcnJheSgieG1sLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4nOw0KICAgICAgICAkYWxyZWFkeWluW109InhtbC5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJjbGlrZS5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY2xpa2UvY2xpa2UuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iY2xpa2UuanMiOw0KICAgICAgfQ0KICAgICAgaWYgKCFpbl9hcnJheSgiY2xpa2UuY3NzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy9tb2RlL2NsaWtlL2NsaWtlLmNzcyIgLz4nOw0KICAgICAgICAkYWxyZWFkeWluW109ImNsaWtlLmNzcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJwaHAuanMiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL3BocC9waHAuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0icGhwLmpzIjsNCiAgICAgIH0NCiAgICB9DQogICAgaWYgKCR0aGVtZSE9ImRlZmF1bHQiKSB7DQogICAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lL2RlZmF1bHQuY3NzIi8+JzsNCiAgICB9DQogICAgJGhlYWRlci49Jw0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy90aGVtZS8nLiR0aGVtZS4nLmNzcyIvPic7DQogICAgJGhlYWRlci49Jw0KDQo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICB2YXIgbnVtQ29kZU1pcnJvckFyZWFzPScuJHRoaXMtPm5vZWRpdG9ycy4nOw0KPC9zY3JpcHQ+DQoNCic7DQoNCiAgICAkaGVhZGVyLj0nDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAnLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5fZGVmYXVsdGNzc2FkZGl0aW9ucykuJw0KPC9zdHlsZT4NCiAgICAnOw0KDQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJhbGxvd2Z1bGxzY3JlZW4iLDApPT0iMSIpIHsNCiAgICAkYmdjb2xvcj0id2hpdGUiOw0KICAgIGlmICgkdGhlbWU9PSJuaWdodCIpICRiZ2NvbG9yPSJibGFjayI7DQogICAgICAkaGVhZGVyLj0nDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgLmZ1bGxzY3JlZW4gew0KICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICAgICAgICB0b3A6IDA7DQogICAgICAgICAgICAgICAgICBsZWZ0OiAwOw0KICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICAgICAgICB6LWluZGV4OiA5OTk5Ow0KICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwOw0KICAgICAgICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgICAgICAgICAgIGJvcmRlcjogMHB4IHNvbGlkICNCQkJCQkI7DQogICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOw0KICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjonLiRiZ2NvbG9yLic7DQogICAgICAgICAgICAgIH0NCjwvc3R5bGU+DQo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICBmdW5jdGlvbiB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZygpDQogICAgICB7DQogICAgICAgICAgdmFyIGVkaXRvckRpdiA9ICQoIi5Db2RlTWlycm9yLXNjcm9sbCIpOw0KICAgICAgICAgIGlmICghZWRpdG9yRGl2Lmhhc0NsYXNzKCJmdWxsc2NyZWVuIikpIHsNCiAgICAgICAgICAgICAgdG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbiA9IHsgaGVpZ2h0OiBlZGl0b3JEaXYuaGVpZ2h0KCksIHdpZHRoOiBlZGl0b3JEaXYud2lkdGgoKSB9DQogICAgICAgICAgICAgIGVkaXRvckRpdi5hZGRDbGFzcygiZnVsbHNjcmVlbiIpOw0KICAgICAgICAgICAgICBlZGl0b3JEaXYuaGVpZ2h0KCIxMDAlIik7DQogICAgICAgICAgICAgIGVkaXRvckRpdi53aWR0aCgiMTAwJSIpOw0KICAgICAgICAgICAgICBlZGl0b3IucmVmcmVzaCgpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgZWRpdG9yRGl2LnJlbW92ZUNsYXNzKCJmdWxsc2NyZWVuIik7DQogICAgICAgICAgICAgIGVkaXRvckRpdi5oZWlnaHQodG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbi5oZWlnaHQpOw0KICAgICAgICAgICAgICBlZGl0b3JEaXYud2lkdGgodG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbi53aWR0aCk7DQogICAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7DQogICAgICAgICAgfQ0KICAgICAgfQ0KICANCjwvc2NyaXB0Pg0KDQogICAgICAnOw0KICAgIH0NCg0KDQoNCgkJJHRoaXMtPmhlYWRlcmluZm9zZW50PXRydWU7DQoJCXJldHVybiAkaGVhZGVyOw0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/activeline.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEFjdGl2ZSBMaW5lIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5hY3RpdmVsaW5lIHtiYWNrZ3JvdW5kOiAjZThmMmZmICFpbXBvcnRhbnQ7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQWN0aXZlIExpbmUgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJzcyB4bWxuczphdG9tPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iIHZlcnNpb249IjIuMCIKICAgICB4bWxuczpnZW9yc3M9Imh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiCiAgICAgeG1sbnM6dHdpdHRlcj0iaHR0cDovL2FwaS50d2l0dGVyLmNvbSI+CiAgPGNoYW5uZWw+CiAgICA8dGl0bGU+VHdpdHRlciAvIGNvZGVtaXJyb3I8L3RpdGxlPgogICAgPGxpbms+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3I8L2xpbms+CiAgICA8YXRvbTpsaW5rIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiCiAgICAgICAgICAgICAgIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHJlbD0ic2VsZiIvPgogICAgPGRlc2NyaXB0aW9uPlR3aXR0ZXIgdXBkYXRlcyBmcm9tIENvZGVNaXJyb3IgLyBjb2RlbWlycm9yLjwvZGVzY3JpcHRpb24+CiAgICA8bGFuZ3VhZ2U+ZW4tdXM8L2xhbmd1YWdlPgogICAgPHR0bD40MDwvdHRsPgogIDxpdGVtPgogICAgPHRpdGxlPmNvZGVtaXJyb3I6IGh0dHA6Ly9jbG91ZC1pZGUuY29tICYjODIxMjsgdGhleSdyZSBzcHJpbmdpbmcgdXAgbGlrZSBtdXNocm9vbXMuIFRoaXMgb25lCiAgICAgIHVzZXMgQ29kZU1pcnJvciBhcyBpdHMgZWRpdG9yLjwvdGl0bGU+CiAgICA8ZGVzY3JpcHRpb24+Y29kZW1pcnJvcjogaHR0cDovL2Nsb3VkLWlkZS5jb20gJiM4MjEyOyB0aGV5J3JlIHNwcmluZ2luZyB1cCBsaWtlIG11c2hyb29tcy4gVGhpcwogICAgICBvbmUgdXNlcyBDb2RlTWlycm9yIGFzIGl0cyBlZGl0b3IuPC9kZXNjcmlwdGlvbj4KICAgIDxwdWJEYXRlPlRodSwgMTcgTWFyIDIwMTEgMjM6MzQ6NDcgKzAwMDA8L3B1YkRhdGU+CiAgICA8Z3VpZD5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80ODUyNzczMzcyMjA1ODc1MjwvZ3VpZD4KICAgIDxsaW5rPmh0dHA6Ly90d2l0dGVyLmNvbS9jb2RlbWlycm9yL3N0YXR1c2VzLzQ4NTI3NzMzNzIyMDU4NzUyPC9saW5rPgogICAgPHR3aXR0ZXI6c291cmNlPndlYjwvdHdpdHRlcjpzb3VyY2U+CiAgICA8dHdpdHRlcjpwbGFjZS8+CiAgPC9pdGVtPgogIDxpdGVtPgogICAgPHRpdGxlPmNvZGVtaXJyb3I6IFBvc3RlZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBDb2RlTWlycm9yIDIgaW50ZXJuYWxzIGF0CiAgICAgIGh0dHA6Ly9jb2RlbWlycm9yLm5ldC8yL2ludGVybmFscy5odG1sPC90aXRsZT4KICAgIDxkZXNjcmlwdGlvbj5jb2RlbWlycm9yOiBQb3N0ZWQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgQ29kZU1pcnJvciAyIGludGVybmFscyBhdAogICAgICBodHRwOi8vY29kZW1pcnJvci5uZXQvMi9pbnRlcm5hbHMuaHRtbDwvZGVzY3JpcHRpb24+CiAgICA8cHViRGF0ZT5XZWQsIDAyIE1hciAyMDExIDEyOjE1OjA5ICswMDAwPC9wdWJEYXRlPgogICAgPGd1aWQ+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3Ivc3RhdHVzZXMvNDI5MjA4Nzk3ODg3ODk3NjA8L2d1aWQ+CiAgICA8bGluaz5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80MjkyMDg3OTc4ODc4OTc2MDwvbGluaz4KICAgIDx0d2l0dGVyOnNvdXJjZT53ZWI8L3R3aXR0ZXI6c291cmNlPgogICAgPHR3aXR0ZXI6cGxhY2UvPgogIDwvaXRlbT4KICA8L2NoYW5uZWw+CjwvcnNzPjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgbW9kZTogImFwcGxpY2F0aW9uL3htbCIsCiAgbGluZU51bWJlcnM6IHRydWUsCiAgbGluZVdyYXBwaW5nOiB0cnVlLAogIG9uQ3Vyc29yQWN0aXZpdHk6IGZ1bmN0aW9uKCkgewogICAgZWRpdG9yLnNldExpbmVDbGFzcyhobExpbmUsIG51bGwsIG51bGwpOwogICAgaGxMaW5lID0gZWRpdG9yLnNldExpbmVDbGFzcyhlZGl0b3IuZ2V0Q3Vyc29yKCkubGluZSwgbnVsbCwgImFjdGl2ZWxpbmUiKTsKICB9Cn0pOwp2YXIgaGxMaW5lID0gZWRpdG9yLnNldExpbmVDbGFzcygwLCAiYWN0aXZlbGluZSIpOwo8L3NjcmlwdD4KCiAgICA8cD5TdHlsaW5nIHRoZSBjdXJyZW50IGN1cnNvciBsaW5lLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/changemode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1vZGUtQ2hhbmdpbmcgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3NjaGVtZS9zY2hlbWUuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNb2RlLUNoYW5naW5nIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cjs7IElmIHRoZXJlIGlzIFNjaGVtZSBjb2RlIGluIGhlcmUsIHRoZSBlZGl0b3Igd2lsbCBiZSBpbiBTY2hlbWUgbW9kZS4KOzsgSWYgeW91IHB1dCBpbiBKUyBpbnN0ZWFkLCBpdCdsbCBzd2l0Y2ggdG8gSlMgbW9kZS4KCihkZWZpbmUgKGRvdWJsZSB4KQogICgqIHggeCkpCjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+T24gY2hhbmdlcyB0byB0aGUgY29udGVudCBvZiB0aGUgYWJvdmUgZWRpdG9yLCBhIChjcnVkZSkgc2NyaXB0CnRyaWVzIHRvIGF1dG8tZGV0ZWN0IHRoZSBsYW5ndWFnZSB1c2VkLCBhbmQgc3dpdGNoZXMgdGhlIGVkaXRvciB0bwplaXRoZXIgSmF2YVNjcmlwdCBvciBTY2hlbWUgbW9kZSBiYXNlZCBvbiB0aGF0LjwvcD4KCjxzY3JpcHQ+CiAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgIG1vZGU6ICJzY2hlbWUiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgdGFiTW9kZTogImluZGVudCIsCiAgICBvbkNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFyVGltZW91dChwZW5kaW5nKTsKICAgICAgc2V0VGltZW91dCh1cGRhdGUsIDQwMCk7CiAgICB9CiAgfSk7CiAgdmFyIHBlbmRpbmc7CiAgZnVuY3Rpb24gbG9va3NMaWtlU2NoZW1lKGNvZGUpIHsKICAgIHJldHVybiAhL15ccypcKFxzKmZ1bmN0aW9uXGIvLnRlc3QoY29kZSkgJiYgL15ccypbO1woXS8udGVzdChjb2RlKTsKICB9CiAgZnVuY3Rpb24gdXBkYXRlKCkgewogICAgZWRpdG9yLnNldE9wdGlvbigibW9kZSIsIGxvb2tzTGlrZVNjaGVtZShlZGl0b3IuZ2V0VmFsdWUoKSkgPyAic2NoZW1lIiA6ICJqYXZhc2NyaXB0Iik7CiAgfQo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/closetag.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCgk8aGVhZD4NCgkJPHRpdGxlPkNvZGVNaXJyb3I6IENsb3NlLVRhZyBEZW1vPC90aXRsZT4NCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPg0KCQk8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvY2xvc2V0YWcuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgc3JjPSIuLi9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPjwvc2NyaXB0Pg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+DQoJCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJCQkuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO30NCgkJPC9zdHlsZT4NCgk8L2hlYWQ+DQoJPGJvZHk+DQoJDQoJCTxoMT5DbG9zZS1UYWcgRGVtbzwvaDE+DQoJCTx1bD4NCgkJCTxsaT5UeXBlIGFuIGh0bWwgdGFnLiAgV2hlbiB5b3UgdHlwZSAnPicgb3IgJy8nLCB0aGUgdGFnIHdpbGwgYXV0by1jbG9zZS9jb21wbGV0ZS4gIEJsb2NrLWxldmVsIHRhZ3Mgd2lsbCBpbmRlbnQuPC9saT4NCgkJCTxsaT5UaGVyZSBhcmUgb3B0aW9ucyBmb3IgZGlzYWJsaW5nIHRhZyBjbG9zaW5nIG9yIGN1c3RvbWl6aW5nIHRoZSBsaXN0IG9mIHRhZ3MgdG8gaW5kZW50LjwvbGk+DQoJCQk8bGk+V29ya3Mgd2l0aCAidGV4dC9odG1sIiAoYmFzZWQgb24gaHRtbG1peGVkLmpzIG9yIHhtbC5qcykgbW9kZS48L2xpPg0KCQkJPGxpPlZpZXcgc291cmNlIGZvciBrZXkgYmluZGluZyBkZXRhaWxzLjwvbGk+DQoJCTwvcD4NCg0KCQk8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjwvdGV4dGFyZWE+PC9mb3JtPg0KDQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkJdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsNCgkJCW1vZGU6ICd0ZXh0L2h0bWwnLA0KCQkJDQoJCQkvL2Nsb3NlVGFnRW5hYmxlZDogZmFsc2UsIC8vIFNldCB0aGlzIG9wdGlvbiB0byBkaXNhYmxlIHRhZyBjbG9zaW5nIGJlaGF2aW9yIHdpdGhvdXQgaGF2aW5nIHRvIHJlbW92ZSB0aGUga2V5IGJpbmRpbmdzLg0KCQkJLy9jbG9zZVRhZ0luZGVudDogZmFsc2UsIC8vIFBhc3MgZmFsc2Ugb3IgYW4gYXJyYXkgb2YgdGFnIG5hbWVzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluZGVudGF0aW9uIGJlaGF2aW9yLg0KCQkJDQoJCQlleHRyYUtleXM6IHsNCgkJCQkiJz4nIjogZnVuY3Rpb24oY20pIHsgY20uY2xvc2VUYWcoY20sICc+Jyk7IH0sDQoJCQkJIicvJyI6IGZ1bmN0aW9uKGNtKSB7IGNtLmNsb3NlVGFnKGNtLCAnLycpOyB9DQoJCQl9LA0KCQkJDQoJCQkvKg0KCQkJLy8gZXh0cmFLZXlzIGlzIHRoZSBlYXNpZXIgd2F5IHRvIGdvLCBidXQgaWYgeW91IG5lZWQgbmF0aXZlIGtleSBldmVudCBwcm9jZXNzaW5nLCB0aGlzIHNob3VsZCB3b3JrIHRvby4NCgkJCW9uS2V5RXZlbnQ6IGZ1bmN0aW9uKGNtLCBlKSB7DQoJCQkJaWYgKGUudHlwZSA9PSAna2V5ZG93bicpIHsNCgkJCQkJdmFyIGMgPSBlLmtleUNvZGUgfHwgZS53aGljaDsNCgkJCQkJaWYgKGMgPT0gMTkwIHx8IGMgPT0gMTkxKSB7DQoJCQkJCQl0cnkgew0KCQkJCQkJCWNtLmNsb3NlVGFnKGNtLCBjID09IDE5MCA/ICc+JyA6ICcvJyk7DQoJCQkJCQkJZS5zdG9wKCk7DQoJCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJaWYgKGUgIT0gQ29kZU1pcnJvci5QYXNzKSB0aHJvdyBlOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0sDQoJCQkqLw0KCQkJDQoJCQl3b3JkV3JhcDogdHJ1ZQ0KCQl9KTsNCgkJPC9zY3JpcHQ+DQoNCgk8L2JvZHk+DQo8L2h0bWw+DQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEF1dG9jb21wbGV0ZSBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvdXRpbC9zaW1wbGUtaGludC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2phdmFzY3JpcHQtaGludC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgI2VlZTt9IC5Db2RlTWlycm9yLXNjcm9sbCB7IGhlaWdodDogMTAwJSB9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQXV0b2NvbXBsZXRlIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmZ1bmN0aW9uIGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KSB7CiAgdmFyIGZvdW5kID0gW10sIHN0YXJ0ID0gdG9rZW4uc3RyaW5nOwogIGZ1bmN0aW9uIG1heWJlQWRkKHN0cikgewogICAgaWYgKHN0ci5pbmRleE9mKHN0YXJ0KSA9PSAwKSBmb3VuZC5wdXNoKHN0cik7CiAgfQogIGZ1bmN0aW9uIGdhdGhlckNvbXBsZXRpb25zKG9iaikgewogICAgaWYgKHR5cGVvZiBvYmogPT0gInN0cmluZyIpIGZvckVhY2goc3RyaW5nUHJvcHMsIG1heWJlQWRkKTsKICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSBmb3JFYWNoKGFycmF5UHJvcHMsIG1heWJlQWRkKTsKICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSBmb3JFYWNoKGZ1bmNQcm9wcywgbWF5YmVBZGQpOwogICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIG1heWJlQWRkKG5hbWUpOwogIH0KCiAgaWYgKGNvbnRleHQpIHsKICAgIC8vIElmIHRoaXMgaXMgYSBwcm9wZXJ0eSwgc2VlIGlmIGl0IGJlbG9uZ3MgdG8gc29tZSBvYmplY3Qgd2UgY2FuCiAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgdmFyIG9iaiA9IGNvbnRleHQucG9wKCksIGJhc2U7CiAgICBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtdmFyaWFibGUiKQogICAgICBiYXNlID0gd2luZG93W29iai5zdHJpbmddOwogICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtc3RyaW5nIikKICAgICAgYmFzZSA9ICIiOwogICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtYXRvbSIpCiAgICAgIGJhc2UgPSAxOwogICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgaWYgKGJhc2UgIT0gbnVsbCkgZ2F0aGVyQ29tcGxldGlvbnMoYmFzZSk7CiAgfQogIGVsc2UgewogICAgLy8gSWYgbm90LCBqdXN0IGxvb2sgaW4gdGhlIHdpbmRvdyBvYmplY3QgYW5kIGFueSBsb2NhbCBzY29wZQogICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgIGZvciAodmFyIHYgPSB0b2tlbi5zdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpIG1heWJlQWRkKHYubmFtZSk7CiAgICBnYXRoZXJDb21wbGV0aW9ucyh3aW5kb3cpOwogICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogIH0KICByZXR1cm4gZm91bmQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5QcmVzcyA8c3Ryb25nPmN0cmwtc3BhY2U8L3N0cm9uZz4gdG8gYWN0aXZhdGUgYXV0b2NvbXBsZXRpb24uIFNlZQp0aGUgY29kZSAoPGEgaHJlZj0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPmhlcmU8L2E+CmFuZCA8YSBocmVmPSIuLi9saWIvdXRpbC9qYXZhc2NyaXB0LWhpbnQuanMiPmhlcmU8L2E+KSB0byBmaWd1cmUgb3V0CmhvdyBpdCB3b3Jrcy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgQ29kZU1pcnJvci5jb21tYW5kcy5hdXRvY29tcGxldGUgPSBmdW5jdGlvbihjbSkgewogICAgICAgIENvZGVNaXJyb3Iuc2ltcGxlSGludChjbSwgQ29kZU1pcnJvci5qYXZhc2NyaXB0SGludCk7CiAgICAgIH0KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBleHRyYUtleXM6IHsiQ3RybC1TcGFjZSI6ICJhdXRvY29tcGxldGUifQogICAgICB9KTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/emacs.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEVtYWNzIGJpbmRpbmdzIGRlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2NsaWtlL2NsaWtlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9rZXltYXAvZW1hY3MuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRW1hY3MgYmluZGluZ3MgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KI2luY2x1ZGUgInN5c2NhbGxzLmgiCi8qIGdldGNoYXI6ICBzaW1wbGUgYnVmZmVyZWQgdmVyc2lvbiAqLwppbnQgZ2V0Y2hhcih2b2lkKQp7CiAgc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CiAgc3RhdGljIGNoYXIgKmJ1ZnAgPSBidWY7CiAgc3RhdGljIGludCBuID0gMDsKICBpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KICAgIG4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CiAgICBidWZwID0gYnVmOwogIH0KICByZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGhlIGVtYWNzIGtleWJpbmRpbmdzIGFyZSBlbmFibGVkIGJ5CmluY2x1ZGluZyA8YSBocmVmPSIuLi9rZXltYXAvZW1hY3MuanMiPmtleW1hcC9lbWFjcy5qczwvYT4gYW5kIHNldHRpbmcKdGhlIDxjb2RlPmtleU1hcDwvY29kZT4gb3B0aW9uIHRvIDxjb2RlPiJlbWFjcyI8L2NvZGU+LiBCZWNhdXNlCkNvZGVNaXJyb3IncyBpbnRlcm5hbCBBUEkgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gRW1hY3MsIHRoZXkgYXJlIG9ubHkKYSBsb29zZSBhcHByb3hpbWF0aW9uIG9mIGFjdHVhbCBlbWFjcyBiaW5kaW5ncywgdGhvdWdoLjwvcD4KCjxwPkFsc28gbm90ZSB0aGF0IGEgbG90IG9mIGJyb3dzZXJzIGRpc2FsbG93IGNlcnRhaW4ga2V5cyBmcm9tIGJlaW5nCmNhcHR1cmVkLiBGb3IgZXhhbXBsZSwgQ2hyb21lIGJsb2NrcyBib3RoIEN0cmwtVyBhbmQgQ3RybC1OLCB3aXRoIHRoZQpyZXN1bHQgdGhhdCBpZGlvbWF0aWMgdXNlIG9mIEVtYWNzIGtleXMgd2lsbCBjb25zdGFudGx5IGNsb3NlIHlvdXIgdGFiCm9yIG9wZW4gYSBuZXcgd2luZG93LjwvcD4KCiAgICA8c2NyaXB0PgogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWx0ID0gZWRpdG9yLmdldFdyYXBwZXJFbGVtZW50KCk7CiAgICAgICAgZWx0LnN0eWxlLmJhY2tncm91bmQgPSAiI2RlZiI7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZWx0LnN0eWxlLmJhY2tncm91bmQgPSAiIjsgfSwgMzAwKTsKICAgICAgfTsKICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiLAogICAgICAgIGtleU1hcDogImVtYWNzIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/folding.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvZGUgRm9sZGluZyBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7bWluLXdpZHRoOiAyLjZlbTsgY3Vyc29yOiBwb2ludGVyO30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IENvZGUgRm9sZGluZyBEZW1vPC9oMT4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIGNvZGUgZm9sZGluZyB1c2luZyB0aGUgY29kZQogICAgaW4gPGEgaHJlZj0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjxjb2RlPmZvbGRjb2RlLmpzPC9jb2RlPjwvYT4uCiAgICBQcmVzcyBjdHJsLXEgb3IgY2xpY2sgb24gdGhlIGd1dHRlciB0byBmb2xkIGEgYmxvY2ssIGFnYWluCiAgICB0byB1bmZvbGQuPC9wPgogICAgPGZvcm0+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTBlbTsgbWFyZ2luLWJvdHRvbTogMWVtIj5KYXZhU2NyaXB0Ojxicj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjwvdGV4dGFyZWE+PC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTBlbSI+SFRNTDo8YnI+PHRleHRhcmVhIGlkPSJjb2RlLWh0bWwiIG5hbWU9ImNvZGUtaHRtbCI+PC90ZXh0YXJlYT48L2Rpdj4KICAgIDwvZm9ybT4KICAgIDxzY3JpcHQgaWQ9InNjcmlwdCI+CndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHZhciBzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JpcHQiKTsKICB0ZS52YWx1ZSA9IChzYy50ZXh0Q29udGVudCB8fCBzYy5pbm5lclRleHQgfHwgc2MuaW5uZXJIVE1MKS5yZXBsYWNlKC9eXHMqLywgIiIpOwogIHNjLmlubmVySFRNTCA9ICIiOwogIHZhciB0ZV9odG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUtaHRtbCIpOwogIHRlX2h0bWwudmFsdWUgPSAiPGh0bWw+XG4gICIgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MICsgIlxuPC9odG1sPiI7CgogIHZhciBmb2xkRnVuYyA9IENvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uKENvZGVNaXJyb3IuYnJhY2VSYW5nZUZpbmRlcik7CiAgd2luZG93LmVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlLCB7CiAgICBtb2RlOiAiamF2YXNjcmlwdCIsCiAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgIGxpbmVXcmFwcGluZzogdHJ1ZSwKICAgIG9uR3V0dGVyQ2xpY2s6IGZvbGRGdW5jLAogICAgZXh0cmFLZXlzOiB7IkN0cmwtUSI6IGZ1bmN0aW9uKGNtKXtmb2xkRnVuYyhjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSk7fX0KICB9KTsKICBmb2xkRnVuYyhlZGl0b3IsIDkpOwogIGZvbGRGdW5jKGVkaXRvciwgMjApOwoKICB2YXIgZm9sZEZ1bmNfaHRtbCA9IENvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uKENvZGVNaXJyb3IudGFnUmFuZ2VGaW5kZXIpOwogIHdpbmRvdy5lZGl0b3JfaHRtbCA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlX2h0bWwsIHsKICAgIG1vZGU6ICJ0ZXh0L2h0bWwiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBsaW5lV3JhcHBpbmc6IHRydWUsCiAgICBvbkd1dHRlckNsaWNrOiBmb2xkRnVuY19odG1sLAogICAgZXh0cmFLZXlzOiB7IkN0cmwtUSI6IGZ1bmN0aW9uKGNtKXtmb2xkRnVuY19odG1sKGNtLCBjbS5nZXRDdXJzb3IoKS5saW5lKTt9fQogIH0pCiAgZm9sZEZ1bmNfaHRtbChlZGl0b3JfaHRtbCwgMSk7CiAgZm9sZEZ1bmNfaHRtbChlZGl0b3JfaHRtbCwgMTUpOwp9Owo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/formatting.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEZvcm1hdHRpbmcgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2Zvcm1hdHRpbmcuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgfQogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRm9ybWF0dGluZyBkZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjxzY3JpcHQ+IGZ1bmN0aW9uIChzLGUpeyBmb3IodmFyIGk9MDsgaSA8IDE7IGkrKykgdGVzdCgidGVzdCgpO2E9MSIpO30gPC9zY3JpcHQ+CjxzY3JpcHQ+CmZ1bmN0aW9uIHRlc3QoYyl7ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspewkgICAgICAgICAgcHJvY2VzcygiYS5iKCk7YyA9IG51bGw7IiwgMzAwKTt9Cn0KPC9zY3JpcHQ+Cjx0YWJsZT48dHI+PHRkPnRlc3QgMTwvdGQ+PC90cj48dHI+PHRkPnRlc3QgMjwvdGQ+PC90cj48L3RhYmxlPgo8c2NyaXB0PiBmdW5jdGlvbiB0ZXN0KCkgeyByZXR1cm4gMTt9IDwvc2NyaXB0Pgo8c3R5bGU+IC50ZXN0IHsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KPC9zdHlsZT48L3RleHRhcmVhPjwvZm9ybT4KCjxwPlNlbGVjdCBhIHBpZWNlIG9mIGNvZGUgYW5kIGNsaWNrIG9uZSBvZiB0aGUgbGlua3MgYmVsb3cgdG8gYXBwbHkgYXV0b21hdGljIGZvcm1hdHRpbmcgdG8gdGhlIHNlbGVjdGVkIHRleHQgb3IgY29tbWVudC91bmNvbW1lbnQgdGhlIHNlbGVjdGVkIHRleHQuIE5vdGUgdGhhdCB0aGUgZm9ybWF0dGluZyBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGJsb2NrJ3MgbW9kZS4KICAgIDx0YWJsZT4KICAgICAgPHRyPgogICAgICAgIDx0ZD4KICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YXV0b0Zvcm1hdFNlbGVjdGlvbigpIj4KICAgICAgICAgICAgQXV0b2Zvcm1hdCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjb21tZW50U2VsZWN0aW9uKHRydWUpIj4KICAgICAgICAgICAgQ29tbWVudCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjb21tZW50U2VsZWN0aW9uKGZhbHNlKSI+CiAgICAgICAgICAgIFVuY29tbWVudCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgo8L3A+ICAgIAogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiAiaHRtbG1peGVkIgogICAgICB9KTsKICAgICAgQ29kZU1pcnJvci5jb21tYW5kc1sic2VsZWN0QWxsIl0oZWRpdG9yKTsKICAgICAgCiAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkUmFuZ2UoKSB7CiAgICAgICAgcmV0dXJuIHsgZnJvbTogZWRpdG9yLmdldEN1cnNvcih0cnVlKSwgdG86IGVkaXRvci5nZXRDdXJzb3IoZmFsc2UpIH07CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGF1dG9Gb3JtYXRTZWxlY3Rpb24oKSB7CiAgICAgICAgdmFyIHJhbmdlID0gZ2V0U2VsZWN0ZWRSYW5nZSgpOwogICAgICAgIGVkaXRvci5hdXRvRm9ybWF0UmFuZ2UocmFuZ2UuZnJvbSwgcmFuZ2UudG8pOwogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBjb21tZW50U2VsZWN0aW9uKGlzQ29tbWVudCkgewogICAgICAgIHZhciByYW5nZSA9IGdldFNlbGVjdGVkUmFuZ2UoKTsKICAgICAgICBlZGl0b3IuY29tbWVudFJhbmdlKGlzQ29tbWVudCwgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pOwogICAgICB9ICAgICAgCiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/fullscreen.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEZ1bGwgU2NyZWVuIEVkaXRpbmc8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmlnaHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30KICAgICAgICAuQ29kZU1pcnJvci1mdWxsc2NyZWVuIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB6LWluZGV4OiA5OTk5OwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIGJvcmRlcjogMHB4IHNvbGlkICNCQkJCQkI7CiAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRnVsbCBTY3JlZW4gRWRpdGluZzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIiByb3dzPSI1Ij4KICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio4IHNwYWNlcyBzaG91bGQgYmUKICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogIDxkZD5EZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIHRhYiBrZXkuCiAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPiJjbGFzc2ljIiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICBiZWhhdmUgbGlrZSB0aGUgPGNvZGU+InNoaWZ0IjwvY29kZT4gbW9kZS4gKFdoZW4gc2hpZnQgaXMKICAgICAgaGVsZCwgdGhpcyBiZWhhdmVzIGxpa2UgdGhlIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiBtb2RlLik8L2RkPgogICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IGFsbCBzZWxlY3RlZCBsaW5lcyBieQogICAgICBvbmUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4uCiAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICBsaW5lcyBvbmUgdW5pdC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgY29udGV4dC4gT25seSB3b3JrcyBpZiB0aGUKICAgICAgbW9kZSA8YSBocmVmPSIjaW5kZW50Ij5zdXBwb3J0czwvYT4gaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGNhcHR1cmUgdGFiIHByZXNzZXMsIGxldCB0aGUgYnJvd3NlciBhcHBseSBpdHMKICAgICAgZGVmYXVsdCBiZWhhdmlvdXIgKHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgc2tpcHMgdG8gdGhlIG5leHQKICAgICAgY29udHJvbCkuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCjwvdGV4dGFyZWE+PC9mb3JtPgogPHNjcmlwdD4KICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgdGhlbWU6ICJuaWdodCIsCiAgICAgICAgZXh0cmFLZXlzOiB7CiAgICAgICAgICAgICJGMTEiOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YXIgc2Nyb2xsZXIgPSBlZGl0b3IuZ2V0U2Nyb2xsZXJFbGVtZW50KCk7CiAgICAgICAgICAgICAgaWYgKHNjcm9sbGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29kZU1pcnJvci1mdWxsc2NyZWVuXGIvKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgIHNjcm9sbGVyLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3ItZnVsbHNjcmVlbiI7CiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNjcm9sbGVyLmNsYXNzTmFtZSA9IHNjcm9sbGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mdWxsc2NyZWVuIiwgIiIpOwogICAgICAgICAgICAgICAgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gJyc7CiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS53aWR0aCA9ICcnOwogICAgICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJFc2MiOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YXIgc2Nyb2xsZXIgPSBlZGl0b3IuZ2V0U2Nyb2xsZXJFbGVtZW50KCk7CiAgICAgICAgICAgICAgaWYgKHNjcm9sbGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29kZU1pcnJvci1mdWxsc2NyZWVuXGIvKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNjcm9sbGVyLmNsYXNzTmFtZSA9IHNjcm9sbGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mdWxsc2NyZWVuIiwgIiIpOwogICAgICAgICAgICAgICAgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gJyc7CiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS53aWR0aCA9ICcnOwogICAgICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCjwvc2NyaXB0PgoKICAgIDxwPlByZXNzIDxzdHJvbmc+RjExPC9zdHJvbmc+IHdoZW4gY3Vyc29yIGlzIGluIHRoZSBlZGl0b3IgdG8gdG9nZ2xlIGZ1bGwgc2NyZWVuIGVkaXRpbmcuIDxzdHJvbmc+RXNjPC9zdHJvbmc+IGNhbiBhbHNvIGJlIHVzZWQgdG8gPGk+ZXhpdDwvaT4gZnVsbCBzY3JlZW4gZWRpdGluZy48L3A+CgogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBEb2VzIG5vdCBjdXJyZW50bHkgd29yayBjb3JyZWN0bHkgaW4gSUUKICAgIDYgYW5kIDcsIHdoZXJlIHNldHRpbmcgdGhlIGhlaWdodCBvZiBzb21ldGhpbmcKICAgIHRvIDxjb2RlPjEwMCU8L2NvZGU+IGRvZXNuJ3QgbWFrZSBpdCBmdWxsIHNjcmVlbi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/loadmode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IExhenkgTW9kZSBMb2FkaW5nIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9sb2FkbW9kZS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IExhenkgTW9kZSBMb2FkaW5nPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPlRoaXMgaXMgdGhlIGVkaXRvci4KLy8gSXQgc3RhcnRzIG91dCBpbiBwbGFpbiB0ZXh0IG1vZGUsCiMgIHVzZSB0aGUgY29udHJvbCBiZWxvdyB0byBsb2FkIGFuZCBhcHBseSBhIG1vZGUKICAieW91J2xsIHNlZSB0aGUgaGlnaGxpZ2h0aW5nIG9mIiB0aGlzIHRleHQgLypjaGFuZ2UqLy4KPC90ZXh0YXJlYT48L2Zvcm0+CjxwPjxpbnB1dCB0eXBlPXRleHQgdmFsdWU9amF2YXNjcmlwdCBpZD1tb2RlPiA8YnV0dG9uIHR5cGU9YnV0dG9uIG9uY2xpY2s9ImNoYW5nZSgpIj5jaGFuZ2UgbW9kZTwvYnV0dG9uPjwvcD4KCiAgICA8c2NyaXB0PgpDb2RlTWlycm9yLm1vZGVVUkwgPSAiLi4vbW9kZS8lTi8lTi5qcyI7CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgbGluZU51bWJlcnM6IHRydWUKfSk7CnZhciBtb2RlSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9kZSIpOwpDb2RlTWlycm9yLmNvbm5lY3QobW9kZUlucHV0LCAia2V5cHJlc3MiLCBmdW5jdGlvbihlKSB7CiAgaWYgKGUua2V5Q29kZSA9PSAxMykgY2hhbmdlKCk7Cn0pOwpmdW5jdGlvbiBjaGFuZ2UoKSB7CiAgIGVkaXRvci5zZXRPcHRpb24oIm1vZGUiLCBtb2RlSW5wdXQudmFsdWUpOwogICBDb2RlTWlycm9yLmF1dG9Mb2FkTW9kZShlZGl0b3IsIG1vZGVJbnB1dC52YWx1ZSk7Cn0KPC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/marker.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEJyZWFrcG9pbnQgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvci1ndXR0ZXIgewogICAgICAgIHdpZHRoOiAzZW07CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEJyZWFrcG9pbnQgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogIGxpbmVOdW1iZXJzOiB0cnVlLAogIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICBlbHNlCiAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgfQp9KTsKPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5DbGljayB0aGUgbGluZS1udW1iZXIgZ3V0dGVyIHRvIGFkZCBvciByZW1vdmUgJ2JyZWFrcG9pbnRzJy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICAgICAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgICAgICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgICAgICAgfQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/matchhighlighter.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1hdGNoIEhpZ2hsaWdodGVyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9zZWFyY2hjdXJzb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL21hdGNoLWhpZ2hsaWdodGVyLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQoJICAKICAgICAgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaGlnaGxpZ2h0IHsgYmFja2dyb3VuZDogI2U5ZTllOSB9CiAgICAgIC5Db2RlTWlycm9yLWZvY3VzZWQgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaGlnaGxpZ2h0IHsgYmFja2dyb3VuZDogI2U3ZTRmZjsgIWltcG9ydGFudCB9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNYXRjaCBIaWdobGlnaHRlciBEZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPlNlbGVjdCB0aGlzIHRleHQ6IGhhcmRUb1Nwb3RWYXIKCUFuZCBldmVyeXdoZXJlIGVsc2UgaW4geW91ciBjb2RlIHdoZXJlIGhhcmRUb1Nwb3RWYXIgYXBwZWFycyB3aWxsIGF1dG9tYXRpY2FsbHkgaWxsdW1pbmF0ZS4KR2l2ZSBpdCBhIHRyeSEgIE5vIG1vcmUgaGFyZFRvU3BvdFZhcnMuPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICBsaW5lTnVtYmVycyA6IHRydWUsCiAgb25DdXJzb3JBY3Rpdml0eTogZnVuY3Rpb24oKSB7CiAgICBlZGl0b3IubWF0Y2hIaWdobGlnaHQoIkNvZGVNaXJyb3ItbWF0Y2hoaWdobGlnaHQiKTsKICB9Cn0pOwo8L3NjcmlwdD4KCiAgICA8cD5IaWdobGlnaHQgbWF0Y2hlcyBvZiBzZWxlY3RlZCB0ZXh0IG9uIHNlbGVjdDwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/multiplex.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE11bHRpcGxleGluZyBQYXJzZXIgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL211bHRpcGxleC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7fQogICAgICAuY20tZGVsaW1pdCB7Y29sb3I6ICNmYTQ7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTXVsdGlwbGV4aW5nIFBhcnNlciBEZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8aHRtbD4KICA8Ym9keT4KICAgIDxoMT48PCB0aGlzIGlzIG5vdCA8aHRtbCA+PjwvaDE+CiAgICA8PAogICAgICAgIG11bHRpbGluZQogICAgICAgIG5vdCBodG1sCiAgICAgICAgYXQgYWxsIDogJmFtcDthbXA7IDxsaW5rLz4KICAgID4+CiAgICA8cD50aGlzIGlzIGh0bWwgYWdhaW48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+CjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgiZGVtbyIsIGZ1bmN0aW9uKGNvbmZpZykgewogIHJldHVybiBDb2RlTWlycm9yLm11bHRpcGxleGluZ01vZGUoCiAgICBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAidGV4dC9odG1sIiksCiAgICB7b3BlbjogIjw8IiwgY2xvc2U6ICI+PiIsCiAgICAgbW9kZTogQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgInRleHQvcGxhaW4iKSwKICAgICBkZWxpbVN0eWxlOiAiZGVsaW1pdCJ9CiAgICAvLyAuLiBtb3JlIG11bHRpcGxleGVkIHN0eWxlcyBjYW4gZm9sbG93IGhlcmUKICApOwp9KTsKdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICBtb2RlOiAiZGVtbyIsCiAgbGluZU51bWJlcnM6IHRydWUsCiAgbGluZVdyYXBwaW5nOiB0cnVlCn0pOwo8L3NjcmlwdD4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIGEgbXVsdGlwbGV4aW5nIG1vZGUsIHdoaWNoLCBhdCBjZXJ0YWluCiAgICBib3VuZGFyeSBzdHJpbmdzLCBzd2l0Y2hlcyB0byBvbmUgb3IgbW9yZSBpbm5lciBtb2Rlcy4gVGhlIG91dAogICAgKEhUTUwpIG1vZGUgZG9lcyBub3QgZ2V0IGZlZCB0aGUgY29udGVudCBvZiB0aGUgPGNvZGU+Jmx0OyZsdDsKICAgID4+PC9jb2RlPiBibG9ja3MuIFNlZQogICAgdGhlIDxhIGhyZWY9Ii4uL2RvYy9tYW51YWwuaHRtbCN1dGlsX211bHRpcGxleCI+bWFudWFsPC9hPiBhbmQKICAgIHRoZSA8YSBocmVmPSIuLi9saWIvdXRpbC9tdWx0aXBsZXguanMiPnNvdXJjZTwvYT4gZm9yIG1vcmUKICAgIGluZm9ybWF0aW9uLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/mustache.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE92ZXJsYXkgUGFyc2VyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9vdmVybGF5LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5jbS1tdXN0YWNoZSB7Y29sb3I6ICMwY2E7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogT3ZlcmxheSBQYXJzZXIgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPGh0bWw+CiAgPGJvZHk+CiAgICA8aDE+e3t0aXRsZX19PC9oMT4KICAgIDxwPlRoZXNlIGFyZSBsaW5rcyB0byB7e3RoaW5nc319OjwvcD4KICAgIDx1bD57eyNsaW5rc319CiAgICAgIDxsaT48YSBocmVmPSJ7e3VybH19Ij57e3RleHR9fTwvYT48L2xpPgogICAge3svbGlua3N9fTwvdWw+CiAgPC9ib2R5Pgo8L2h0bWw+CjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibXVzdGFjaGUiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtdXN0YWNoZU92ZXJsYXkgPSB7CiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY2g7CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goInt7IikpIHsKICAgICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkKICAgICAgICAgIGlmIChjaCA9PSAifSIgJiYgc3RyZWFtLm5leHQoKSA9PSAifSIpIGJyZWFrOwogICAgICAgIHJldHVybiAibXVzdGFjaGUiOwogICAgICB9CiAgICAgIHdoaWxlIChzdHJlYW0ubmV4dCgpICE9IG51bGwgJiYgIXN0cmVhbS5tYXRjaCgie3siLCBmYWxzZSkpIHt9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07CiAgcmV0dXJuIENvZGVNaXJyb3Iub3ZlcmxheU1vZGUoQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLmJhY2tkcm9wIHx8ICJ0ZXh0L2h0bWwiKSwgbXVzdGFjaGVPdmVybGF5KTsKfSk7CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZTogIm11c3RhY2hlIn0pOwo8L3NjcmlwdD4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIGEgbW9kZSB0aGF0IHBhcnNlcyBIVE1MLCBoaWdobGlnaHRpbmcKICAgIHRoZSA8YSBocmVmPSJodHRwOi8vbXVzdGFjaGUuZ2l0aHViLmNvbS8iPk11c3RhY2hlPC9hPiB0ZW1wbGF0aW5nCiAgICBkaXJlY3RpdmVzIGluc2lkZSBvZiBpdCBieSB1c2luZyB0aGUgY29kZQogICAgaW4gPGEgaHJlZj0iLi4vbGliL3V0aWwvb3ZlcmxheS5qcyI+PGNvZGU+b3ZlcmxheS5qczwvY29kZT48L2E+LiBWaWV3CiAgICBzb3VyY2UgdG8gc2VlIHRoZSAxNSBsaW5lcyBvZiBjb2RlIG5lZWRlZCB0byBhY2NvbXBsaXNoIHRoaXMuPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/preview.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhUTUw1IHByZXZpZXc8L3RpdGxlPgogICAgPG1ldGEgY2hhcnNldD11dGYtOD4KICAgIDxzY3JpcHQgc3JjPS4uL2xpYi9jb2RlbWlycm9yLmpzPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Li4vbW9kZS94bWwveG1sLmpzPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Li4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2Nzcy9jc3MuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanM+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9c3R5bGVzaGVldCBocmVmPS4uL2xpYi9jb2RlbWlycm9yLmNzcz4KICAgIDxsaW5rIHJlbD1zdHlsZXNoZWV0IGhyZWY9Li4vZG9jL2RvY3MuY3NzPgogICAgPHN0eWxlIHR5cGU9dGV4dC9jc3M+CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICB9CiAgICAgIGlmcmFtZSB7CiAgICAgICAgd2lkdGg6IDQ5JTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgIGJvcmRlci1sZWZ0OiAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEhUTUw1IHByZXZpZXc8L2gxPgogICAgPHRleHRhcmVhIGlkPWNvZGUgbmFtZT1jb2RlPgo8IWRvY3R5cGUgaHRtbD4KPGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PXV0Zi04PgogICAgPHRpdGxlPkhUTUw1IGNhbnZhcyBkZW1vPC90aXRsZT4KICAgIDxzdHlsZT5wIHtmb250LWZhbWlseTogbW9ub3NwYWNlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxwPkNhbnZhcyBwYW5lIGdvZXMgaGVyZTo8L3A+CiAgICA8Y2FudmFzIGlkPXBhbmUgd2lkdGg9MzAwIGhlaWdodD0yMDA+PC9jYW52YXM+CiAgICA8c2NyaXB0PgogICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbmUnKTsKICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKCiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYigyNTAsMCwwKSc7CiAgICAgIGNvbnRleHQuZmlsbFJlY3QoMTAsIDEwLCA1NSwgNTApOwoKICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgwLCAwLCAyNTAsIDAuNSknOwogICAgICBjb250ZXh0LmZpbGxSZWN0KDMwLCAzMCwgNTUsIDUwKTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPjwvdGV4dGFyZWE+CiAgICA8aWZyYW1lIGlkPXByZXZpZXc+PC9pZnJhbWU+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZGVsYXk7CiAgICAgIC8vIEluaXRpYWxpemUgQ29kZU1pcnJvciBlZGl0b3Igd2l0aCBhIG5pY2UgaHRtbDUgY2FudmFzIGRlbW8uCiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29kZScpLCB7CiAgICAgICAgbW9kZTogJ3RleHQvaHRtbCcsCiAgICAgICAgdGFiTW9kZTogJ2luZGVudCcsCiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KGRlbGF5KTsKICAgICAgICAgIGRlbGF5ID0gc2V0VGltZW91dCh1cGRhdGVQcmV2aWV3LCAzMDApOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIAogICAgICBmdW5jdGlvbiB1cGRhdGVQcmV2aWV3KCkgewogICAgICAgIHZhciBwcmV2aWV3RnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldmlldycpOwogICAgICAgIHZhciBwcmV2aWV3ID0gIHByZXZpZXdGcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgIHByZXZpZXdGcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OwogICAgICAgIHByZXZpZXcub3BlbigpOwogICAgICAgIHByZXZpZXcud3JpdGUoZWRpdG9yLmdldFZhbHVlKCkpOwogICAgICAgIHByZXZpZXcuY2xvc2UoKTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KHVwZGF0ZVByZXZpZXcsIDMwMCk7CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/resize.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEF1dG9yZXNpemUgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CiAgICAgIH0KICAgICAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEF1dG9yZXNpemUgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBoZWlnaHQ6IGF1dG87CiAgb3ZlcmZsb3cteTogaGlkZGVuOwogIG92ZXJmbG93LXg6IGF1dG87Cn08L3RleHRhcmVhPjwvZm9ybT4KCjxwPkJ5IHNldHRpbmcgYSBmZXcgQ1NTIHByb3BlcnRpZXMsIENvZGVNaXJyb3IgY2FuIGJlIG1hZGUgdG8KYXV0b21hdGljYWxseSByZXNpemUgdG8gZml0IGl0cyBjb250ZW50LjwvcD4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/runmode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1vZGUgUnVubmVyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9ydW5tb2RlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNb2RlIFJ1bm5lciBEZW1vPC9oMT4KCiAgICA8dGV4dGFyZWEgaWQ9ImNvZGUiIHN0eWxlPSJ3aWR0aDogOTAlOyBoZWlnaHQ6IDdlbTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6IC4yZW0gLjRlbTsiPgo8Zm9vYmFyPgogIDxibGFoPkVudGVyIHlvdXIgeG1sIGhlcmUgYW5kIHByZXNzIHRoZSBidXR0b24gYmVsb3cgdG8gZGlzcGxheQogICAgaXQgYXMgaGlnaGxpZ2h0ZWQgYnkgdGhlIENvZGVNaXJyb3IgWE1MIG1vZGU8L2JsYWg+CiAgPHRhZzIgZm9vPSIyIiBiYXI9IiZhbXA7cXVvdDtiYXImYW1wO3F1b3Q7Ii8+CjwvZm9vYmFyPjwvdGV4dGFyZWE+PGJyPgogICAgPGJ1dHRvbiBvbmNsaWNrPSJkb0hpZ2hsaWdodCgpOyI+SGlnaGxpZ2h0ITwvYnV0dG9uPgogICAgPHByZSBpZD0ib3V0cHV0IiBjbGFzcz0iY20tcy1kZWZhdWx0Ij48L3ByZT4KCiAgICA8c2NyaXB0PgpmdW5jdGlvbiBkb0hpZ2hsaWdodCgpIHsKICBDb2RlTWlycm9yLnJ1bk1vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKS52YWx1ZSwgImFwcGxpY2F0aW9uL3htbCIsCiAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXQiKSk7Cn0KPC9zY3JpcHQ+CgogICAgPHA+UnVubmluZyBhIENvZGVNaXJyb3IgbW9kZSBvdXRzaWRlIG9mIHRoZSBlZGl0b3IuCiAgICBUaGUgPGNvZGU+Q29kZU1pcnJvci5ydW5Nb2RlPC9jb2RlPiBmdW5jdGlvbiwgZGVmaW5lZAogICAgaW4gPGNvZGU+PGEgaHJlZj0iLi4vbGliL3V0aWwvcnVubW9kZS5qcyI+bGliL3J1bm1vZGUuanM8L2E+PC9jb2RlPiB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+dGV4dCAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIGRvY3VtZW50IHRvIHJ1biB0aHJvdWdoIHRoZSBoaWdobGlnaHRlci48L2RkPgogICAgICA8ZHQ+PGNvZGU+bW9kZSAoPGEgaHJlZj0iLi4vZG9jL21hbnVhbC5odG1sI29wdGlvbl9tb2RlIj5tb2RlIHNwZWM8L2E+KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1vZGUgdG8gdXNlIChtdXN0IGJlIGxvYWRlZCBhcyBub3JtYWwpLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5vdXRwdXQgKGZ1bmN0aW9uIG9yIERPTSBub2RlKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SWYgdGhpcyBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCB0b2tlbiB3aXRoCiAgICAgIHR3byBhcmd1bWVudHMsIHRoZSB0b2tlbidzIHRleHQgYW5kIHRoZSB0b2tlbidzIHN0eWxlIGNsYXNzIChtYXkKICAgICAgYmUgPGNvZGU+bnVsbDwvY29kZT4gZm9yIHVuc3R5bGVkIHRva2VucykuIElmIGl0IGlzIGEgRE9NIG5vZGUsCiAgICAgIHRoZSB0b2tlbnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gPGNvZGU+c3BhbjwvY29kZT4gZWxlbWVudHMgYXMgaW4KICAgICAgYW4gZWRpdG9yLCBhbmQgaW5zZXJ0ZWQgaW50byB0aGUgbm9kZQogICAgICAodGhyb3VnaCA8Y29kZT5pbm5lckhUTUw8L2NvZGU+KS48L2RkPgogICAgPC9kbD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/search.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNlYXJjaC9SZXBsYWNlIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2RpYWxvZy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi91dGlsL2RpYWxvZy5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL3NlYXJjaGN1cnNvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvc2VhcmNoLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICBkdCB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6ICM2NjY7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogU2VhcmNoL1JlcGxhY2UgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio4IHNwYWNlcyBzaG91bGQgYmUKICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogIDxkZD5EZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIHRhYiBrZXkuCiAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPiJjbGFzc2ljIiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICBiZWhhdmUgbGlrZSB0aGUgPGNvZGU+InNoaWZ0IjwvY29kZT4gbW9kZS4gKFdoZW4gc2hpZnQgaXMKICAgICAgaGVsZCwgdGhpcyBiZWhhdmVzIGxpa2UgdGhlIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiBtb2RlLik8L2RkPgogICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IGFsbCBzZWxlY3RlZCBsaW5lcyBieQogICAgICBvbmUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4uCiAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICBsaW5lcyBvbmUgdW5pdC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgY29udGV4dC4gT25seSB3b3JrcyBpZiB0aGUKICAgICAgbW9kZSA8YSBocmVmPSIjaW5kZW50Ij5zdXBwb3J0czwvYT4gaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGNhcHR1cmUgdGFiIHByZXNzZXMsIGxldCB0aGUgYnJvd3NlciBhcHBseSBpdHMKICAgICAgZGVmYXVsdCBiZWhhdmlvdXIgKHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgc2tpcHMgdG8gdGhlIG5leHQKICAgICAgY29udHJvbCkuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHttb2RlOiAidGV4dC9odG1sIiwgbGluZU51bWJlcnM6IHRydWV9KTsKPC9zY3JpcHQ+CgogICAgPHA+RGVtb25zdHJhdGlvbiBvZiBwcmltaXRpdmUgc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eS4gVGhlCiAgICBrZXliaW5kaW5ncyAod2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkgY3VzdG9tIGtleW1hcHMpIGFyZTo8L3A+CiAgICA8ZGw+CiAgICAgIDxkdD5DdHJsLUYgLyBDbWQtRjwvZHQ+PGRkPlN0YXJ0IHNlYXJjaGluZzwvZGQ+CiAgICAgIDxkdD5DdHJsLUcgLyBDbWQtRzwvZHQ+PGRkPkZpbmQgbmV4dDwvZGQ+CiAgICAgIDxkdD5TaGlmdC1DdHJsLUcgLyBTaGlmdC1DbWQtRzwvZHQ+PGRkPkZpbmQgcHJldmlvdXM8L2RkPgogICAgICA8ZHQ+U2hpZnQtQ3RybC1GIC8gQ21kLU9wdGlvbi1GPC9kdD48ZGQ+UmVwbGFjZTwvZGQ+CiAgICAgIDxkdD5TaGlmdC1DdHJsLVIgLyBTaGlmdC1DbWQtT3B0aW9uLUY8L2R0PjxkZD5SZXBsYWNlIGFsbDwvZGQ+CiAgICA8L2RsPgogICAgPHA+U2VhcmNoaW5nIGlzIGVuYWJsZWQgYnkKICAgIGluY2x1ZGluZyA8YSBocmVmPSIuLi9saWIvdXRpbC9zZWFyY2guanMiPmxpYi91dGlsL3NlYXJjaC5qczwvYT4uCiAgICBGb3IgZ29vZC1sb29raW5nIGlucHV0IGRpYWxvZ3MsIHlvdSBhbHNvIHdhbnQgdG8gaW5jbHVkZQogICAgPGEgaHJlZj0iLi4vbGliL3V0aWwvZGlhbG9nLmpzIj5saWIvdXRpbC9kaWFsb2cuanM8L2E+CiAgICBhbmQgPGEgaHJlZj0iLi4vbGliL3V0aWwvZGlhbG9nLmNzcyI+bGliL3V0aWwvZGlhbG9nLmNzczwvYT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/theme.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRoZW1lIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmVhdC5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL2VybGFuZy1kYXJrLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL21vbm9rYWkuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvY29iYWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL2VjbGlwc2UuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvcnVieWJsdWUuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbGVzc2VyLWRhcmsuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUveHEtZGFyay5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9hbWJpYW5jZS5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9ibGFja2JvYXJkLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL3ZpYnJhbnQtaW5rLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazsgZm9udC1zaXplOjEzcHh9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBUaGVtZSBkZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgpmdW5jdGlvbiBmaW5kU2VxdWVuY2UoZ29hbCkgewogIGZ1bmN0aW9uIGZpbmQoc3RhcnQsIGhpc3RvcnkpIHsKICAgIGlmIChzdGFydCA9PSBnb2FsKQogICAgICByZXR1cm4gaGlzdG9yeTsKICAgIGVsc2UgaWYgKHN0YXJ0ID4gZ29hbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBlbHNlCiAgICAgIHJldHVybiBmaW5kKHN0YXJ0ICsgNSwgIigiICsgaGlzdG9yeSArICIgKyA1KSIpIHx8CiAgICAgICAgICAgICBmaW5kKHN0YXJ0ICogMywgIigiICsgaGlzdG9yeSArICIgKiAzKSIpOwogIH0KICByZXR1cm4gZmluZCgxLCAiMSIpOwp9PC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5TZWxlY3QgYSB0aGVtZTogPHNlbGVjdCBvbmNoYW5nZT0ic2VsZWN0VGhlbWUoKSIgaWQ9c2VsZWN0PgogICAgPG9wdGlvbiBzZWxlY3RlZD5kZWZhdWx0PC9vcHRpb24+CiAgICA8b3B0aW9uPmFtYmlhbmNlPC9vcHRpb24+CiAgICA8b3B0aW9uPmJsYWNrYm9hcmQ8L29wdGlvbj4KICAgIDxvcHRpb24+Y29iYWx0PC9vcHRpb24+CiAgICA8b3B0aW9uPmVjbGlwc2U8L29wdGlvbj4KICAgIDxvcHRpb24+ZWxlZ2FudDwvb3B0aW9uPgogICAgPG9wdGlvbj5lcmxhbmctZGFyazwvb3B0aW9uPgogICAgPG9wdGlvbj5sZXNzZXItZGFyazwvb3B0aW9uPgogICAgPG9wdGlvbj5tb25va2FpPC9vcHRpb24+CiAgICA8b3B0aW9uPm5lYXQ8L29wdGlvbj4KICAgIDxvcHRpb24+bmlnaHQ8L29wdGlvbj4KICAgIDxvcHRpb24+cnVieWJsdWU8L29wdGlvbj4KICAgIDxvcHRpb24+dmlicmFudC1pbms8L29wdGlvbj4KICAgIDxvcHRpb24+eHEtZGFyazwvb3B0aW9uPgo8L3NlbGVjdD4KPC9wPgoKPHNjcmlwdD4KICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgbGluZU51bWJlcnM6IHRydWUKICB9KTsKICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZWN0Iik7CiAgZnVuY3Rpb24gc2VsZWN0VGhlbWUoKSB7CiAgICB2YXIgdGhlbWUgPSBpbnB1dC5vcHRpb25zW2lucHV0LnNlbGVjdGVkSW5kZXhdLmlubmVySFRNTDsKICAgIGVkaXRvci5zZXRPcHRpb24oInRoZW1lIiwgdGhlbWUpOwogIH0KICB2YXIgY2hvaWNlID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoICYmIGRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKTsKICBpZiAoY2hvaWNlKSB7CiAgICBpbnB1dC52YWx1ZSA9IGNob2ljZTsKICAgIGVkaXRvci5zZXRPcHRpb24oInRoZW1lIiwgY2hvaWNlKTsKICB9Cjwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/vim.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZpbSBiaW5kaW5ncyBkZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4va2V5bWFwL3ZpbS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWaW0gYmluZGluZ3MgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KI2luY2x1ZGUgInN5c2NhbGxzLmgiCi8qIGdldGNoYXI6ICBzaW1wbGUgYnVmZmVyZWQgdmVyc2lvbiAqLwppbnQgZ2V0Y2hhcih2b2lkKQp7CiAgc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CiAgc3RhdGljIGNoYXIgKmJ1ZnAgPSBidWY7CiAgc3RhdGljIGludCBuID0gMDsKICBpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KICAgIG4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CiAgICBidWZwID0gYnVmOwogIH0KICByZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGhlIHZpbSBrZXliaW5kaW5ncyBhcmUgZW5hYmxlZCBieQppbmNsdWRpbmcgPGEgaHJlZj0iLi4va2V5bWFwL3ZpbS5qcyI+a2V5bWFwL3ZpbS5qczwvYT4gYW5kIHNldHRpbmcKdGhlIDxjb2RlPmtleU1hcDwvY29kZT4gb3B0aW9uIHRvIDxjb2RlPiJ2aW0iPC9jb2RlPi4gQmVjYXVzZQpDb2RlTWlycm9yJ3MgaW50ZXJuYWwgQVBJIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIFZpbSwgdGhleSBhcmUgb25seQphIGxvb3NlIGFwcHJveGltYXRpb24gb2YgYWN0dWFsIHZpbSBiaW5kaW5ncywgdGhvdWdoLjwvcD4KCiAgICA8c2NyaXB0PgogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUgPSBmdW5jdGlvbigpeyBhbGVydCgiU2F2aW5nIik7IH07CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1jc3JjIiwKICAgICAgICBrZXlNYXA6ICJ2aW0iCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/visibletabs.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZpc2libGUgdGFicyBkZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTt9CiAgICAgIC5jbS10YWI6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICJcMjFlNSI7CiAgICAgICAgZGlzcGxheTogLW1vei1pbmxpbmUtYmxvY2s7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYmxvY2s7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxlZnQ6IC0xLjRlbTsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVmlzaWJsZSB0YWJzIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiNpbmNsdWRlICJzeXNjYWxscy5oIgovKiBnZXRjaGFyOiAgc2ltcGxlIGJ1ZmZlcmVkIHZlcnNpb24gKi8KaW50IGdldGNoYXIodm9pZCkKewoJc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CglzdGF0aWMgY2hhciAqYnVmcCA9IGJ1ZjsKCXN0YXRpYyBpbnQgbiA9IDA7CglpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KCQluID0gcmVhZCgwLCBidWYsIHNpemVvZiBidWYpOwoJCWJ1ZnAgPSBidWY7Cgl9CglyZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGFicyBpbnNpZGUgdGhlIGVkaXRvciBhcmUgc3BhbnMgd2l0aCB0aGUKY2xhc3MgPGNvZGU+Y20tdGFiPC9jb2RlPiwgYW5kIGNhbiBiZSBzdHlsZWQuIFRoaXMgZGVtbyB1c2VzCmFuIDxjb2RlPjphZnRlcjwvY29kZT4gcHNldWRvLWNsYXNzIENTUyBoYWNrIHRoYXQgd2lsbCBub3Qgd29yayBvbiBvbGQKYnJvd3NlcnMuIFlvdSBjYW4gdXNlIGEgbW9yZSBjb25zZXJ2YXRpdmUgdGVjaG5pcXVlIGxpa2UgYSBiYWNrZ3JvdW5kCmltYWdlIGFzIGFuIGFsdGVybmF0aXZlLjwvcD4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIHRhYlNpemU6IDQsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBpbmRlbnRXaXRoVGFiczogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/doc/baboon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAXsAAADcCAYAAACRUAHpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADVAAAA1QBkANg0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7J13fBRV18d/d9MTkpBASKEkQCKhBpBAhFAEjKAgJXREelFRAUUExcKj74M8gkp/lEeKSBdQIkWQEjpSAgKhh04CIY20TbI57x+TXbJkd2dmd3Znk8z38zkSd285M3Pv2Tvn3nsuIyIoGIcxxgBUA+ALoKoZ0pyIrthecwUFBYWnOMqtgJwwxtwB1AQQVPLvs3/XBBAIwNmCapoCUIy9goKCrFRoY88YcwQQCqBhiYRB36BXtYEaTQH8aoN6FBQUFIxSIYw9Y8wDQAM8NepaCQXgJKNqANBE5voVSsEYqw7gZQBRRPSO3PooKNiKcmXsGWO+ABqhrFGvA4DJqJopmsqtQGWmZM7leQCvlEgkABWAI3LqpaBga+za2DPG/AF0BNCpRBrKqY+ZhDLG3IgoT25FKguMsaoAYsAZ924A/A0ku2xTpRQUZMaujD1jLAD6xj1cTn0kQgXubeSU3IpUZBhjEXg6en8BgANPFsXYK1QqZDX2jLFA6Bv3BnLqYy4uLi5Qq9WmkjSFYuwlhTHmBaArOOPeHdykuxgUY69QqbCpsS9xy3TGU+P+nC3rtxRfX1+0aNECnTp1QqtWrfDcc88hMDAQjo6OCA4OxoMHD4xlVfz2EsAYawzOsL8CIBqWTb5flUQpBYVygtWNPWOsDoC+AGIBtAXn1rBr/P39ERkZiY4dO6Jly5YICwtDjRo14OLiYjRPy5Yt8ccffxj7WjH2ZlCyyqoznrpn6khY/AnG2GkAx7VCRLclLF9Bwa6wirFnjIWCM+6x4FY/2CW1a9dGVFQUOnTogObNm6N+/fqoXr06nJzEDxg7depkytgryy9FwBjzBDAfwGAAxn9hLcMd3NtBdKl6kwGcwNMfgL+JKMtK9Sso2BTJjD1jrAk4494XQDOpyrUUlUqFkJAQREdHIzo6GhEREQgJCUG1atXg4MA3hyecli1bmvo6kDFWjYgeS1ZhBYUx1hLAOnAb4GxNAIDXSgQAiDF2CU+N/wkA54ioSAbdFBQsglkSG4cx9jyejuBl9b87OjoiLCwMHTp0QNu2bdG0aVPUqVMHPj4+UKnEeY6Kiopw7do1/PPPP7hw4QIuXryIwsJCzJ07F/Xq1TOY586dO6hTx6SX4UUi2i9KkUoGY+xdAP+BZeEprE0eAK375wQ4989NWTVSUBCAaGPPGAsHMBLAQADB1lCKj+DgYLz22mto164dGjdujNq1a8PLywvc/hnhqNVqXLlyRWfQL168iNzcXDRv3hxBQUHIyclBRkaGTlQqFWbPno3atWuXKaugoMCkTx/Au0S0QNyVVg5KNsstx9MRdXkjBcB4IvpNbkUUFIwhyNiXLHMbCM7Iv2BtpUqjUqnQokULDBo0CF27dkWDBg3g5uYmqoz8/HxcvnxZz6hfuHAB169fh0ajKZPe2dkZUVFReOmllzBmzBgEBAQIqsfPzw+pqanGvv6RiMaJUrwSwBiLBrAGQNlf0PLBbQBjiGi33IooKJjCqLEv2WbeCcAocH54d1so5O7ujhdffBEDBgxAdHQ0goODBfvW8/LykJiYqGfQL168iBs3bqC4uNgsfVxcXPD666/jgw8+QHi46T1eXbt2xV9//WXs62NEZNMfSnuGMaYCMB3AF+DfAGWPEIAfAEwloidyK6OgwEcZY88YCwYwAsBwAHWtrYC/vz969eqFXr16oVWrVvD29oazszOvS+bq1as4duwYLly4oDPqN2/eNNuo88EYw+uvv44FCxbA29vbYJp//etf+PTTT40V8QSAN8l4gECJgd0EoI9cOlQg1ADqEpHRzRUKCvYEIyIwxtzAjd5HglvXbLWgYg0bNsSAAQPQpUsXBAcHw8fHB56enibzFBUVISEhAYcOHdJJSkqKtVQ0SUhICFavXo127dqV+W7nzp3o3r27qex15Z7MK3nW+wG0llOPCsI8InpfbiUUFITAACwAMAyA4eGqBTg7O+OFF17Aq6++imbNmqFOnTqoU6cOPDw8TObLycnBsWPHdIb92LFjyM7Ollo9XhhjOtdNeno60tPToVar4eDggI8//hgzZ86Eo+PT1as3btxA/fr1TRX5GhFts67W/DDGagA4Bhu8uVVwcgCEEJHRiRoFBXvBEUAEJDL03t7eiIqKQnR0NBo1aoSwsDA0aNAAzs6mV9I9fPhQb9R+5swZFBXJv5Q5NDQUn3/+Ofr3769zK+Xm5iI9PR1paWlIS0tDjRo1dOkDAwP5imwKQHZjD24XsxKF03I8AEwG8LHciigo8MEAfApukkw0fn5+iIyMRIsWLdCoUSM8//zzaNCAP5bZ1atX9Yz7lSvCT+1zdHSEv78/cnNzkZ2djcLCQnNUF0Xnzp2xfPlyvnX0AICqVasiMzPT2NfriGiwpMqJpCR8xV/gDnZRsJwsAMFElCG3IgoKpmAA2gE4xJdQpVLBz88PERERaNasGV544QW0a9cO/v6GQoU/xRJ/u6+vL2JiYtCoUSM0atQIDRs2RFhYmF44g4KCAmRnZyMzMxMXL17EmTNnkJCQgISEBNy4cQNSzYd6eXlh3rx5GD16tMl00dHROHz4sLGvLxCRbKETSsJY/AVpY8woAJ8S0b/kVkJBgQ9HcKMTMiVfffUV5eTkEB/Z2dm0Z88e+vzzz6lr165UpUoVk+UakqioKFq5ciXl5eXx1meKzMxM2rFjB40ePZqqVasmWg9D0rdvXyooKDBa58cff2wqfyEAZyKCrQVAYwAPpLgHipSRVABV5HiuiigiVLj/cH5kkw168uTJZIiUlBT69ddfafLkyRQZGUmOjo5md5ohQ4ZQQkKCwXospbCwkHbt2kVjxowhX19fizr3oEGDSKPRGKxn69atfPmbGXsY1hJwx/Kl2oFRrMjyga2fqyKKiBHuP8B7fI05IiKCtOTl5dGoUaPoueeek6SjhISE0M6dO8lWZGZm0qRJkyz6YXrzzTcNln358mW+vEPIlg+Yc9Nl2IExrOjyAICrLZ+tIoqIEe4/XAhek42ZMUapqamkJTg42OIOolKp6L333qPs7GySg3/++Yc6duxotv4zZ84sU2Z2djZfvn+TrR4u0AVAth0YwsoiEw08AwcAL4ML2fwVgIng9rREgYstJYtbT5HKJ0//EODP3bhxI2kZMWKERR3D0dGRVq9eTfbA5MmTzb6O77//vkx57u7upvLEkS0eLNADQL4dGMDKJLcBOJXc/9YAvgeQLCBfKoBzAHaBCwhX+kfhBSg/CopIIE//AFbzNcrSrouVK1ea3SlcXFxo69atZC/k5eVReHi4Wdfi6OhIiYmJeuW1atXKVJ5bZO2HCgwAUGAHxq8yyq/gjjy0RtnP/ij8H7gfhVg8/VFwsXb7UqR8ytM/uHg4JhtbeHg4abl9+7bZjTYuLo7sjSNHjpBKpTLrel555RW9sqZMmcKXx5us9UC551hkB0ZPEfkkFTaeG1LE/uXpH1yIWd6GdO/ePdISGhoquiF6eHhQcXEx2SNjx441u4Pt2rVLV8769ev50rcjazxM4G0AxXZgbBSRV+4CcLNGG1Ok/IruCCciugOAdyvrvn37dH+/+OKLfMnLkJubi5ycHNH5bMGnn37KdwCJUebOnav7u3HjxnzJJT+AnDE2DcBCWDGInUK5YRYRKeEwFPR49ry+PXwZ9u7dq/vbHGNPRDh79qzofLagVq1aePPNNwWnDwsLQ1gYd1Tq3r17UVBQAAAGT7J6Bkl30TLGOgKYLWWZClw4kKpVq8qthliuAvhJbiUU7A+bG3sA+P33383KZwtmzJiBKlWqCEqrVqvxzz//4IcffkBAQAD++ecfAICnpydf8DepR/ZyHM5doXBxcUFUVBTee+89TJs2Df3794erqysyMspdyJuZpByIrmCI0j4dAFUBaMDjE7xx4wZpMWcVS/369cme4Ql5oCe///47EXErekqvymnSpImpfGkkoS8OXCA7uf3E5Urq1atHQ4YMoe+//56OHz9OiYmJ9OWXX1KjRo1k180C0R6QI7t/WBH7k7IfACf4GtWyZctIy1tvvWVWwzxz5gzZK+np6eTt7S3oOp5diaPlzTff5Mtbk6R6iNxru9yGxm7F29ubunbtSp988glt27aNHj58SEREycnJNH/+fIqKipJdRwnlBABfqdqWIhVHyn7Ard012aCGDBlCWjZu3GhWo/z444/JnpkxY4ag63BycqLMzMwy+X/++We+vN1IqocI7LYDI2MX4uDgQBERETRu3Dj66aef6MKFC3qrvzIzM2nFihUUExNDDg4OsutrJTkHwF+q9qVIxRBDZ9B2BhcG1yiBgYG4f/8+ACA1NRU1atTAs+XwERYWJiqOva1JTU1FcHAwcnNzedOuX78eAwYM0PssISEBLVq0MJXtQyL6j2VacjDGLgHgP0hAZlQqFVxcXKwirq6uqFWrFlq1aqV3ElpmZiYOHz6M+Ph4xMfH4+TJkzY5A8EOuAKgK3Gr7BQUDBp7FwDpANxMZbx48SIaNmwIAGjWrJluclIMe/bsQZcuXUTnE8uDBw+wf/9+HDhwAAcPHsSTJ0/g7OysMxTjxo3DhAkTyuSbMmUKvv32W97yhw4ditWrV+t9lp6eDl9fX1PZfiaiN0ReikEYYzkA3KUoy1xatGiB+fPnw9PT06AhdnFx0TvC0Vo8fPgQBw8eRHx8PA4ePIizZ89a7RD6csAtAF2I6LrciijIT5neR0RqxthhAF1NZdy7d6/O2L/44otmGfuFCxda3dgvWbIEb731lsk0R48eNWjsP/jgAyxevBhqtdpk/v3795f5rGrVqnBwcIBGozGWTZLll4yxapDZ0L/22mtYs2YNPDw8MG/ePKSnp0Oj0aC4uNjgv6a+syRNVlYWrl27JuetsDeCARxkjHUlootyK6MgM4Z8OwCmgccv2LdvX9IiIIa7Uf/qrVu3SEqK1foHi/z1119l6g0JCaEWLVpQ27ZtqWvXribnDyZMmCDoWkpHBNXCEwI6H4ADWeiHA9DcnHsvlbz//vt6sf0jIiLk9lcrUlYeAWhpaVtTpHyL4Q+5wy5MNiBfX1/dxFdaWprZcWWmT59OQsnMzKRDhw7R4sWLae7cuWW+f7JiPd2p1ZIKzl/SfZaRkUFeXl7Uq1cvWrJkCSUlJQmuj4goKSlJUNz7v/76q0xeAZFBww3dfzECoKccBsTR0ZF++OGHMtccExMjt2FTxLBkwEphOhQpH2L4Q26z1WO+BnT69GnS0rJlS7MaoZ+fH+Xn55MxMjMzacqUKRQSEqKXz8nJiTIyMoiIqDgvn1LfnkFJCKQkBNJt/2ZUcPGKrozCwkKj5QshNjaW9zrmzZtXJt+yZcv48vUX8pBMCYC3bG04qlatSnFxcXT9+nU6dOgQHTlyRHfNw4YNk9uoKWJcssFN2spueBSxvTy7gxYAQETFAPYZ+q40UuymffToETZs2GDwuzVr1iA8PBzz5s3DzZs39b4rLCzEjh07AAD5B4/jyaLluu80KY/waMhTP72lE4Nt2rThTXP+/PkynzVr1owvmxQ7aXljM0hNdnY2evTogfr16+Odd95BnTrc+eXHjx/Htm3bbK2OgnA8AMQxxnrKrYiC7TFo7EsQFTqhc+fOZiuhNdpaLl68iBdffBFDhw7FgwcP9L6rXbs2JkyYgLi4OPTq1QsA4BQeWqbMgoQLKLp9z2ydStO8eXPeNHfulF3hFhISwpetXBr7oiJuN37Pnj1x8OBB1KxZE/v370fXrl3LY3iByoYLgM2MsUFyK6JgY4wN+QGEgue10NPTU+ciycrKMvtM1/79+1Np+vXrVybN6NGj6ezZs2SQ4mK66VFf58bRStbiFQaTHz58mNasWWPSfVSahw8f8l5Do0aNyuQrKioixpipfNcsfTUDcMCce26pvPfee7qJ2e3bt5Orq6vcLgpFxIkGwChL258i5UdMfwnc5Gs0R48eJS1t2rQxq+HFxsZSaXbs2KH7rmbNmrRjxw7i416Ll8oY++RXXi+Tbu7cubqyo6KieMvVEhQUZPIaqlatajBf3bp1+Tqcu7H7L0QA3LClkXBwcKCFCxfqrm/Tpk3k5OQkt+FSxDwpBtDWkvanSPkRU24cgGcnLSCN3/7ZTS8xMTGoU6cOhg8fjvPnz6Nbt268ZRhy5eTvPQTK1Q/rXXrz07Fjx8rMBRiDz5WTkZFhcLdt69atTWVTAeANfm8MxhgDUMvc/GLx9PTEtm3b8PbbbwMAVq1ahYEDB1aWHakVEQZgntxKKNgGPmNvk5DHxI1QnyqlUuHw4cNYsWKF4Hjihow95auR99chvc+GDx+OTz75BN9++y0mTJggJPY8AGF+e20IidK0b9+eL5slfvsAAE4W5BdM7dq1cejQIXTv3h0At1ltxIgRpjaNKZQP2ij++0qCqWE/gBrgOebO1dVV5/vOyckx65X+tddeI7Fol11qyV7/Wxk3ThICKXX8h6LLNsS2bdt4r2P//v1l8h06dIgv37dk5msZgNZi77U58vzzz9P9+/d11zRnzhy53Q+KSCtJUA4qr/BicmRPRA8BmIyDkJ+fj6NHjwIA3N3dBS1TfBYxsUvy8vLQpUsX+Pj4oFOnTsjOzgYAOIUbPr8jN263YB20q0wM0a5dO3BeE+MYGtnXq1ePr2pLRvZWX4nTrVs3xMfHIzAwEADw2Wef4cMPP7R2tQq2JQTAe3IroWBd+Nw4gA1cOWKM/dq1a7F3714QEQ4cOIC1a9cCAJzC6gKqspejuZeMgoQLJsvMzs5G7969sXPnTqNpfHx8eM+WvXev7FJPPz8/k3lgx8Y+IiICGzduhLs7F3pnypQpmDVrljWrrDQ4ODjIrcKzzGCMVZdbCQXrIcTYW32SVoyxZ4whICAA0dHRCAoK0m2YYm6ucKxT02Ce1M1/aN0eZdizZw9atmyJbdu2Yf369Sbrjo6ONvm9oZG9o6MjatY0rFcJNRhjNUwWbByrGfuAgABs27YNVapUQXFxMcaPHy8oAqiCMBo0aCBkIGBLvAF8LrcSClaEz88DbtddAUz4/JycnCg7O5uIuOP5xK65fnadvbkkdxti0G8fH9KSQkNDafTo0TR9+nT69ttv6f/+7/+oRYsWenp4enpSXl6e0fJXr15t8jratWtnMN9rr73Gdw868z0HI89mg5j7LFTc3NzoxIkTRMSFmhg6dKjcPuUKKd988429HaBSCAniNSlinyLUqMTzNZTSa+FffPFFUY1s4sSJJAWPJ31q0NgnIZDCa9cRpMuvv/5qtPybN2/y5r9w4UKZfN988w1fvveEPAcDz+Wo1B2eMUYbN24kIiK1Wk29e/eWrFw7MGZ2JQMHDqSZM2fKrscz8rs5bVER+xchbhzAyn57f39/UemN4dSgvtHvXnbwMPpdaUy5coKDg3mXav7www9lPmvZsiVfteb67auZmc8oX375Jfr164fc3Fz07NkTW7dutbjM6Ohoe/RRy86mTZswaNAghIeHy6kGAfgZgPaAk56MMfPWUCvYNUKNvVX99gEBAbxpHjx4YHK1DAAUhBjfX9T55iNBusTFxSEnJ8fo93x++59//hn5+fl6n4WFGV4pVApzjX04gIbgQiZYzBtvvIEZM2bgyZMn6NatG/7880+LylOpVPj8889x9+5d3mdXGdFoNFiwYAGWLVvGu9JLCFWqVDEnGwPwGxGFgpsDGgagkcXKKNgfQob/4E60yoKJ1z+VSkXp6elERFRQUEDu7u6CXx1///134uPgwYMUExNDd+7cKfNdamoq/e9//6PQunXpKjPsxrmBQAp0ryJIn7Vr1xrVY9GiRbz5x44dq5dHrVbz5clGyRGR5giAmULvtTGJjo4mtVpNjx8/psjISIvdAW5ubrR582Yh8xWVWlxdXSk5OZnefPNNScrq0qWLOXnjrOE2UMS+RHhCYBtfo9myZQtpEXOIxfHjx4mPpKQkArhDM3r37k1TpkyhTz/9lDp16qQ3ybWlbgujfvs3HDxN6uHi4kIAqHfv3kb1OHfunKBrGjduHKnVal0+Pz8/vjz1zX6IQA9LjES9evXo0aNHlJycTE2bNrXY6Hh7e9ORI0do3rx5VjGQFU0++ugjun79uiRldezYkfr27Ss2XxGAQLmNkSLWFeEJuU0XJhvNO++8Q1r+/e9/C25sQo4mLCgoEHQa1rTW7Y0a+9XwLZO+dJm1atUigDP6mZmZBvXQaDTk61u2HEMyZswYXT4BP369zX6IQE1zjUPVqlUpMTGRbt++zXeMouDyTpw4QdeuXSM3NzfJDGJFFm9vb0pLS9MNNiyVRYsWiV4kAWCq3MZIEeuKUJ89YCW/vYODgyCfvZOTE2rU4F+OfjDrsdHv2sAFXioHXXkAt+vX1dUVAJCSkoKIiAio1WqjE5MqlQqxsbG8egDAkSNHdH+HhpaN3fMMZh9ATkT3wJ0zKgpHR0ds3LgRTk5OaN++Pa5cuYIaNWrAx8fHLD18fHywZ88eREZGYty4ccjLy+PPpIDMzEz8+OOPqF/f+AIDMXzyySdYunQpWrRoISbbSEkqV7BfxPwyAHgAnhFCSkoKEXHrsz09TbtNAFBERAQJRYgv2cHBgU7D3+jovje40SZjjKpWrUoAqGHDhrr8PXr0IAD0yiuvGNXjwIEDgkZLzs7Ounj/8+fP50u/3pJfbQC7hOhUWpYuXUpERPHx8XTq1CnKysqiwsJCqlmzpujRpIuLi25tvoDjGBV5RgIDA6l79+6SlTds2DC6d+8eBQYGisnXxpYjTUVsK2JG9oCA0f2+ffsAcKNGAREf+UIA61GrlvHVNtrVDBqNBvsDvY2miwE3iicieHl5AdAPaaDRaBAYGIjdu3fj8WPDbwnt27dHcHAwr74FBQW4fp1b0fb888/zJbf01KozYhJPmjQJ48ePB8BdT8uWLeHp6YmNGzcaDPvAx7x58xAZGYnk5GR88MEHovNXdh48eICTJ09KVt7q1avx4MEDbN68Gc7OzkKzKaP7CoxYYy/5UYVijL12jbuqVAwc7XIzX1/fp0q6kNEyOsIFLuB+GDw9PQFwHa1pU87W7tu3D4MGDUJhYSE+/vhjg2UwxjB8+HBefV1dXXUhmgWstX+OMebCW6hxBBv7Hj16YO7cuQCgCySnxZyQCAMGDMBbb3Fn/k6cOFE5mtBMHj0S7YkzChHh/fffR1RUFJYsWSI02yDGmKtkSijYF2JeA8CtwzX5KhgaGkpaTp06ZTItY4xu375NRNzySUPLKkujDa1bemVLSEgIAaAGDRroPnN3caFEBBh15QwEtyy0du3auhOoxo8fr8s/d+5ccnBwIMYYHThwwKAuGRkZVL16dd5X41WrVunyaN1GJqS5ua9oAJ7j0wUANW3alPbu3UszZ86kiIgImj9/vk6/w4cPm+UySEhIICKiY8eOye4OUURftCvk3n77baF5BtvCpaCI7UV8BuAyX4PRGnCNRkM+Pj5G03Xu3JmIiFauXEnVq1enM2fOkCl++eUXAkDPPfecLm5+q1atCAA1adKEvL29dWX/CB+jxv5P+BErSffSSy8RAJo8eTJ5eHgQABowYAD16dOHAO5HxNhZtQL88PT660+PRmzfvj1f+mFmP0huc8wTPn1Kr/ioUqWK3qojQ2f/8knVqlV1Z9F+8sknshs3RfQlLCyMCgoKKC8vj+rVqyckz59yGyVFrCNi3TiACFeOSqVChw4djKZr06YNOnfujOHDhyM1NZXXD6512WRlZel2pVavzkVlvXr1Kl544QVd2r+8jB/gFAZHdATnMdG6cvbs2YNBg7gDe7Zv344vvvgCXl5euHz5Mv71r38ZLGfChAlo1qyZSZ0TExN1f3fs2NFkWljgtyciApDAl06tVuv+HjZsmG7e4tatW9iyZYvoetu2batzq+3YsUN0fgXrcvXqVSxevBiurq6YP3++kCxdGGNWPydBwfZY1dgDpv32s2fP1k3oenp68i758/Dg4ts8fvwYDRs21OVzdnaGWq3Wm8DdXfAEpgInjwFXVn5ODqpVq4Z//vlHp2t2djZmz56NpUuXAgDmzJmDc+fOlSnDyckJv//+u8kloZcuXdKOvIUsMTV7+WUJoiZptWfJAsCCBQvMOmJQ+wObkpKC06dPi86vYH1mzZqF9PR0vPrqq+jZsydfchWAN2ygloKNMcfY7wNM2lHB6+21RhCAoDXG2kM0CgsLdZO1KSkpukNFtKN8AHicn4fTKDBaVju4oBGccHD/AQwePBgAcPr0ad1KkjVr1uDy5csYO3YsCgsLMWbMGINx94ODg7FlyxbdWv1nycnJwZ07dwBY/dQqQISx79Spk+6+ZWdnY9myZWZVqI3Vf+DAAb3nqWA/pKWlYeXKlQCA6dOnC8kywpr6KMiDaGNPRBkATplKc/fuXVy9ehUA0KRJEz0jbAxT7h4tWmMPQDeavnPnju4wcEdHR70Dyv+AfkCyZxkLDzxR5+PWlato164d5s6dC39/f/Tr1w8A8MUXX6B169Zo2LAh/v77b6xatcpgOW3btsX+/fuNRu+8ePEiAKBRI974UrUYY+btaOIQbOxLj+p/+uknZGZmmlWh9jmcOSPqpULBxvz1F7dqmu+0tRJCGWP866YVyhXmjOwBEa4cxhg6derEW2BMTAxvGq0bB3gaFvnevXuIiIgAwPnHS6/t/81BjUIYH232gBsC4IBtf+5Chw4dUK1aNUydOhWRkZE698T06dN1vvxFixYZLatNmzY4ceKEQR++1m9fp04dvWswgiWunLMAlvMlqlmzJnr37g2AOyVMoC/XINrnkJDAO12gICMHDhxAUVERvLy8EBQUJCTLCCurpGBjrG7sAf7QCU5OTkImL/VG9tqJxYKCAt1h2ImJiWjXrp0uTbqmCHughjEcAYwAV+a38+ZhypQpYIxh2rRpGDJkCAAg3H5yLgAAIABJREFUNTUVhYWFAICTJ0/i77//NlpenTp1cPjw4TJ+Ua2xZ4wJiV1u6STtWACbTKUbP3687jjHbdu26TZ+mYN2ZK8Ye/vmyZMnuk1bderUEZJlAGNM2CEQCuUCc439YQAmA5/s27dP58Pl21zVoUMHQbG4Sxt7R0dH3a5Zbd4bN26UiUGzAbkmyxwMd3iCIV+txurVq3W7Sg8ePKgbAV29elVXN98GlSpVqmDr1q348MMPdZ+VXpGj3bxlAov89kSkATAUgMHT052dnTFu3Djd/1t6rqyPjw9SUlKQnJxsUTkK1kfrynFxEbR3rwqAftbUR8G2mGXsiUgNzuAb5dGjRzh//jwAIDw83ORKlEmTJgmqt/QPglqt1v2/9t/8/PwyE6UHoUYyjK8y8YIKb4PLn5iYCCcnJ4SEhCAuLk7nktm+fbsuqNS6deuQnp5uUk+VSoWvv/4aK1asgLOzs85nD3AHTfNg6SQtiKgAQF8AB5/9LjY2Vud6OXPmDA4csOzcExcXF4MrlRTsD+3btkBjDyjhEyoU5o7sAYlcOc2aNUOPHj0EVejo6KhbF5+bm6ubjFWr1bpwCc+uCNEA+NX0SwhGwAM1wUXDXL58OVq0aIHc3FxdbJwnT57gyZMnAIC8vDysWLFCkL7Dhw/Hn3/+ifz8fDx8+BAAdEtGTWDp8ksAABHlgYtzrzeZPnHiRN3f3333ncX1ODs748qVK4LSCliNpGBFjhw5gvz8fDGxcjowxpSHVkGQ3djPmDFDVKXVqnHHrubm5sLbmwt4lpGRoVtjn5KSohfYDAA28hh7FzBMBfcjkp2drXO7aJdMAsD9+/d1fy9dulTwMsOOHTtiy5YtuHz5MgBBK3K8pdrUQkRZALoBuAgALVq0QNu2bQEAycnJWLdunUXla0eIQox9+/btERUVZVF9CpaRn5+PkydPilkiywAMt6JKCjbEEmN/BkCaqQTx8fG6jTqGjH1YWBiioqIQFxcnePemdgRfemSfnp6uM/bXr18vs2b/FopwwsSaewB4DW5oAW7XrdYwp6Sk6L4vHQHzypUrRiNiaklPT9ety4+JidHpV69ePSGv0Ra7crQQUSqAlxwdHe+UXm65ePFiFBSYvid8iDH2s2fP1t1XBfk4c+aMyTOWDTCcSXFAroLsmG3siagY3AYro2RkZOjWX4eGhuo2Qmm5fv06QkJC0LNnT723AFOUNvaGRvbXrl0zuEHrZ56JWgZgI6pjBXzRg1zhAqY3Air9t7Ozs+4NwxhpaWlo1qwZNm/eDCJC3bp1AXCHtTz33HN8lymZsQcAIrofGhr60pAhQ54A3AhPuzvYErTuAD5jX6dOHURFReHSpUsW16lgGadPny4T6ZSHYADCTiJSsGssGdkDFrpySu9IHTZsmKAK+Yz9+fPnDS7j3IE83C+ZqNWUyLM4gAuBPB9VcQI1MBFV4I6yg5qgoCDwDXbq168PFxcXxMbGIjIyEidOnNB9J8CVI6mxB4DExMTLbm5ucwEu1rkU4XRTU1Nx9OhR3Lp1y2S6AQMG4M6dO2JHlApW4MyZM2KNPaBM1FYIZDX2WhwcHIQc7gFA32df2o2jXTmTmJgINzc3vZj3AGfcpyETI5GGZkjGc3iA6chEnpFNV15Q4X14Yj9q4BXor/DhG9VrGTBgAADg1KlT6Nu3r+5zAbHtJTf2JcwloodSTMxqGTVqFG9MnYEDB+otP1WQj4sXL/K6IA0QyxjzsoY+CrbDImNPRNcAmBzWHTp0SLcpyZix9/f3h4ODg6A6tSP7rKwshISEAODWD3ft2lVn/H/88UeDk4GHoMZ+qOEFFZbAB/+GN9wMjNxL4wcV5sNHz+AnJCTg9u3bvLr2799f9wZw7949ZGVlARC0/DKcMebIW4F4svv163f8woULkhXI55oJCQlBq1at9JafKshHYWGhOW91bgAGWkEdBRti6cge4DmqMCcnB8ePHwfABQ0ztPxOG0xLCFpjv3XrVrz22mtwc3PD1atXsW7dOt1B4PHx8QZH3ypwyyz3wE93PKEh0lGMw1DjQYmzxwHA9/CBb8nt0mg0gnze9erV043ugaeGUcDh487gDiORFMZY2y1btrwidbmmaNWqFQAoI/vyzwi5FVCwDCmMvcWuHIGxOgBAN2LPysrC8uXLdb7+WbNm6Yw9AN2GLi2N4YStqI7P4AUPE6P5kyhAd6TidaShDx4jtSTApyOA+ng62F62bJlebHhjfPXVV3By4lb5aEe3YWFhunAFJpDUlVMSYG0tEQl7hZIIbeAtxdiXe9oyxnhfSRXsF6lG9iYX7vIZe60xFELbtm11IQcWLFiAQYMGgTGG27dv4/Lly7ofjqSkJJ0LJQrO2IJqaArT9WxFHgbjMWpAhcnwxH/grRvNA0C1Un8/evQI69ev59W3fv36mDBhAoCnBs/Z2VnI6F5qv/1PAAQFRZESrbFX3DgVAsNhXRXKBRYbeyJ6COAfU2mOHTuGvDxuY5MhY19UVCSqTq3xzM3NxZYtW9CtWzcA3Fru0hOhRARvqPBf+MCJxzd/GxosQTZWoRp+R3W8iypoDxe9G/QPCvXyLFy4UJC+M2fOhLe3t97oVsBOWsmMPWNsMIDeUpUnhiZNmiA/P583xISC3fMYPCFSFOwbKUb2AI/fXq1W4/Bhrp0EBQWVWWeuncAVyuuvv64LFfzf//4XQ4cOhaOjI1JSUrBr1y69lTj94Qavksu8Bw3eQwbeQjpmIBMbkYv8kpeSKmD4DdXxAgxvJU+GBveeWbD5999/C4oY6efnh6VLl+oZe1stvyzZEPOxFGWZg7e3t3KoScUgriTInkI5RSpjb9FRhWKNvZeXl85XX1BQgPfff18Xn/3q1at66/cH4GmkzK/xBHtKDjSpC0c8AeEauLcKX6jgamL0vxBl1yY3a9ZM0AlbADBo0CB06tRJ5+cXYOxDGGP8oUD56Q1A0IkV1uDgwYOKsa8YbJVbAQXLkMrYxwMwabFN+e3FGnuAc9loDa12RP9sgCc/qBBWalL1DbjjBPyxGD4YCw+Mggea8PjxAeAsCrHWwA7cadOmidL5+++/121AEuDGYZAmKJpso3qAe+6KsS/35AH4U24lFCxDEmNPRNkAjplKc/LkSd0682dPrhLrswc498CmTZt0IY2fPHlSJtZLG+jHoGkFZ5MrcQzxt1Mxxnvklzl0t27duhg4UNzSY3d3d93EbHh4eJmNXwawyNgzxroBELZbzUooxr5CsJuITMcbUbB7pBrZAzyuHI1Gg/j4eADc6Ualz8LMzzd9VqwxmjdvbvKowGsoMhHJ3jQPWDEWNqmJIcWPkZJT1oUzdepUwRvBdu3apXMtaQ28m5ubblOYCSz128s6qge4WEXKSpxyj+LCqQBIaexNTtICxl05fLFVTDFq1CiMGjXK4HeXUIifITwey0MUYyVyMLBqIdrhIeaeP4kiTdm3jpo1a2LkSOHhQl5++eUyo/hbt27xhhmABcaeMdYOQLS5+aVk5cqVcqugYD7FAOLkVkJBAohIEgG37ygL3Jp7gxIREUFaNm/erPddRkYGmUteXh41b97cYJ3uYDQVnnQBAZSEwDJyCv70JbwpCs6kAjOqOwByd3en6dOnU3p6utm63rhxg4YPH06Mma6rRB6JeQak/zx+FlC+TcTX11d2HRQxW+LNbYOK2JdIWxiwzVTDYYxRamoqERE9fvxYz+D9/fffZAnXrl0jb29v4wYHKhoAd5oBL/offGk2vCkaLuQgoME7OjrS+PHj6f79+2brl5KSQm+99RY5OTmJ7WwBYp4Bcc/BF9ykmtyGQpHyL++LbX+K2KdIWxjwHl/j2bRpE2kpPRr/5ZdfyFK2bNkiaUNXqVQ0cOBAunLlitk6FRQU0Pfff08eHh7m6JAJoAFZ4TkooohAqS+2/SlinyKlzx6wwG9/9epViyvv3bs3pk6danE5rq6uGD9+PBITE7Fu3TqEhYWJLqO4uBhr165FQEAA3nvvPXNiua8DEE5E5hzvNM6MPAoKz3KeiPh3DSqUD6T+9QDwACZGCuHh4aRl27Ztus+7dOlCUlBYWEjTpk2j6tWrix7FVKtWjT799FNKSUkxu/7i4mLauXMn1axZ09yR1GUAXcn8+x9tZr0VVkJDQ2XXoZzKl+a2Q0XsT6QvEFjN14ju3btHREQZGRnk4OBAAMjJycmiSdpnUavVtGbNGurXrx8FBAQY1aV69eo0cuRI+u233ygvL8+iOo8fP04NGzY0t2PlAZgJwIUsu/8mJ2bNdCeVa3n//fdl16GcSitL2qIi9iXSF8jFvTbZiFavXk1aIiMjdZ+vXbuWrMX169cpLi6O1q9fTz/99BMtXLiQDhw4QEVFRRaXfenSJXrhhRcs6VQ7IIFvFAImZjt06CC3AbG5HDhwQHYdyqHcAcAsbZOK2I9IXyBQm68hjRo1irR8+OGHus8HDRpE5Ym7d+9Sjx49LOlQdwH0I+nuPe/E7NSpU+U2IjaXvLw8k293ihiURVK1S0XsQ6SeoAUR3QFwxVQaY5O0O3bsMCtOjq1JT0/HqFGjUKtWLcTFmbXfpAjAPHATsJskVI13YrZ169YSVmf/ODo6wtXVtUzwPQVelF2zFQzJjX0JJkMn3Lx5E0lJSQCA9u3b6w4vyczMxKZNUto+acnJycG0adPg5+eH5cuXm1vMEQDPE9H7xMUUkgTGWDQAk6E0XV1ddQezVxbc3NwAAK+++qrMmpQrMgHsl1sJBWmRxdgDT0f3Hh4eiIyM1H0+d+5cK6lkPgUFBfjmm29QvXp1zJkzR0iYA0M8BjAWQDQRnZNWQwDAeL4E/v7+qFWrlhWqtl+0z6pnz55wcXHhSV154DkpbTsR2f8rtoIorGXs9wFlAkXqYcyVc+rUKezfv99KaolDo9FgxYoVqFGjBqZOnWpuwDYCdyRgOBEtoxLnupQwxmoA6MeXLj09He7u7vDx8ZFaBbtF6xb09PTUnWimALzxxhumvlZcOBURa00GADgBExNAgYGBpGXPnj163/Xo0YPkpLi4mLZt20b+/v6WTnKdA9COrDzxAuA/QnVKTU2lJk2ayD35Z1PRsnr1atl1sQdxc3OjS5cuGfteDcDT2m1WEdvL05M9pGcPgEhjXyYnJyMxMRENGzZE27Zt8fnnn8PX1xc+Pj7w9fVFbm4u3N3djWW3GkeOHMEbb7wh6LhBE+QA+BzAd0QkPli/CBhjfgDeEpo+KSkJtWrVwvnz562olX1RWFgIJycnnStHe1pYZcXDwwMNGjRA7dq1cefOnWe/PkpET+TQS8G6WNvYTzf2JRFh7969aNiwIdzc3PDZZ59ZUZWydRcWFkKtViM3NxfZ2dm4d+8epkyZglOnTlla/GYAk4hblWQLpgIQ/KuYlJSEmjVrSqqAj4+PXR8ofuvWLYSGhsLLywsxMTHYtm2b3CrJivb85kaNGhky9srERgXFmsb+MIB8AK7GEuzduxdvv/222RUUFRWhoKAAeXl5yM7OxpMnT5Ceno60tDQ8evQIKSkpuH//Pu7cuYO7d+8iNTUV6enpyM6WbBFMaZIATCSi7dYo3BBiR/XA05G9lIwcORLz588368QxW3D69GndhGT//v3t1tgPGzYMa9eutfp9LG3sd+3a9ezX0o4EFOwGqxl7IlIzxg4B6Goszf79+5GXl4eMjAydkdb+m5aWhuzsbLi5uSE5ORn37t3D7du38ejRI6SlpSEjI8PcVTFSUwDOZ/4VEeXZuO4PAHiIyZCUlITnn5f2pEJ/f3/ExsZi/fr1kpYrFadPn8aAAQMAAH369EGtWrVw9+5dmbUqS2RkJBo2bIgZM2ZYtZ4qVbhz7I2cgxzAGGNE3GSQQgXCmhMCAKbBDiakrCh/wYwQxBLd2+oAssXqHBMTQ9u3b5f0PkyaNImOHj0q97MwKuHh4ZSbm0taSgfgsyf59ttvSaPRUKtWraxaj3anelxcnLE0NeSeTFREerHW0kstvOvtyynJAIYSURcyLwSxFIge1QP6bpyQkBCTZ/gK5f79+4iKikJUVJTFZVmDS5cuYeLEibr/79GjBwYPHiyjRobRaDRQqVSYNWuWVetp1Ijbe/ftt98aSxJkVQUU5MGavyTg1vE/hh2MmiQSDYCFALzl/IUGN6p/Ys41ODs706NHj8jLy4vOnz9PhYWF1LRpU4vui7e3N924cYPWrVsn9/MxKcuXLyctDx8+NCsMtjXl66+/1ulnYWA9k7Jx40b67bffTKV5Ve5RqI37UxUAzQD0BjAFXB/fDm75+BkAF8CFgEkCF8/qIYB0cG/WqQBOAtgE4BsAEwG8CqAxAA+5r03vOm1wIzfJ3Ykkkr/BhTmQ/6EBSy25ljt37tDu3btpx44dtGHDBtq4caPF9ycyMpJycnKodu3aBr/38fGR+/mRm5sbnTt3jrRIcd1SyldffaXT7c8//7RaPfHx8RQcHGwqzVi527iV+08ggFEAfgWQYuXn+rCknhEA/GS9bhvc2AlydyIJJA+As9yNtOR+Pg/uDcOizl5YWEiNGjWinj17UnFxsSQbrSZNmkRff/21we969epl8RuEFBIaGkp3794lLRMnTpRdJ63MmjVLp9eNGzesUodKpaJOnTrxpftM7nZuhX4TCeBLAKfB7e6X4xlrwMXGGg/Azeb3wAY3OVTuTiSRtLGDBssAHLX0WlauXEkLFiwggDtM/eHDh5KNcmfNmmXwgJRu3brZzUg6JCSErl69SkTcITelz1SQUz777DPSsm/fPlvXnw0uGisB+K/cbV3CPtMdQLzcz9aAPAIwC0CAre6FNdfZAwCI6BpjbDM4v1ghuAZV+Iw8+5mQNJaUpQFwFYCYIDFdABwXfwcshzHWEEBHAK8AsHgW9NSpU1i9ejUAbq/CunXrMHHiRDRp0sTinbWfffYZ/Pz8ypy5e/PmTcTGxkpSh6XcvHkT7du3x65du9CsWTNs2LABLVu2lH1jWOn19bdu3bJ19ffAGZ+VKOdr7RljKgD9AXwEoLnM6hijOriT6T5kjH0H4Auy9tJtuX95ZfzF3wBxv8R/2VC3EABvl+gouU/R0dFR7/9btWpFREQbNmyw2kjGycmJCgsLrVqHWPHx8aGjR48SEfFNWNpEPvroI9Lyxhtv2Lr+eyVtbyiAv+Xunxb0nToADsn9LM2QGwC6WfXeyP1wZGwUo0U+jDwArlbUJwRc6AOTAeSsJYmJiZL57o3J5cuXqbi4mBo3bix3x9KJh4cH/fnnn0RENH36dFl1mTp1KhERFRQUWDyh7eXlJTZPZqm2GCN3/zSzD/UDt0pG9nZlgawDUNXAtflYfH/kfkAyNoxaZjyI9hLrEAIZDXxpmTFjBhFZd3Tfq1cv0mg0tH79erk7lJ44OTnR4sWLSaPR0KuvviqbHpMnTyYiop07d1pcVsuWLalu3bpi8hTJ3Sct6EcMwCK525GEkohSZ1KDm3dYaPF9kvtBydxILgh9AN26dbtbWFi46+OPP65rYZ0hsBMDX1rq1KlDxcXFVh/dT5kyxe5G91oZN24cPXr0iMLDw2Wp/9133yUiolGjRllcVoMGDfTOdxYoVntztXI/FhziuxxJKoCOJdd3AFzo6RCL7pPcD0rmRjJPyI0fOnQoFRUV0eXLl8nT0/MRgBdF1hMCOzTwz8q+ffuIyLqjewC0ZMkSu92AFR0dTQcPHqSqVavavO63336bsrKyDK5mEiu1atWikydPis1XTe4+aUYfflfuNmNFKYC+jVpu0b2S+2HJ3FBeNnajVSoVRUVF0Zw5c6ioqIiIyvh0twLoBANLpwA4AGgFbnVDgh00GkEycuRIIiKrj7xVKhUtWbKEGjVqJPs1G5LatWvTV199RSqVyqb1jh8/npYsWSLZNRARBQUFickXLHefFNl/W8PCPSflTIrAnXinGHszGosbuIlXAkBeXl4F/fr1oxUrVtDDhw9Jy507d+iTTz4xNemVBeAUgD/BbasusIOGIVo8PT11AcNs4Vdv3ry57NdsTNzc3Khly5Y2rXPMmDGS3ZOwsDAiIho8eLCYfI3l7pMi+2+cjZ6NBsB1cCfPnQJwDMBBcGESMmzcNjeYfb/kfmByy8SJE3/ZsGFDyq1bt6g0+fn59Mcff1CfPn3IwcHBpp1eTlmzZg0RSTe6r1WrluzXVF5Eyreppk2bEhHR0qVLxeRrLXd/FGy4gBZWeg654Nyt/wXwJrh9Le48ulQH0AbA6wCWA0izYjspBtDcrHsm90OzA/mLSrh//z79/PPP1K9fP6pSpYrsnV8OiYqKuqi9H1KM7keMGCH7NVVGiYyMJCKiw4cPi8nX2Q76o1Bj/4FE9+oJgJ/A7S9oBMBBAt2cwK2g+R+ssxQ0ziy95H5oMjYWdwCvxMbG7u3RowcFBgbK3kHtQLIBNCGib4iINBqNRaNNBwcHWrVqldzXVCmlQ4cORER08eJFMfl6yt0vRfRfS1bgaMCFXx8GnlG7BHr6gHtLkDoeT1vRusj90GRoJAzcYeC5cndIO5R+JfdJRUR/EJFFq2bq1q1Lx48fl/uaKqyY+iHW7sa9cuWKmDIHy90/RfTjOWbcs6sAZgCoLYO+UZB2scY+0TrI/dBkuOmvyN1J7VS+Kn2fGjRo8HJiYmKmRqMxe9VMQEAAPXjwQO7rqrBy7NgxcnJyMvjd6dOniYjo008/FVNmuQltDCAcwkfL18D501Uy6+wA7vQ+qVYQvSSqfrkfmgw3fIXcndQOZaO2IwAYCeAyAOrVq5eGyLLR/e7duyvt/Ic1pUuXLkREBjfAhYaGEhFRXl4e+fn5iSl3ktz9U2Rf/oHneu4AGAfAUW5dn9F7CLiAjJa2g+Oi6pX7wmW40dfl7qh2JpvBHTzvD2Bb6e8YY5SQkECWjO5Hjhxp1R25lVXi4uKIiCgqKqrMd9OnTycioo8++khsuZ/I3T/N6M8zUXaEnwJgEux4RzC406ykcCX3Elyn3Bctw022612sNpat4FYO1AUX4rZMmj59+hARN7p3cHCgbt260S+//ELx8fFGXQilxdvbm2JiYuS+zgol4eHhVFxcTERk8CCSM2fO0JEjR8xZMjxb7v5pZp/uC+70tqXgdqrb1XGAJvTuACDTwvbwDwS6p2S/YBlu8G9yd1Y7kQ3gDL0/OJ+mwXSMMTp79ixpNBpKTk6m0nz11VeC6lLW2ksnXl5elJCQQEREubm51LBhQ73vGzduTE+ePKGwsDBzyl8gd/+sbAJup322he1iCLj5gNEw8XYm+8XKcHOXyN1h7UD+BW5VkjcErBCIjY0lLWlpaTRv3jzKz88njUZD0dHRcl9LpRFnZ2fas2cPEXH++JdeeqlMmgULFlC/fv3MrWO53P2zMgq4NxNLlmbeBHC+5O81RuuR+0JluLEz5e60MkoegCGl7sUWIfkYY3T69GlauHAhVatWjQBQTEwM5eTkUFJSkjmx0xURKYwx+uWXX4iIaP/+/QbnUKpUqUIzZsywpB6zt+IrYjd2abvROuS+SBlu6mtyd1yZ5AFKnaML4B0x+Z2dnct81qFDB8rKyqKVK1fKfW0VXubMmUPXrl2jYcOGGU1Tr149S4O3GTUUitjENq2ToK0cMVq+3Bcoww31l7vjyiBnUGojCbi4IvlSlN2mTRtKT0+n/v37i8rn5uYm9z0pN9KlSxcaMmSItWM0ZaEcrbOviAIuMOPfFj7HC0bLl/sCZbqpSXJ3YBvKZpRanQDAE1xkTsnqaN68OV26dIlq1qwpOE+1atXMnURURFopBhe8q0yobkVksU01wR1cYu7zvGesbBUqJ4flVsAGZAAYTUR9iSin1OefAgiTsqKEhAT07dsX//73v8EYE5Tn8ePHiImJkVINBfEcBxBFRCOJKFluZRQAIroHYLIFRVQ1VXilEwDRkH9EZS0pAuf7CzRw3X6wfJmXUQkNDaW+ffsKTt+5c2caOnSo3PerUsrrr79+HwCTuy8qYtRG7bDg+ToZKpOVFFzpYIwdAfCCFGXVrl376p07d74FF9faz4BUB7em3ZrcBBeq9X9EdN9QAsbY1wA+tKYS/v7+yMrKQl5eHm9axhj279+Pnj17Iisry5pqKZSiffv22L59e0aVKlV85NZFwTCMsWBwyymrmJE9kAy8qVVmY98b3NJDs6lSpQq+/vprvPnmm5sYY/156qsK4z8EHuAmZ9xL/i0tpT8rAOfP08o1cBM6fxP3+meq/urgfhA8zLlWazFlyhTUqVMHkyZNkluVSkFQUBBOnz6NmTNnpvz444/1Sd/Fp2BHMMbeATDfjKxvEtHSMp/K/boi42sSA/ALzHxV6tatG2lPt7p+/fotSHDogZWvd4y512pNqVatGmVnZ1NERITsulQkqVu3Lrm7u+t95uzsTEeOHKF9+/YRY4wAhMrdLhUx2WdV4OYXxT7/BIPlyX1BMt9MBu5QcME3Mjo6mnbv3k1E3OEe3333HTk6OuYD6CT39fBc67/lNkDGZNWqVXTo0CGtASIA5OLiIrte5VWcnJzoxIkTNHnyZL3PlyxZQpmZmRQcHKz9rL3c7VIR3n7bENw8nNh20KZMWXJfjD0IgD7gDhM22nleeuklnZEnIjpz5gy1bt26dLqFcl8HzzWul9sIGZO2bdsSEekdYXjq1CkaO3as3g+AIsJk9uzZRET04MEDcnV1JYCLPkpENHz48NJpB8jdLhUR1HdXmdEOlpcpR+4LsScBF3Z0XXR09P1evXrR6NGjaePGjZSZmUlazp07R7GxsYaM0D3Y8eoGWL5Zw6py7tw5evjwIfn4+JC7u7suqmN8fHyZYF+KGJeuXbvq7l1+fj69++679Pzzz1NeXh5t3rz52fTlKn59ZRVwB7WIPfAkF0BVvXLkvhA7lXfpGUwY+dLSzg50N9ZgHsttiEzJW2+9RUREixcvplatWukF5X2OAAAaaElEQVTde7VaTZ9//rni2uERPz8/un//PhER/ec//6F+/frRvXv36ObNm5ScnEzVq1d/Ns/XcrdLRQT3X3NCKbyrV4bcF2GPEhkZ2aJatWqpzz//fOHLL79MXbt2FepOmCe37kYairfchohPvLy8KDs7mzQaDS1YsIC05Obm6v5OTEykDh06yK6rvYr2QJMffvhB99ny5cuJiKhHjx6G8qySu20qIrgPN4X4yJh6oRNkvwh7FHCz4OlmdLhbcutu5HrKRTygH374gZ6lT58+tGjRItJoNEREVFxcTD/++CP5+PhIWrc2mmd5lXff5V5G169frxcMzdPTkz7++GNj+fbI3TYVEdWPN5vRNlrp8st9AfYqeOaIPhESKbfuBq7FRW5jJETCwsIoKSmJSjN48GACQK1ataKTJ0/qPk9OTqZBgwZJVnerVq2oS5cust8DcyQiIoLy8/Np+/btgk4PKyVGg2YpYn8CoKUZ7eNTXX65L8BeBdzxZuZ0vi/k1t3I9UgS5dLa4uPjQ7/99htpKb18UKVS0dtvv00ZGRm677dv3156KSGvODs7GwzAplKp6OzZs1S1alXZ74EYcXd3p4sXL1J8fLw5kUTT5G6Xiojux3+JfMbHtHkrayA0IRwUkfYSgDkA2gH4wjrqWEyG3AoIIT09Hb169cIHH3yA4uJiBAYG6r4rLi7GokWL0KBBA/zyyy8AgO7du+PChQv46KOPUKUK/87ygoICeHt7Y/Xq1ejevbsucFtxcTGuXbuGRYsWWefCrEDbtm3x+++/Iy8vDz169BAUouIZfBhjrtbQTcFqbBKZPpIx5gcAsv9S2auAi2WTA8O/lkUA4gF8ACBMbl0FXs8lI9dil6Jdfrlq1SqjaV588UVKTEwkLWlpafTFF18I8r8HBwfThQsX6MKFCzRmzBhycXGhCRMmEBHRgAEDZL9+Y+Lg4ED9+/enffv20eXLl2nr1q3k5+dnSZl15W6biojqx4EQP1H7OhEpxp7nxu4pdcOyAfwKYDiA6nLrZsa1HJPbUImRiIgIIiJatmyZyXTOzs40Y8YMvVU72dnZ1LhxY946PD09datVUlJSdH8/fvyYgoKCZL8HhqRmzZoUFBQk5WaztnK3TUVE9+UjIp/xWiJSjD3PTZ0IYCmAVwC4yK2PhdeyU25DJUYGDBhARFRmy78xCQkJoW3btpGW1atXC64rNjaWUlNTqTQ7d+6U/R7YSPrJ3TYVEd2XPxD5jB8TVeIQx5UNxth6AAPk1kMoM2fOxKxZsxATE4Pdu3cLzvfOO+9g/vz50Gg0aNCgAa5fvy4oX1BQEJYvX653oEpqaiqSkpKQlJSEmzdv6v1769Yt5Ofni74uO+RdIlogtxIKwmGM1QcX8VYMQbL/Silis9HAfyHBSFDk0j6z5ZdffiEiosDAQNF5v/76ayIi+u9//ysqH2OM+vfvTwsXLqQTJ06QWq0mYxQXF9P9+/fpyJEjtGbNGpo+fToFBATIPUo3R/5P7rapiFn9+azI59xRGdlXEhhj/wbwkaXlNGjQAH5+fjh06JAEWhnn5MmTqFu3LqpVqyY6L2MMa9euRZ8+fVCvXj3cu2cy1L9RXFxcEBERgdatW+O5556Dq6sr3Nzc4OrqqpNbt25h69at2LNnT3kd6a8kohFyK6EgDsbYvwB8IiLLWNl/oRSx2UjgDUg0GoyPjxd1uLg5kpWVRfHx8Wbnd3Fxofj4eJo3b57cI2d7l11yt01FzOrPg0U+56+VdfaVh3+kKmjnzp349ddf4eLiIlWRegQFBcHT0xPnz583uwy1Wo3evXujY8eOqF69uoTaVTgC+ZMo2CFJItM/pxj7ysNFcGFSLWbOnDkoKirC4sWLpSiuDA0aNAAAi4w9AKSlpaFfv34YNGiQFGpVVILkVkDBLMQa+1DF2FcSiEgN4IoUZRUVFWHw4MHo1asX3nzzTSmK1ENr7C9cuGBxWUlJSdi1axccHR0tLquC4ssYc5ZbCQVxEFEKuJj1QvFUjH3lQjJXzp07dzBixAh89913iI6OlqpYAE+N/blz5yQp7+rVqygqKpKkrAoIAxAgtxIKZnFTRFqVYuwrF9JYzxLi4uIwf/58bNq0CTVr1pSs3AYNGiApKQnp6emSlalgEsWVUz65ISItU4x95UKykb2WGTNmICkpCZs3b5ZswjYgIABnzpyRpCwFQSiTtOUTMX57xdhXMiQd2QNAYWEhBg0ahLCwMMkmbG/fvi1456uCJCjGvnyiFpFWceNUMm4BeCJ5obduYeTIkRg1ahTeeusti8tTDL3NUdw45RMxz00Z2VcmiNuNccQaZf/222/47rvvJJmwvXHjBhwcHCTSTEEAWXIroGAWYoz9I8XYVz5WWavgadOmISEhweIJ2xs3bkClvHTaEmWCpHwixtjfUHpU5WMLgExrFFxQUICBAwfC1dXVognb69evKyN726IY+/KJYuwVjENEeQA2WKv8pKQkjB49Gq1btzZ7wvbmzZvSKqVgirtElCq3EgriYIx5AuA/h/Mp1xVjXzn5BtzRilbh119/xcKFC82esC0oKMD9+/etoJmCAZRRfflE7KS6MrKvjBDRFQA/WLOODz74AKdPnzZ7wlYZ3duMBLkVUDCL+iLTKyP7SswX4M7VtQpqtRoDBgxAXl6eWRO2irG3GcrIvnzyqoi0yQCuKsa+kkJEDwF8bs06rl+/jrFjx8Lf31/0hK1i7G2GYuzLGYwxBqCXiCx/EhEpxr5yMw/AX9asYMOGDVi6dKnoCduUlBQraqVQQjoR3ZRbCQXRtAIg5lV5FwAoxr4SU7LJ6g0AVl2NMXnyZJw9e1bUhG3JaTwK1kXx15dPxolISwB2A4qxr/QQ0X0Ao61ZR35+PgYMGIDs7Gx89913aN++vTWrUxCO4sIpZzDGggEMF5HlNBE9AhRjrwCAiH4HsMSadVy5cgXjx4+Hk5MTNm7cKGlI5MoOYwwxMTFwcnISm1UZ2Zc/ZgAQ86C3av9QjL2ClvfBHV1oNdasWYNly5aZNWGrYBwiwo0bN3Do0CEMHjwY3PydIJSRfTmCMVYfwAgRWQoBLNP9n9ynpCtiPwKgGYB8iDu1XpS4ubnRuXPniIjop59+slo9lVFat25Nt2/fplOnTtFLL71kMq2Tk1MhAEe525wigvumCkC8yDaxtnQZrKQgBQUAAGPsPQDfWbOO8PBwnDx5Eh4eHujZsyfi4uKsWV2lwtfXF0uXLkVsbCzy8vKQnJysk5SUFN3farX6zsqVK+vIra+CMBhjUwDMFZktmogO68pQjL1CaUrW8P4OoIc165k9ezamTZuGadOmYc6cOdasqlLi5+eHV155BV26dEFoaCjq1q2LgAC9o2YfAaghk3oKImCMhYNzubmKyJZARC1Kf+AoqVYK5R4iIsbYcHCTd7WtVc+tW7cAALVq1bJWFZWaR48eYeXKlVi5cqXuM3d3d4SEhKBu3bqoV6+e36+//jrz/v37G4josoyqKpiAMeYAYAXEGXoAWPDsB4qxVygDEaUxxgaC8xFapY1oA50pxt525Obm4uLFi7h4UTcPPwvALMbYaQBrAKwjonuyKahgiA8BtBGZ5wKAlc9+qKzGUTAIER0Ft8zLKjx48ACAYuzthJbgIqHeZoztY4yNZIwpS6VkhjHWFOaFNJlMRJpnP1SMvYIpvgHwhzUKVkb2dokKQCcAPwG4yRj7iDFWVV6VKieMsWoANgJwFpl1GxHtNlimMkGrYIqSRpcAQFKr7OTkBLVaDSKCi4sLioqsFl5fwTKegAuH/R0R3ZVbmcoAY8wdXMyqKJFZCwE0JqKrBstVjL0CH4yxdgD2Q2L/fUpKCmrUqIHg4GDcvn1byqIlxcPDAy+88AKCgoIQEBCAwMBABAQEICAgAK6urnrLG5OTk3Hr1i3s378f+fn5cqsuJYUA/gdgFhE9kFuZikrJhOwWAD3NyP4NEU01+q3cmwUUKR8CYBok3gSUkJBARERt27aVfUPSs+Lt7U1Dhw6lzZs3U25uLhmkqIiK89UGv3ry5AmtXbuWYmNjyd3dXfbrkVByAHwJwFvuNlkRBcCPZj6XfwC4mipbGdkrCKJk/f0fALpLVeb27dvRvXt3DBw4EBs2WO1YXMGoVCoMHjwYQ4YMQdeuXeHszLlLC85fQt5vu1B4/SY0yY+geZDC/fvoMaDRQOXlCQf/6nDw94PK3w8uLZrAvV+P/2/v3KOrKq8E/tvJDUmgEIjII7yuCAjIQysYooFZGPGxYIHOEKbYaWGYqQrRglQHLAGhESmDDFOGmqKCdWx1SRxQGJ1iwTorgTCRCvhMIEASwg15kYQANtwke/74LpQQIMm9JzlJOL+19rrcnHO+b9/Lvft+Z3/7QchtppnQ2bNnWbp0KevXr6e2ttbOl2glpcBLwK9VtcpuZdoDIrICWObHpd8BY1T1+uVO7P4lc6TtCNAdyMeiVeKmTZtUVfWZZ56xe7Wq0dHRmpGRoRep+vMXevr5lzR/yL16nN5+yckRE7Vs+ctaXVSiqqp79+7VYcOG2f5aLZZcTBXGILs/n21ZMGWL/f0/+Elj5nCicRwajaqWADOBemFd/tBawi+XLVtGeno6Y8eO5VzKDk4OvgfPXQ9Sseo/8B4+5ve4F77KpHz5Wk4Om8DZN7cQExPDgQMHWLJkCS5Xu0lx6Y9J+jkkIs2add1eEZEF+F91NkVVX2vMiY6xd2gSqpoKLLViLLvDL0NCQti8eTMrVqygJr+AU/fFUzzjCbzZOVe/IDiY0OjvE7FkPl2X/4yw2LuRRhjt2tIySmYv4FTcDIJOFPDiiy+yb98+evbsWe/cIUOGkJ6ezsyZMwN8dS3OCGCHiKSKyD12K9MWEBGXiCQD6/DPFh+hKY1M7L59caTtCSDADgJ0ATz66KOqqrpnzx5bXBDJycmqqlq1/5Dm9b7jqq6YnDC3Fv/TQj237X+0prxCr6TmTKWW/3KD5nYb2ijXTk6YW8++876qqmZmZmqfPn0u6TN69GgtLCy8NPYnn3yiI0aMsNtN469sB8ba/VltrQJEAB8H8P4WALc0aU67X7QjbVOArpiVhd8GITo6WlVVS0tLtXv37i1qjKZPn66qqlVffqs5nW6tZ5RzI27T04tXavWpIr2SmsqzWvnbd7X4H57SvF6jm+7PlyiteNn80Bw7dkzdbrfGxMRoWVmZ1lZd0KL4x7Xy9bcvzZeRkaELFy7Uvn372m3A/ZE/AhPt/ry2JgEGYnpH+PueVgB3NHVeJxrHwW986dz7gI7+XB8ZGcm3335Ljx49yMjIYOLEiZw/f95aJa9CREQEOTk5RHQIxTP2YbzfHK5zvNPMR7jpN6sJ6tK5zt/V6+Xsq7+j/BfrqCkKvG1vl4VPELn2BTweDxEREXQKD6f475/k3Hum5HNYXCzdX12Da+AAM78q6enp7N+/n8zMTLKyssjMzLzkDmvl7MNE7/y33sBGx5ez8j4m2MEfLgAPq+onTZ77Bn7fHSxARGZiimj5xciRI/n000+JjIzko48+Ytq0ac2eTZuQkMCGDRsoX7aG8qR19Y5HfbGbDiOH1fnbuZQdlP981bX9+X7S7V8TiXjONGEv/cmzVL5e960Ul4uwSRPoNPMROj7yEEGdv1dvjMrKSrKysjh69Ci5ubn1pLKy0lKdA+RLYBWwRa9Sv6W9IiIuTDe4FYC/dYdqgcdU9V2/dHCMvUOgiMg6YIG/148ZM4bdu3fTpUsX3njjDebMmWOhdvU5dOgQI4cPJ7/fGGpOFdU51mHUMKIO7b703JudQ8lj86j6rJnatQYF0XP7b/Eey+P0TxOve6qEh9FxyiQ6/WAaHe4cQXC/qEZtEGdmZpKWlsaePXtIS0sjOzvbKu0DIRtYDfynql6wW5nmRETGARsxneD8pQr4kaqm+K2HY+wdAsXX8f4LoIu/Y8TGxrJz5046duzIypUrSUy8vuHzl8GDB3P48GHOb/+Yommz6x3vtmYpEc/OBUAveCkYN5kLB75qFl0uEtSlM4hQW3GmaRcGB+OK6onL3Q/XgL643P0I9j26BvTF1b8PElq/jtapU6dISUlh8+bNHDxoe8/xk5iCe6+qavP78FoQEemCcV3NJbDIxwpgmqr+b0D6OMbewV98FREXAfOB8EDHi4uL48MPPyQ0NJSEhAReeeWVgHW8kunTp5OSkkLZkl9S8dL6ugeDguh34s8ER5mQyNM/W8GZf9touQ4tRlAQrj69cA26hZBB7kuPoTF3EdzbvMaDBw+ycuXKw++9995NwE02alsC/Ar4jZp8jjaNiPwdsB6ICnCokxgf/ZcB6+QYe4emIiJhwFPA80CklWNPmTKFrVu3EhwcTHx8PFu3brVyeJKSkkhMTKTo0Tmcf/8PdY6Fxd5Nr9T3Afhu56cUPvxDaKffj5DhQwi/fzxh908gbPzdB4K7dR0HTAX+EXgQCLZJtWrgD8DvgO2q+p1NeviFiNyFqUFvRYLZNxhDb0mVQMfYOzQaX0W+H2M2mZqtZWF8fDzvvPMOXq+XBx54gNTUVMvG/uCDD5g6dSonh9yL98jxOsfC4mLptWsLNUUleEbFUVNYbNm8rRqXq8Ttzbv54lMRiQJ+hDH8t9mmlymv/F8Yw/8nVW2VhYV8m69/i7nDtSqh7F1MGQTLdtedDFqHRiEi0zB++c00o6EHSElJYc6cOYSGhrJ9+3Zuv/12y8YePnw4+pcqvEdz6x3TikpQpWT2ghvH0ANUV9dxwamqR1VXq+pQYCImVt4OOgOzgV3ACRFZIyL3+Iyr7YjITSLyPHAcY5ytMPRVwDxV/YGVhh6clb1DA4hILCZqosVT4J988kmSk5PJz88nJiaG/PzAe2cUFhYS+Rcv+QPG1jsWMvgWOs+bzelnXgh4njaGutVz3YWfiIwFlmBcPdIiWl2bM5j+Cn8EdqlqZktNLCIdMD1hZwE/pOmNwK/HUWCGqn5u4ZiXcIy9w1URkRGYSAJ/mihYxsKFC1m7di1ff/0148ePp6ysLKDxzpw5Q8fK85zoc2e9YxIeBrW1aFW7jgS8Fh3d6mnQP+77XPwcmIF9fv0ryces/ndhjH+hVQP79qfGAX/jk3FYEIxwFX6PWdE3MSSr8TjG3qEOItIf+AXGZ9sq3HyJiYkkJSWRlpbGpEmTAuoAVV1dDSWnOdFrtIUatgvC3OppdF16ERkELMbs4YQ0m1b+cRzIuYacvDyZy7dS7wp0u+Lxdoxxvxv/k6AaQzYwV1V3NeMcgGPsHXyIyEAgwSfN+eH2i1WrVrF48WK2bdvG9OnT/WoC4nK58Hq91JaWkdfdun2AdkCJWz03N3xafUSkH/Ac8M80z4rXaryAB/MD1RU/S31YwAWMe/QlVW2R/pWOsb9BEZHuwH3A/T65xV6NGmb9+vU8/fTTJCcnM2/ePL/GqKiooHOHUHK/Nwhqbphs/YY46FZPfb9WExCRHsBCYB5mY9Xh2uwGElQ1qyUnbRW36Q4tg4j0F5HVIvI5UIQvvIs2YOgB5s+fz6ZNm5g7d67fGbZ5eXlIWCgdRg61WLs2TcBx3KpapKqLMZFaizGrZ4e6pAL3qer9LW3owTH2NwQi0kNEfgUcBv4FuBP7IyqajKry+OOP8/bbb5OUlORXDZ28PGPXQmPGWK1eW6bJFRSvhapWqOpqwI0Jmww487MdsBeYpKoTVPVPdinhGPt2jIh0FZEXgWPAT2mFvvimUltby6xZs9i2bRsbN25k8uTJTbo+N9fE14fe4xj7y9hh9YCq6lXVN1V1FPAQJlLmRkIxzUkeUtV7W2IDtiEcY98OEZFQEVmMMfJLgE42q2Qp1dXVxMfH16SmpmZs2bKlNjo6utHXXszGDY+LRUJaWxCJLXztVo//jXYbgaruVNVJwCAgCQvcRq2YAmAlcKuqPqiqO+1W6CLOBm07xJdh+Blwh926NCMHgBhV7Z2dnT1/ypQpT2VlZTWYWRkZGUlxcTFBQUGUzF7A2Te3tICqrZofu9XzVktOKCJBmOCA2ZgyA20hiud6XMAkeL2Oac7SvA0Z/MQx9u0UERkKpGFfJcNSTCXD/lj/Zf4ciFfVOivSRYsWxZWWlsYXFBTEHjt2bOCRI0fCa64ScbN3715iYmK48FUmnlFx7bbYWSP4ErjDrR7bas74ygDPACZjSjNE2KVLEykGPsS4wD5W1bM269MgjrFvx4hINKYC38XN2BpMEscXwHngEcyXLFA3TyVmk28nJuLguKqe8+kgQB/MLfzgKx5vpWlxzkcxTSDWNWb1tGzZsh7l5eWPFRcXP3zixInRmZmZN5eWlgYtX76cF14wJRGKps7i/A67Sr/YSg3woFs9uxs8s4XwFdobgwkFngTEAPUL8tvDaWA/8H+Yqpz7WmthtmvhGPsbHBEJx9xSjwW+75M+17mkFijEuIlSffK5qnr9nL83pgHzRelF3UihGsxKfpeq1q9e1kQWLVoU179//9iEhIQewLiagsJRnrsectUUWJZh31Z42q2eDXYrcT1EpCMwARgPDMEsEAYB9XszWkclpoZ8PmZR9BnwmaoebcY5WwTH2DvUw+fz74apVR+JKfZUjInNL2lrK5oGCD/97IpZZ/79tQ3U1LaWWi/Nzctu9TxntxL+IiK9+Ovd4cU7xa6A6zIJueK5CxOQUoTJATjpkzr/trrSZGvCMfYODkCORM0BXqVli3t9A7wBTAPupflzHyqBuW71/L6Z53FohTjG3sHBR45ETcRUH+zdzFNVA2uAFReLj+VI1ADgMUzZXKsL99RiNhKfdaunVXQbd2h5HGPv4HAZORLVE3gLs0FoNZXAa8B6t3quuf+QI1GDMCv9WN/jUPxb9R8HtgK/dqvneEMnO7RvHGPv4HAVciRqHPAEJiwwkMqIhcAeTLTSW271NLleeY5ERWJKXPTGbGD3vOyxK1CBCXU9jdlbOQiku9VzKgC9HdoZjrF3cLgOORLVFeNTH8ZfNwQHYsJVzwPlV5FSTNLXHsdt4tBa+H8nqYHN7SVqRQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/baboon_vector.svg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICBpZD0ic3ZnMzE4MSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjAgcjk2NTQiCiAgIHdpZHRoPSIxNzUwIgogICBoZWlnaHQ9Ijk2MCIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iYmFib29uX3ZlY3Rvci5zdmciPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTMxODciPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzMTg1Ij48Y2xpcFBhdGgKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImNsaXBQYXRoMzE5NSI+PHBhdGgKICAgICAgICAgZD0iTSAwLDc2OCAxNDAwLDc2OCAxNDAwLDAgMCwwIDAsNzY4IHoiCiAgICAgICAgIGlkPSJwYXRoMzE5NyIgLz48L2NsaXBQYXRoPjxjbGlwUGF0aAogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0iY2xpcFBhdGgzMjE1Ij48cGF0aAogICAgICAgICBkPSJNIDAsNzY4IDE0MDAsNzY4IDE0MDAsMCAwLDAgMCw3NjggeiIKICAgICAgICAgaWQ9InBhdGgzMjE3IiAvPjwvY2xpcFBhdGg+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTQ0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NTEiCiAgICAgaWQ9Im5hbWVkdmlldzMxODMiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMjA1NTAyOTEiCiAgICAgaW5rc2NhcGU6Y3g9IjE1MzQuMTY2NyIKICAgICBpbmtzY2FwZTpjeT0iNzk1Ljc4MTU2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzMxODkiIC8+PGcKICAgICBpZD0iZzMxODkiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpbmtzY2FwZTpsYWJlbD0iYmFib29uX3ZlY3RvciIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwwLDk2MCkiPjxnCiAgICAgICBpZD0iZzMxOTEiPjxnCiAgICAgICAgIGlkPSJnMzE5MyIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzE5NSkiPjxnCiAgICAgICAgICAgaWQ9ImczMTk5IgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1OC45NTYxLDU2OS45Njc4KSI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMCwwIDU5LjgzNSw2OS4zNTUgODcuMDM0LDI2LjUxOCAxMzMuOTQ5LC03LjQ3OSBjIDAsMCA3NC4xMTYsLTMyLjYzOSA3NC43OTUsLTM0LjY3OCAwLjY4LC0yLjA0IDg0LjMxNCwtNTkuMTU1IDg0LjMxNCwtNTkuMTU1IGwgMTIuMjM4LC03NC43OTUgNS40MzksLTk3LjkxMiAtMTMuNTk4LC0yNS4xNTkgLTQuNzYsLTQwLjc5NyAtMTguMzU4LC0yMy4xMTggMjQuMzksLTUuNTYxIDAuNTAxLC01LjE5MiAtMTQuMDEyLC02MC42NDEgMTYuNDc3LC05My4zNjggNy4yMjMsLTQ5Ljk3MiAtMjA4LjI5NSwtNTEuNzU0IC0xOC41NTIsNC4wMDUgLTM3LjQ2OCw4LjMyNSAtMTAuMDM2LDQuMDM2IC02Ni44ODUsMTAuMTAxIGMgMCwwIC0xNC45NTksNzQuNzkzIC0xNi45OTksNzMuNDMzIC0yLjAzOSwtMS4zNTkgLTQyLjgzNiw1Ni40MzcgLTQyLjgzNiw1Ni40MzcgbCAtMTkuNzE5LDY1LjI3NCAxMi40OCw3NC41NzEgLTcuOTYxLDkuNjQzIC0yNi40NzksMTYuMTg3IC0xMi43MTYsMzguMzA5IDQuMDgsNDguMjc3IDguNzY5LDM4Ljk4NSBMIDYuNjA4LC03NC4zMDggMCwwIHoiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgaWQ9InBhdGgzMjAxIiAvPjwvZz48ZwogICAgICAgICAgIGlkPSJnMzIwMyIKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3OC44NjU3LDY4Mi4xNTgyKSI+PHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMCwwIDE0Mi43ODksNDAuNzk3IDI1OS43NCw1Mi4zNTUgMzEzLjQ1NywtMjMyLjU0MyAyMDQuNjY1LC0yOTEuNjk4IDc4LjE5NCwtMjkzLjczOCAwLDAgeiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBpZD0icGF0aDMyMDUiIC8+PC9nPjxnCiAgICAgICAgICAgaWQ9ImczMjA3IgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2OS41MTIyLDM0NS4yMzQ0KSI+PHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMCwwIDE4LjgwMSwtNzQuNDI1IDQwLjcyOCwtODUuNDA4IDU5LjUzOSwtNTkuNTQxIDQwLjI1OSwxMy41MDMgMzYuODIxLDE1LjY2OSAwLDAgeiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBpZD0icGF0aDMyMDkiIC8+PC9nPjwvZz48L2c+PGcKICAgICAgIGlkPSJnMzIyMyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc0MS45MTgsMTA5LjAzMzIpIj48cGF0aAogICAgICAgICBkPSJtIDAsMCAtMTcuMjM2LC05LjQwMSAtMTYuNDUyLC0yMi43MjEgLTAuNzgzLDEyLjUzNyA2LjI2OCwxNy4yMzQgMTMuMzE3LDYuMjY4IEwgMCw3LjgzMyAxNC44ODQsMy45MTcgMCwwIHogbSAxNzIuNjIyLC0yMS44MjQgYyAtMC4wMzEsMC4yNzEgLTAuMDgxLDAuNTM1IC0wLjExNywwLjgwNCAtMjAuODUsNy42NTMgLTQ5LjU5LDcuMzI3IC02Ni44NzQsMTAuOTI3IC0xMy44NDksMi44ODYgLTIzLjA0Nyw5LjExOSAtMjcuMDMyLDEyLjI5OCAtOS44NjMsLTguNDk0IC0xMi4wMjUsLTE0LjM3NyAtMTIuMDI1LC0xNC4zNzcgMCwwIC05LjgxNiwxNS4zMDkgLTMwLjE3LDI1Ljc2IC03LjA1LDMuNjIxIC0xNy43NjcsNS42OTEgLTI5LjM0MSw1LjY5MSAtMjQuMjk3LDAgLTUyLjM4NCwtOS4xNTUgLTU4LjMzOSwtMzIuMjIzIC0xMC40NTgsLTQwLjUxMSA5LjY5NywtNzYuNTk0IDQ5LjgxNCwtNzcuNjIzIDEuMzI1LC0wLjAzNCAyLjYyMywtMC4xMiAzLjg5NCwtMC4xMiAzNi4xMzEsMCA0OC44NTUsOC41NzIgNTguMzIzLDE1LjQ3OCAwLjAyNywwLjAyMSAwLjEwNCwwIDAuMTA0LDAgMCwwIDI1LjEyNiwtMTEuNTA2IDUzLjUyOSwtMTEuNTA2IDQuNDE5LDAgOS4xNTYsMC40MTUgMTQuMjQ5LDEuMDYzIDMxLjY0MSw0LjAxOCA0Ny45ODksMjguMTI0IDQzLjk4NSw2My44MjgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNkZjAwMTk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzIyNSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzIyNyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMC44NDgxLDI3MC4wMjU0KSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAtMy4wNjMsLTAuNjkxIC0xMi41MzUsMC43ODQgLTEyLjUzNSwwLjc4NCBsIDYuMjY3LC0yNS44NTMgNDMuNDgxLDEzLjMxOSAtOS4wMSwyNy40MTggQyAyOC4yMDMsMTUuNjY4IDcuODY3LDEuNzc3IDAsMCIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgaWQ9InBhdGgzMjI5IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48ZwogICAgICAgaWQ9ImczMjMxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjExLjY2MDUyLDYxNS44NTk4NCkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIC0xNi4yNDMsLTIuODcxIC0xNS40NjIsLTkuNCA0LjMyMywtMTAuOTM4IDE0LjU2OCw5Ljg5IEwgMi43NSwtOC43NzEgMCwwIHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzIzMyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzIzNSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NC4xNTczMiw2MjYuNDA4NCkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIC0xNS42NCwwLjQwNyAtMTQuMjc5LC0zLjYwOCAyLjAwOCwtOS43NDcgMTQuNzU2LDQuMjA4IEwgMS4xMTEsLTguMjE1IDAsMCB6IgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyMzciCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgZD0iTSA0MzYuNjU2MjUgMjIuMjgxMjUgQyA0MzYuNjU2MjUgMjIuMjgxMjUgMzM4LjE4Mzc1IDI1LjM4NSAyNTEgNDIuODEyNSBDIDE2My4yNDg3NSA2MC4zNTM3NSA3MC40MDYyNSA5OS42NTYyNSA3MC40MDYyNSA5OS42NTYyNSBMIDE3NS4xODc1IDQ5NS4yODEyNSBMIDMyNy45Njg3NSA0OTIuMzQzNzUgTCAzMzcuNzUgNTI3LjU5Mzc1IEMgMzM3Ljc1IDUyNy41OTM3NSAzNjUuMDk1IDUyMy4yNTg3NSAzNzMgNTE4Ljc4MTI1IEMgMzc2LjMxMzc1IDUxNi45MDM3NSAzODMuNzgxMjUgNTA4IDM4My43ODEyNSA1MDggTCAzNzcuNzUgNDg0LjY1NjI1IEwgNTA0LjIxODc1IDQwNy4xNTYyNSBMIDQzNi42NTYyNSAyMi4yODEyNSB6IE0gNDEwLjUzMTI1IDU1LjE4NzUgTCA0NjUuNjg3NSAzOTMuMzEyNSBMIDM0Ni41OTM3NSA0NTYuNjI1IEwgMjAyLjc1IDQ2Ni40Njg3NSBMIDExMiAxMTQuNDA2MjUgTCAyNjMgNzkuMTg3NSBMIDQxMC41MzEyNSA1NS4xODc1IHogIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44LDAsMCwtMC44LDAsNzY4KSIKICAgICAgIGlkPSJwYXRoMzI1MyIgLz48ZwogICAgICAgaWQ9ImczMjQ3IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4xOTkyMzgsLTAuMDI4NzkzMzEsMC4wMjY3MzA4NCwxLjA1MjA3NTYsMTcyLjQxOTM1LDQ5OC4zNzMzOSkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIGMgMCwwIC0xLjg2MSwxLjQ4MSAtOS4xNDMsLTEuNDU3IDkuNzEyLDE4Ljg2NyA5LjQzOSwzOS45ODkgOS40MzksMzkuOTg5IDAsMCAtMy4xMDYsLTIuNDY1IC0xMS4zMTEsLTguNDcgOS4yNDEsMjMuMDQ0IDUuMzM4LDcyLjUyNSA1LjMzOCw3Mi41MjUgMCwwIC0xNy40OTMsNDAuNzQ2IC0xMy42NTcsNDUuNzk5IDguODQxLDExLjY1IDIzLjgzNCwyMy45NjggNDQuMjk1LDI1LjU5NCAxNy45MzUsMS40MjQgNDQuNjA2LC00Ljk1MyA1NS44NjUsLTE1LjI4NCA0LjUzNiwtNC4xNjEgMjMuMzY3LC00Ny40OTMgMjMuMzY3LC00Ny40OTMgMCwwIDYuMTA0LC0zNS4yNzEgMTEuNjE5LC01NC4xMDggNS41MTMsLTE4LjgzOSAxMS4wNTQsLTI2LjY3NCAyMS4yODQsLTM0LjgyNSAxNy44MzEsLTE0LjIwNyAyNy4wNzYsLTI5LjkzOCAyNy4wNzYsLTI5LjkzOCBMIDE0My4zOTksMy45NDUgYyAzLjY1NSwtMTcuMzU2IDE0Ljg3NSwtMzQuMjggMjcuMzksLTQ3LjY3MiAtMTIuODYzLDEuNTA3IC0xOS42MSw4Ljc4MyAtMTkuNjEsOC43ODMgMCwwIDIuMTUxLC0xMi42NjQgOS4xMDksLTI2LjU1NCBsIDI4LjcxMiwxNS4yNjQgLTEuNzYyLDEwLjgwNSBjIC01LjEyOCw5LjMwNCAtOS4zMzYsMTUuNTM0IC05LjMzNiwxNS41MzQgMCwwIDIuMDg5LDAuOTU2IDcuMzg1LC0zLjU3MiBsIC0yLjAwNSwxMi4yOTYgYyAtNC44MTQsOS4zOTEgLTExLjc3MywxNi43NTIgLTI1LjExNSwzMS4xMTMgNS45NDQsLTYuMDg3IDE1LjQzOCwtNS4zNzkgMjAuNzUxLC00LjM1NiBsIC0wLjU3MiwzLjUxMiBjIC0yLjIzMSwxLjI3OCAtNS40OTQsMy4xNzEgLTEwLjI0MSw1Ljk1NyAtMTIuNDMsNy4yOTkgLTIyLjMyNiwyMS4wNDkgLTIyLjMyNiwyMS4wNDkgMCwwIDEyLjg1LDEuODE1IDIwLjUxMywxMS4wMjIgLTcuMzE2LC0yLjY0MSAtMTguNTg1LDAuNzk5IC0xOC41ODUsMC43OTkgLTE3LjA4Niw2Ljc3MiAtMTUuMDIyLDMwLjIxNyAtMTcuNjg3LDUwLjU4NyAtMi42NjcsMjAuMzcgLTkuMjk5LDM0LjEyNSAtOS4yOTksMzQuMTI1IDAsMCAtMC4yNDMsMi4xNDkgMTEuOTEsLTUuOTA2IC03Ljc0NCwzMy4yMTUgLTM1LjU0NSw0NC45NCAtMzUuNTQ1LDQ0Ljk0IDAsMCAyLjIyMywyLjc5IDIyLjg0MywwLjA0NCAtMTYuNDY5LDE1LjgxNyAtMzIuMzAzLDE2Ljg5NiAtMzIuMzAzLDE2Ljg5NiAwLDAgMTAuMDc3LDIuMjUgMjMuNjExLDAuMjQgMCwwIC0zLjMyNywzLjUwOCAtNy41NDksNi40NTMgTCAzNS45ODUsMTk0LjI5MSAtNzcuNTQzLDE2Ny44MTUgLTguMjExLC0xMDEuMTcgMTcuNDgxLC05OS40MTMgQyA4LjYwMiwtODUuMTE0IC0wLjM3MSwtNjMuODM3IC0yLjE1LC00MC44NTcgLTQuOTExLC01LjIwOCAwLDAgMCwwIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNDkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzMyNTUiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDQuMjIxMzQsNTgwLjg4MzUzKSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAwLC0xLjQxOCAwLjQzLC0yLjczNiAxLjE2OCwtMy44MyAxLjUyMywwLjY3NyAzLjU1MSwxLjA5NCA1Ljc4NiwxLjA5NCAyLjE2NCwwIDQuMTMzLC0wLjM5IDUuNjM5LC0xLjAyOSAwLjcxMSwxLjA4MSAxLjEyOSwyLjM3NCAxLjEyOSwzLjc2NSAwLDMuNzkgLTMuMDcyLDYuODYxIC02Ljg2MSw2Ljg2MSBDIDMuMDcxLDYuODYxIDAsMy43OSAwLDAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzI1NyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzI1OSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI1Ni4zMzExLDU5NS4zMTY0NikiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIGMgMCwtMS40MTggMC40MywtMi43MzYgMS4xNjgsLTMuODMgMS41MjQsMC42NzcgMy41NTIsMS4wOTQgNS43ODcsMS4wOTQgMi4xNjMsMCA0LjEzMiwtMC4zOSA1LjYzOCwtMS4wMjkgMC43MTIsMS4wODEgMS4xMjksMi4zNzMgMS4xMjksMy43NjUgMCwzLjc5IC0zLjA3Miw2Ljg2MSAtNi44NjEsNi44NjEgQyAzLjA3MSw2Ljg2MSAwLDMuNzkgMCwwIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzQxNzQiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Njk0NTA5LDAuMDc4MTA1NjMsLTAuMDc4MTA1NjMsMC45OTY5NDUwOSw0Ny4zNDg3NDgsLTE1LjM0ODI5OSkiPjxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMi41MDk4LDYxMC4xNTU4KSIKICAgICAgICAgaWQ9ImczMjE5Ij48cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGgzMjIxIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNkZjAwMTk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0ibSAwLDAgNC40NSwyLjc1MiA1LjM0LDMuNzg1IDcuMDUsLTguMjI2IDcuMDkzLC0zMy4zNTkgMTcuODAxLC01MS4yNTkgMTMuODYsLTMwLjIxNSAyNi4yNjEsLTEuNTUgLTYuNjg1LC0zNS42NTMgYyAwLDAgLTQ5Ljk4LC0yMS44NzEgLTQ5LjU0NSwtMjEuOTExIC00Mi42NTcsNC4wMDEgLTEyLjU1Myw0My4wNjYgLTguNjMxLDQ3LjMwMSBMIDMuNjY2LC00Ny44NjkgMCwwIHoiIC8+PC9nPjxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0Ny42MjYsNDY3LjM1NDUpIgogICAgICAgICBpZD0iZzMyMzkiPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpZD0icGF0aDMyNDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJNIDAsMCBDIC0zLjA0NCwtMC4zNDUgLTUuMjMyLC0zLjA5MiAtNC44ODgsLTYuMTM2IC00LjU0MywtOS4xOCAxLjU3NiwtMi4yNTQgMTMuMzA4LC00Ljk2MSAxMy45NzEsLTEuOTcgMy4wNDQsMC4zNDQgMCwwIiAvPjwvZz48ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzkuNDQxOSw0NzYuNTc2MikiCiAgICAgICAgIGlkPSJnMzI0MyI+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzI0NSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMCwwIEMgMy4yNzEsMS4wOCA2Ljc5OCwtMC42OTcgNy44OCwtMy45NjkgOC45NiwtNy4yNCAtMC41NSwtMy4wNDQgLTExLjI1OCwtMTEuMzI5IC0xMy4zNDUsLTguNTg2IC0zLjI3MiwtMS4wODEgMCwwIiAvPjwvZz48ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODQuMTkyOSw1MjUuOTA4MikiCiAgICAgICAgIGlkPSJnMzI2MyI+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzI2NSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMCwwIEMgMCwwIC02Ljk3MiwyOC42NzEgLTYuOTcyLDI5LjM1NSBMIDEuNTg1LDIuODY0IDkuOTk5LC0xMC41NjQgMTMuNjM0LC0zMi42OTcgNy45MjIsLTExLjA5OCAwLDAgeiBNIC0wLjYzMywtMTUuMDM2IC05LjE5LC00Ljg2IC0xNi40NzgsMjUuNzc2IGMgLTAuMjAyLDAuNjg0IDkuMTA2LC0yOC44MTEgOS4xMDYsLTI4LjgxMSBsIDguNjQsLTExLjY0MiAyLjQ2OSwtMTcuMzM2IC00LjM3LDE2Ljk3NyB6IG0gLTYuMzM5LC02LjA4NSAtMTAuNDU3LDE2LjgyNiAtNS40NDQsMjguNjQ2IDYuNjE0LC0yNy44NDIgMTEuMzExLC0xOC4wMjYgMS40MTMsLTkuNTgzIC0zLjQzNyw5Ljk3OSB6IG0gLTUzLjQ2MiwtMTMuMjQ2IC0xLjQzNywyNC45NDQgLTIuNjgyLDI4Ljc1NCA1LjEwNiwtMjkuODk1IDEuMjEyLC0yMS42NzcgNC4xMzksLTE4LjIzNiAtNi4zMzgsMTYuMTEgeiBtIC00LjI2NSwtMTkuNTUgLTYuNjY1LDE1LjUxNiAwLjQwNCwyOS4yMDUgLTAuODgyLDI4LjE2OSAzLjEwNCwtMjguMzk2IDAuODA4LC0yNi42OTcgNC4yNDIsLTE1Ljk3MiAyLjQyMywtNi42MTcgLTMuNDM0LDQuNzkyIHogbSAtOS42OTUsLTIuOTY3IC03LjExNywxNi44ODUgMS4zMTgsMzIuMDEgMCwyNS4yMjMgMi4xMTUsLTI1LjA2MSAtMC41ODEsLTMxLjI1OSA1Ljg2OSwtMTYuNDI5IDUuMDU2LC04LjY3MSAtNi42Niw3LjMwMiB6IG0gMTAzLjE0NCwtNy45NyAtNi42NzYsMjAuMzggMi4xNDEsMTEuNTQgTCAxNi40OTksLTkuMzc2IDQuNTU3LDEzLjEwNCAtNS44NzksNTMuOTcgYyAwLDAgLTguMzI1LC03LjQxIC0xNi43ODEsLTguMDggLTguNDU1LC0wLjY3MSAtMTUuMDksNC4wMTggLTE1LjA5LDQuMDE4IDAsMCAzLjU5MiwtMTcuNzYxIDguNjU5LC0zNy41OTcgNS4wNjksLTE5LjgzNiAxNy41MjgsLTQ0Ljg2NiAxNy41MjgsLTQ0Ljg2NiAwLDAgMjEuNTc4LC04LjE5NyAyNC4zMDIsLTE2LjU4NyAyLjcyNCwtOC4zOTEgLTMuNTA4LC0yMi45MTEgLTE0LjEwMiwtMjYuNTUxIC0xMC41OTMsLTMuNjQgLTMyLjI4NCwtOC4yNjIgLTMyLjI4NCwtOC4yNjIgMCwwIC0xOSwxLjUxMiAtMjAuNDM4LDE0LjI2IDAsMCA0LjEzMSwxNi40MDYgMTAuNDE4LDE5LjIyNSA2LjI4NSwyLjgxOSAyMS4zNjIsMTEuMTc0IDIxLjM2MiwxMS4xNzQgbCAtOC4yNTQsMS4zMzIgLTcuNjY0LC0xLjMzMiBjIDAsMCAtNC43ODQsMTEuMjk1IC0xMC45NzMsMzUuMDg2IC02LjE5LDIzLjc5IC04Ljk2Nyw0Mi40ODUgLTguOTY3LDQyLjQ4NSAwLDAgLTMuOTEyLC00LjM5MSAtMTQuMTk5LC00Ljg4NSAtMTAuMjg2LC0wLjQ5NCAtMTYuMDMxLDcuOTg4IC0xNi4wMzEsNy45ODggbCAxLjAyNywtMzAuMTg1IC0xLjA0OSwtMjUuODMgLTAuMTUsLTI5LjIyIDUuMTAyLC0xNS45OSAxOS44MTgsLTMwLjQ0OCBjIDAsMCAxNC4xMDIsLTkuMjkzIDMxLjcyOCwtOS4yOTMgMTYuNDUzLDEuMzI4IDUxLjEzMSwxOC4wNDcgNTEuMTMxLDE4LjA0NyBsIDkuNTM2LDE2LjY4NyB6IiAvPjwvZz48L2c+PGcKICAgICAgIGlkPSJnMzI2NyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDg0Ny4yNjM3LDMyMS41MDU5KSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAyLjI1MiwzLjUxNiA2LjY5MywxNS4zIDYuNjkzLDE1LjMgMCwwIDMuNzc4LC0xMy4zMDYgMS45MTIsLTE3LjIxMyAtMy4wNTYsLTYuNDA0IC0yMy45MDUsLTE1LjMgLTIzLjkwNSwtMTUuMyAwLDAgMTIuMTk2LDEyLjM2NCAxNS4zLDE3LjIxMyBtIC0zMy41MTQsMjMuMTYgLTAuNzU3LDU2LjM1MiBjIDAsMCAxMS4xMzYsLTE0LjAyOCAxMS44NDMsLTE5LjczOSAxLjE3NiwtOS40OTEgLTExLjA4NiwtMzYuNjEzIC0xMS4wODYsLTM2LjYxMyBtIC0xNy41NzUsMjM2LjkyMSBjIDAsMCAxMi40NTMsLTE1LjMzOCAxNC44NTQsLTIxLjM5IDEuNDI0LC0zLjU5MSAyLjI4NiwtMTUuMjg3IDIuMjg2LC0xNS4yODcgbCAtMTcuMTQsMzYuNjc3IHogTSAtOTguNTc0LC04Ni4xMzYgYyAtOS43NTcsLTAuOTA2IC0yOS44MzYsMS4wMTYgLTM4LjkxMiw0LjcwOCAtNy40OTksMy4wNSAtMjUuNzM0LDE5LjY1NiAtMjUuNzM0LDE5LjY1NiBsIDI0LjE4NywtMTAuODYgLTQuNzAxLDE3LjYyNyAxNS4yNzIsLTIyLjAwOSA0MS44MTMsLTUuMzU2IGMgMCwwIC04LjgxMiwtMy40NzcgLTExLjkyNSwtMy43NjYgbSAtNzQuNDI4LDE1Ny45NDEgYyAtNC41MTgsMTAuMDU3IC0xLjc2Myw0NC4wNjUgLTEuNzYzLDQ0LjA2NSAwLDAgNy41NDQsLTMxLjA5MyAxMi4zMzgsLTQwLjU0MSA2Ljk3OCwtMTMuNzU0IDM3LjAxNSwtNDkuMzUyIDM3LjAxNSwtNDkuMzUyIDAsMCAtNDAuODI0LDMwLjc1OSAtNDcuNTksNDUuODI4IG0gLTE3LjgzMywtMTQ5LjQ3IC00MC40MDcsMjQuNzI0IDEuNjM2LC0xNy41NzUgMC4wMjYsLTAuMDM1IC01LjE3OCwtMjkuODExIC0yLjA1NiwtMTAuNzAxIDAuMzgzLC0zMy4zNCAtNC45ODIsMzYuNDA2IDYuNDEsNDEuNDUgLTExLjA2Myw4LjMzOCAtMTcuNTMyLDQzLjE1OSAyMy41MDIsLTM4Ljc3OSAyLjM1MSwxNC4xMDEgNDAuNjM0LC0yNS42OTUgMTEuOTI0LC01LjY1MSAxMy44MDksLTI4Ljg3MSAtMTkuNDU3LDIyLjI4IHogbSAtODUuNTIyLDEzOC44NjMgMTcuMjEyLC0zNC40MjQgYyAwLDAgLTEyLjk3MiwxMS4xODUgLTE1LjI5OSwxNi4yNTcgLTEuOTA1LDQuMTUyIC0xLjkxMywxOC4xNjcgLTEuOTEzLDE4LjE2NyBtIC0yLjM2Nyw2Ni4wNDIgYyAwLDAgLTYuMjA2LDE1LjU4MSAtNi4zMjMsMjEuMDgyIC0wLjE2OCw3LjgxNyA0LjU2OCwyMy4xNDggNy42OTUsMzAuMzE1IDAuNzU1LDEuNzMgNC4xMDMsNi4zNDEgNC4xMDMsNi4zNDEgMCwwIC00LjY1NCwtMjQuNTQyIC01LjM0NywtMzIuODI5IC0wLjUxOCwtNi4yMDUgLTAuMTI4LC0yNC45MDkgLTAuMTI4LC0yNC45MDkgbSAtNy4xOTUsLTExNC44MDkgYyAtMC4zMzQsMy4zNjMgMS45MTIsMTMuMzg3IDEuOTEyLDEzLjM4NyBsIDMuODI1LC0yOS42NDMgYyAwLDAgLTUuMzEzLDExLjk2NyAtNS43MzcsMTYuMjU2IG0gLTIwLjA4Miw1My41NDkgYyAtMS4zOTQsMy41NzEgLTAuOTU2LDE1LjMwMSAtMC45NTYsMTUuMzAxIGwgMTMuMzg4LC0zMC42IGMgMCwwIC0xMC42MzksMTAuNzEgLTEyLjQzMiwxNS4yOTkgbSAtNi4wMywxMDYuNzk1IGMgMCwwIC0wLjMxNSwzNS44MzEgNC42MzcsNDYuMzc5IDQuNTMxLDkuNjQ3IDI5LjkzNiwzMC4zNTYgMjkuOTM2LDMwLjM1NiAwLDAgLTE3LjgyNCwtMjIuNDcgLTIxLjUwMywtMzEuMiAtNS4wODksLTEyLjA3NyAtMTAuMTE5LC01MS40MzcgLTEwLjExOSwtNTEuNDM3IGwgLTIuOTUxLDUuOTAyIHogTSA1MC4xMjEsMjA1LjAxIGMgMy4zMzUsLTkuMTU1IDEuMTY4LC0zOC45NTYgMS4xNjgsLTM4Ljk1NiAwLDAgLTUuNDUxLDI5Ljk4NyAtOS4yMjEsMzkuMzY2IC00LjIxNCwxMC40ODcgLTIzLjAxNCwzOC45MDcgLTIzLjAxNCwzOC45MDcgMCwwIDI2Ljc4LC0yNy41NDYgMzEuMDY3LC0zOS4zMTcgTSA1NC41MDYsOTUuNjI0IGMgMCwwIDYuODg0LC0xOC41ODYgNS43MzgsLTI0Ljg2MSAtMC43NzMsLTQuMjQxIC05LjU2MiwtMTQuMzQ1IC05LjU2MiwtMTQuMzQ1IDAsMCAyLjQxNCwxMi44NzQgMi44NjgsMTcuMjEyIDAuNTczLDUuNDc0IDAuOTU2LDIxLjk5NCAwLjk1NiwyMS45OTQgTSAxOS4xMjUsLTEzLjM4OSBjIDAsMCA5LjY1NiwyMi4xODMgMTEuMDYyLDMwLjA2OCAxLjIzNSw2Ljk0MSAwLDI4LjIwMyAwLDI4LjIwMyAwLDAgOC40NzcsLTIyLjgxOSA3LjEwNiwtMzAuNTM4IEMgMzUuODQ1LDYuMTgzIDE5LjEyNSwtMTMuMzg5IDE5LjEyNSwtMTMuMzg5IG0gNDQxLjQ4NywtNDAuOTY1IGMgLTMuMjQ5LDguOTM1IC02LjU4NywxNy4yMyAtMTAuMDEsMjQuOTI4IGwgLTEuODYyLDI4Ljg3MyAtOC44NTcsLTQuODc2IC0yNS44NjIsNDkuNDU3IC00LjgyOCwtMTAuMzQgYyAtMzIuNjksMzEuNDggLTcwLjQ1NywzNC4yODQgLTExMS45ODIsMzEuNjQ2IC02NS41NjgsLTQuMTYzIC05MS41ODcsLTQxLjYzIC03OS4wOTgsLTU3LjI0MSAxMi40OSwtMTUuNjEzIDE4LjczMywtNS4yMDUgNDAuNTg5LDUuMjAzIDIxLjg1OCwxMC40MDcgNzQuOTM3LDI2LjAxNyAxMTAuMzIzLC0yLjA4MiAzNS4zODYsLTI4LjEgODYuMzgzLC0xMDkuMjgxIDUwLjk5NywtMTY5LjY0NiAtMzUuMzg2LC02MC4zNjUgLTEwNS42MjYsLTEwNS4zODUgLTE4Mi4xMzUsLTg4LjQ2NSAtODYuNDIyLDE5LjExMiAtMTI2LjA3OCw2MC4wODIgLTE3Ny42NzUsNzQuODExIC04LjMxMSwxLjMzNCAtMTguMzQ3LDIuNzg5IC0yNC43OTEsMy4xOTEgLTEyLjY3MSwwLjc5MiAtMjEuNiwxNC43MjcgLTIxLjYsMTQuNzI3IGwgMTcuMTgxLC05LjMyNyAyNS43NjMsLTIuMzYgYyAyLjMzMSwxNCA5LjM5NSw0OS4wNTQgOS4zOTUsNDkuMDU0IGwgLTguNjg4LDg3LjI5IC0xOC42NjgsLTI3LjA2IC03LjI0NiwxMC4xODQgLTIxLjM0OSwtMjIuOTE1IC0xNS40NzMsLTEuOTU5IDE0LjY3LDYuNTk2IDIxLjM4LDI5LjQwOSA2LjcsLTEzLjc1NCAxOS40ODUsMjQuNjkxIDAuMDA0LC0wLjAxMSAxNi40Nyw5LjUyNSAtMy4xMjMsNjguNjkgMTAuNDA3LC0xMC40MDcgLTQuMTYzLDQwLjU5IDIyLjE3Myw3MS41MDIgLTM0LjY2Miw5MS44OTkgMTYuNjUyLC00LjE2MiAtMTkuNzczLDM1LjM4NiAtNDAuNTkxLDM4LjUwOSA5LjM2OCwxNy42OTMgLTkzLjY3MSw5LjM2OCAtMjAuMjI5LC03LjE2NSAtMTguNDM3LDM4LjI5MiAxMy4yMiw4LjgxMyAtNjkuMDM5LDE0LjY5IDIuOTM4LDE5LjA5NSAtODAuNzkxLC0yMy4zMDMgLTI2LjE0NywtMTkuMTkxIC0xMTYuMzM5LDAgOC44MTQsLTEwLjE4OCAtNDIuNTAxLC00MC42NDEgLTguOTExLC03OC40OTEgNy4zNDQsLTEuNDk0IDguODE0LC00NS41NDggMjMuNTAyLC0yNC45NzggMTkuMDk2LDQ1LjUzMyAtMTQuNjg5LC00LjQwOSA0MS4xMyw0OC40NzQgMzAuODQ4LDI2LjQ0IC0xNC42OSwtMS40NjkgMTkuMDk2LDE2LjE1OCAxMDUuNzYzLDIuOTM4IDcyLjkxNywxNS43OTkgLTQxLjYyMywtMTQuNzQyIC0zMC4xODEsLTcuMjg1IC0xMDQuMDc5LC0xLjA0MyAxLjA0LC0xMS40NDkgLTY0LjUyNiwtNjEuNDAzIDE0LjU3MSwyLjA4MSAtMjcuODQ0LC02My4yOCBjIC0xNS4wMTcsLTEzLjcxOSAtMjguMDYsLTU1LjAxNiAtMzYuNjg3LC03NS4xNDUgLTkuMzY3LC0yMS44NTYgLTIwLjgxNiwtMzkuNTUgLTIwLjgxNiwtMzkuNTUgMCwwIC0zMC4xODIsLTYuMjQ0IC02MS40MDUsLTE4LjczNCAtMzEuMjI0LC0xMi40ODkgLTQzLjcxMyw0LjE2MyAtNDMuNzEzLDQuMTYzIGwgLTMuMTIyLC04LjMyNiBjIDAsMCAtMTguMjgsLTkuMDU3IC0zOS4zMDMsLTExLjgyNSAtMTYuNDMsLTIuMTYyIC05Ljk2NywtMjAuOTQ2IC05LjYxMywtMjYuNjg0IDAuNDA1LC02LjU3IDQuMjk0LC0xOS43NzQgOC4zMjUsLTI0Ljk3OCAzLjIyNywtNC4xNjUgMTIuNTI1LC0xMC40MjUgMTcuNjk0LC0xMS40NDggMTIuMDM5LC0yLjM4NSAyOC4xMDEsNS4yMDQgNDUuNzk0LDE3LjY5MyA3NC45MzYsLTYuMjQ1IDEwMy4yNDEsLTEwLjMyMSAxMjYuOTc0LDguMzI2IDE0LjU3MiwxMS40NDggMjkuMTQyLDIyLjg5NyA0MS42MzEsNDAuNTkgbCAtMTUuNjExLDQyLjY3MSAtOC4zMjcsLTE0LjU2OSAtNS44MDcsNDQuOTMxIDEuODQxLDE3Ljg2MyA1LjU0NywtNTEuMjM0IDcuNzg5LDkuMjU3IDM1LjM4NywtNzAuNzcyIDExLjQ0OCw0LjE2NCBjIDAsMCAxMy41MTUsLTE4LjU4MyAyMy4wNTcsLTMyLjg4MSBsIC0yNi4wMiwyNS4wMDYgLTEwLjIyNCwtNS45NjQgLTExLjA3NiwyMi4xNTIgYyAwLDAgLTEzLjM4MywtMi4zNTMgLTI0LjcyNywtMTguMDI3IC0xNS44NjIsLTIxLjkxNSAtMjMuNTAzLC0yNC42NzggLTE3LjYyNywtNzguNzM1IDUuODc2LC01NC4wNTUgMTYuNDUyLC01NC4wNTUgNjQuNjMyLC0xMjEuMDM5IDExLjc1MiwtMTYuNDUyIDE0LjYwMSwtMTguNDY1IDE0LjYwMSwtMTguNDY1IGwgLTUxLjAzLC0yNy4zNjUgLTIyLjMyNywtNS44NzYgLTIxLjM4NCwtMTEuMjggYyAwLDAgNC43NDQsLTguMTc0IDcuNDk1LC05LjM2OSA0LjczOSwtMi4wNjIgMjAuNjEzLDEuNTYgMjAuNjEzLDEuNTYgMCwwIDE1LjYwMywtNi43NjMgMzYuNzU2LC02Ljc2MyAyMS4xNTIsMCAzMi45MDMsOC4yMjUgNDcuMDA1LDguMjI1IDE0LjEwMSwwIDM4Ljc4LC04LjIyNSA1Ny41ODIsLTUuODc2IDE4LjgwMiwyLjM1MSAyMi4zMjgsMTIuOTI3IDIyLjMyOCwxMi45MjcgbCAtNTEuNzA2LDU0LjA1NyAtNC42NzUsNDcuMDk2IC01Ni42MDUsNzUuNzY5IC0zLjAzOCw5LjQzNyA2NS43OTEsLTgyLjI0IDUuMTA3LC00Ni43NSA1NS4xNjEsLTYxLjQwNSAzNy40NjgsLTguMzI1IGMgMCwwIC0wLjI1NywxLjIyNiAtMC42MjUsMy4xMTQgLTYuMTQ2LDE1LjY2NCAtNi45ODYsMzQuODk0IC0xLjk5OSw1NC4yMTQgNi45NzUsMjcuMDEyIDM4Ljg1LDM2LjU5NiA2NC4wMjksMzYuNTk2IDEyLjUwNiwwIDI0LjE3OSwtMi4zMTIgMzIuMDI1LC02LjM0MSAxMi45MTIsLTYuNjMgMjEuODUxLC0xNS4wNzYgMjcuMDI5LC0yMC45MTcgMy42NzMsNC41MTYgNy4xMzMsNy4xOTQgMTEuODMzLDExLjExIDAsMCAxMi4xNDMsLTExLjc1MSA0NS4wNDcsLTE0LjEwMSAyNy4xNCwtMS45MzkgNDUuMDQ4LC04LjIyNiA3MC45MDEsLTE5LjU4NSA1My42NzYsLTIzLjU4NCAxMDIuNSwtNjEuNzg1IDIwNy42MTgsLTQ1LjEzMiAxMDUuMTE5LDE2LjY1MSAyMDYuMDczLDExMy40NDQgMTY0LjQ0MiwyMjcuOTI5IgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNjkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMzI5LjI2Mzk4LDcyMy4zMDgyIC0xMTguMDI1LC0xOS4yIC0xMjAuODAwMDAzLC0yOC4xNzUgNzIuNjAwMDAzLC0yODEuNjUgMTE1LjA3NSw3Ljg3NSA5NS4yNzUsNTAuNjUgLTQ0LjEyNSwyNzAuNSB6IG0gLTYuNTUsLTEwLjU3NSA0MC42NzUsLTI1Mi40IC04Ny44NSwtNDcuMjc1IC0xMDYuMTI1LC03LjMyNSAtNjYuOTUsMjYyLjggMTExLjQsMjYuMjc1IDEwOC44NSwxNy45MjUgeiIKICAgICAgIGlkPSJwYXRoMzI1My0zIiAvPjwvZz48L3N2Zz4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/compress.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvbXByZXNzaW9uIEhlbHBlcjwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImJhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBTY3JpcHQgY29tcHJlc3Npb24KICAgaGVscGVyICovCjwvcHJlPgoKICAgIDxwPlRvIG9wdGltaXplIGxvYWRpbmcgQ29kZU1pcnJvciwgZXNwZWNpYWxseSB3aGVuIGluY2x1ZGluZyBhCiAgICBidW5jaCBvZiBkaWZmZXJlbnQgbW9kZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbWJpbmUgYW5kCiAgICBtaW5pZnkgKGFuZCBwcmVmZXJhYmx5IGFsc28gZ3ppcCkgdGhlIHNjcmlwdHMuIFRoaXMgcGFnZSBtYWtlcwogICAgdGhvc2UgZmlyc3QgdHdvIHN0ZXBzIHZlcnkgZWFzeS4gU2ltcGx5IHNlbGVjdCB0aGUgdmVyc2lvbiBhbmQKICAgIHNjcmlwdHMgeW91IG5lZWQgaW4gdGhlIGZvcm0gYmVsb3csIGFuZAogICAgY2xpY2sgPHN0cm9uZz5Db21wcmVzczwvc3Ryb25nPiB0byBkb3dubG9hZCB0aGUgbWluaWZpZWQgc2NyaXB0CiAgICBmaWxlLjwvcD4KCiAgICA8Zm9ybSBpZD0iZm9ybSIgYWN0aW9uPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL3VnbGlmeWpzIiBtZXRob2Q9InBvc3QiPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZG93bmxvYWQiIG5hbWU9ImRvd25sb2FkIiB2YWx1ZT0iY29kZW1pcnJvci1jb21wcmVzc2VkLmpzIi8+CiAgICAgIDxwPlZlcnNpb246IDxzZWxlY3QgaWQ9InZlcnNpb24iIG9uY2hhbmdlPSJzZXRWZXJzaW9uKHRoaXMpOyIgc3R5bGU9InBhZGRpbmc6IDFweCI+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+SEVBRDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4zO2Y9Ij4yLjM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMjU7Zj0iPjIuMjU8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMjQ7Zj0iPjIuMjQ8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMjM7Zj0iPjIuMjM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMjI7Zj0iPjIuMjI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMjE7Zj0iPjIuMjE8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMjtmPSI+Mi4yPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjE4O2Y9Ij4yLjE4PC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjE2O2Y9Ij4yLjE2PC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjE1O2Y9Ij4yLjE1PC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjEzO2Y9Ij4yLjEzPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjEyO2Y9Ij4yLjEyPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjExO2Y9Ij4yLjExPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjE7Zj0iPjIuMTwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4wMjtmPSI+Mi4wMjwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4wMTtmPSI+Mi4wMTwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4wO2Y9Ij4yLjA8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9YmV0YTI7Zj0iPmJldGEyPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPWJldGExO2Y9Ij5iZXRhMTwvb3B0aW9uPgogICAgICA8L3NlbGVjdD48L3A+CgogICAgICA8c2VsZWN0IG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iMjAiIG5hbWU9ImNvZGVfdXJsIiBzdHlsZT0id2lkdGg6IDQwZW07IiBjbGFzcz0iZmllbGQiIGlkPSJmaWxlcyI+CiAgICAgICAgPG9wdGdyb3VwIGxhYmVsPSJDb2RlTWlycm9yIExpYnJhcnkiPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi9jb2RlbWlycm9yLmpzIiBzZWxlY3RlZD5jb2RlbWlycm9yLmpzPC9vcHRpb24+CiAgICAgICAgPC9vcHRncm91cD4KICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9Ik1vZGVzIj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2NsaWtlL2NsaWtlLmpzIj5jbGlrZS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvY2xvanVyZS9jbG9qdXJlLmpzIj5jbG9qdXJlLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9jb2ZmZWVzY3JpcHQvY29mZmVlc2NyaXB0LmpzIj5jb2ZmZWVzY3JpcHQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2Nzcy9jc3MuanMiPmNzcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvZGlmZi9kaWZmLmpzIj5kaWZmLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9lY2wvZWNsLmpzIj5lY2wuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2VybGFuZy9lcmxhbmcuanMiPmVybGFuZy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvZ2ZtL2dmbS5qcyI+Z2ZtLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9nby9nby5qcyI+Z28uanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2dyb292eS9ncm9vdnkuanMiPmdyb292eS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvaGFza2VsbC9oYXNrZWxsLmpzIj5oYXNrZWxsLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9odG1sZW1iZWRkZWQvaHRtbGVtYmVkZGVkLmpzIj5odG1sZW1iZWRkZWQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPmh0bWxtaXhlZC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj5qYXZhc2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9qaW5qYTIvamluamEyLmpzIj5qaW5qYTIuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2xlc3MvbGVzcy5qcyI+bGVzcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvbHVhL2x1YS5qcyI+bHVhLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9tYXJrZG93bi9tYXJrZG93bi5qcyI+bWFya2Rvd24uanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL215c3FsL215c3FsLmpzIj5teXNxbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvbnRyaXBsZXMvbnRyaXBsZXMuanMiPm50cmlwbGVzLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9wYXNjYWwvcGFzY2FsLmpzIj5wYXNjYWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3BlcmwvcGVybC5qcyI+cGVybC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcGhwL3BocC5qcyI+cGhwLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9waWcvcGlnLmpzIj5waWcuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3Bsc3FsL3Bsc3FsLmpzIj5wbHNxbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcHJvcGVydGllcy9wcm9wZXJ0aWVzLmpzIj5wcm9wZXJ0aWVzLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9weXRob24vcHl0aG9uLmpzIj5weXRob24uanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3Ivci5qcyI+ci5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcnBtL2NoYW5nZXMvY2hhbmdlcy5qcyI+cnBtL2NoYW5nZXMuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3JwbS9zcGVjL3NwZWMuanMiPnJwbS9zcGVjLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9yc3QvcnN0LmpzIj5yc3QuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3J1YnkvcnVieS5qcyI+cnVieS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcnVzdC9ydXN0LmpzIj5ydXN0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9zY2hlbWUvc2NoZW1lLmpzIj5zY2hlbWUuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3NoZWxsL3NoZWxsLmpzIj5zaGVsbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc21hbGx0YWxrL3NtYWxsdGFsay5qcyI+c21hbGx0YWxrLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9zbWFydHkvc21hcnR5LmpzIj5zbWFydHkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3NwYXJxbC9zcGFycWwuanMiPnNwYXJxbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc3RleC9zdGV4LmpzIj5zdGV4LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS90aWRkbHl3aWtpL3RpZGRseXdpa2kuanMiPnRpZGRseXdpa2kuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3Rpa2kvdGlraS5qcyI+dGlraS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvdmJzY3JpcHQvdmJzY3JpcHQuanMiPnZic2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS92ZWxvY2l0eS92ZWxvY2l0eS5qcyI+dmVsb2NpdHkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3Zlcmlsb2cvdmVyaWxvZy5qcyI+dmVyaWxvZy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUveG1sL3htbC5qcyI+eG1sLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS94cXVlcnkveHF1ZXJ5LmpzIj54cXVlcnkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3lhbWwveWFtbC5qcyI+eWFtbC5qczwvb3B0aW9uPgogICAgICAgIDwvb3B0Z3JvdXA+CiAgICAgICAgPG9wdGdyb3VwIGxhYmVsPSJVdGlsaXRpZXMgYW5kIGFkZC1vbnMiPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL292ZXJsYXkuanMiPm92ZXJsYXkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9ydW5tb2RlLmpzIj5ydW5tb2RlLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPnNpbXBsZS1oaW50LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvamF2YXNjcmlwdC1oaW50LmpzIj5qYXZhc2NyaXB0LWhpbnQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9mb2xkY29kZS5qcyI+Zm9sZGNvZGUuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9kaWFsb2cuanMiPmRpYWxvZy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL3NlYXJjaC5qcyI+c2VhcmNoLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvc2VhcmNoY3Vyc29yLmpzIj5zZWFyY2hjdXJzb3IuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9mb3JtYXR0aW5nLmpzIj5mb3JtYXR0aW5nLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvbWF0Y2gtaGlnaGxpZ2h0ZXIuanMiPm1hdGNoLWhpZ2hsaWdodGVyLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvY2xvc2V0YWcuanMiPmNsb3NldGFnLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvbG9hZG1vZGUuanMiPmxvYWRtb2RlLmpzPC9vcHRpb24+CiAgICAgICAgPC9vcHRncm91cD4KICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9IktleW1hcHMiPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2tleW1hcC9lbWFjcy5qcyI+ZW1hY3MuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9rZXltYXAvdmltLmpzIj52aW0uanM8L29wdGlvbj4KICAgICAgICA8L29wdGdyb3VwPgogICAgICA8L3NlbGVjdD48L3A+CgogICAgICA8cD4KICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCI+Q29tcHJlc3M8L2J1dHRvbj4gd2l0aCA8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9taXNob28vVWdsaWZ5SlMvIj5VZ2xpZnlKUzwvYT4KICAgICAgPC9wPgoKICAgICAgPHA+Q3VzdG9tIGNvZGUgdG8gYWRkIHRvIHRoZSBjb21wcmVzc2VkIGZpbGU6PHRleHRhcmVhIG5hbWU9ImpzX2NvZGUiIHN0eWxlPSJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxNWVtOyIgY2xhc3M9ImZpZWxkIj48L3RleHRhcmVhPjwvcD4KICAgIDwvZm9ybT4KCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgIGZ1bmN0aW9uIHNldFZlcnNpb24odmVyKSB7CiAgICAgICAgdmFyIHVybHByZWZpeCA9IHZlci5vcHRpb25zW3Zlci5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGVzIiksIG07CiAgICAgICAgZm9yICh2YXIgb3B0Z3IgPSBzZWxlY3QuZmlyc3RDaGlsZDsgb3B0Z3I7IG9wdGdyID0gb3B0Z3IubmV4dFNpYmxpbmcpCiAgICAgICAgICBmb3IgKHZhciBvcHQgPSBvcHRnci5maXJzdENoaWxkOyBvcHQ7IG9wdCA9IG9wdC5uZXh0U2libGluZykgewogICAgICAgICAgICBpZiAob3B0Lm5vZGVOYW1lICE9ICJPUFRJT04iKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBlbHNlIGlmIChtID0gb3B0LnZhbHVlLm1hdGNoKC9eaHR0cDpcL1wvY29kZW1pcnJvci5uZXRcLyguKikkLykpCiAgICAgICAgICAgICAgb3B0LnZhbHVlID0gdXJscHJlZml4ICsgbVsxXTsKICAgICAgICAgICAgZWxzZSBpZiAobSA9IG9wdC52YWx1ZS5tYXRjaCgvaHR0cDpcL1wvbWFyaWpuaGF2ZXJiZWtlLm5sXC9naXRcL2NvZGVtaXJyb3IyXD9hPWJsb2JfcGxhaW47aGI9W147XSs7Zj0oLiopJC8pKQogICAgICAgICAgICAgIG9wdC52YWx1ZSA9IHVybHByZWZpeCArIG1bMV07CiAgICAgICAgICB9CiAgICAgICB9CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/docs.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ym9keSB7CiAgZm9udC1mYW1pbHk6IERyb2lkIFNhbnMsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWF4LXdpZHRoOiA2NC4zZW07CiAgbWFyZ2luOiAzZW0gYXV0bzsKICBwYWRkaW5nOiAwIDFlbTsKfQoKaDEgewogIGxldHRlci1zcGFjaW5nOiAtM3B4OwogIGZvbnQtc2l6ZTogMy4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogMDsKfQoKaDIgewogIGZvbnQtc2l6ZTogMS4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogLjVlbSAwOwogIGxldHRlci1zcGFjaW5nOiAtMXB4Owp9CgpoMyB7CiAgZm9udC1zaXplOiAxZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbWFyZ2luOiAuNGVtIDA7Cn0KCnByZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKICBib3JkZXItcmFkaXVzOiA2cHg7CiAgcGFkZGluZzogMWVtOwp9CgpwcmUuY29kZSB7CiAgbWFyZ2luOiAwIDFlbTsKfQoKLmdyZXkgewogIGZvbnQtc2l6ZTogMi4yZW07CiAgcGFkZGluZzogLjVlbSAxZW07CiAgbGluZS1oZWlnaHQ6IDEuMmVtOwogIG1hcmdpbi10b3A6IC41ZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgppbWcubG9nbyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAtMjVweDsKICBib3R0b206IDRweDsKfQoKYTpsaW5rLCBhOnZpc2l0ZWQsIC5xdWFzaWxpbmsgewogIGNvbG9yOiAjZGYwMDE5OwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIsIC5xdWFzaWxpbms6aG92ZXIgewogIGNvbG9yOiAjODAwMDA0Owp9CgpoMSBhOmxpbmssIGgxIGE6dmlzaXRlZCwgaDEgYTpob3ZlciB7CiAgY29sb3I6IGJsYWNrOwp9Cgp1bCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmctbGVmdDogMS4yZW07Cn0KCmEuZG93bmxvYWQgewogIGNvbG9yOiB3aGl0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYwMDE5OwogIHdpZHRoOiAxMDAlOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDEuMjNlbTsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7CiAgYm9yZGVyLXJhZGl1czogNnB4OwogIHBhZGRpbmc6IC41ZW0gMDsKICBtYXJnaW4tYm90dG9tOiAxZW07Cn0KCmEuZG93bmxvYWQ6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNiYjAwMTA7Cn0KCi5yZWwgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5yZWwtbm90ZSB7CiAgY29sb3I6ICM3Nzc7CiAgZm9udC1zaXplOiAuOWVtOwogIG1hcmdpbi10b3A6IC4xZW07Cn0KCi5sb2dvLWJyYWNlcyB7CiAgY29sb3I6ICNkZjAwMTk7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRvcDogLTRweDsKfQoKLmJsayB7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5sZWZ0IHsKICB3aWR0aDogMzdlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07CiAgcGFkZGluZy1ib3R0b206IDFlbTsKfQoKLmxlZnQxIHsKICB3aWR0aDogMTUuMjRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjQ1ZW07Cn0KCi5sZWZ0MiB7CiAgd2lkdGg6IDE1LjI0ZW07Cn0KCi5yaWdodCB7CiAgd2lkdGg6IDIwLjY4ZW07Cn0KCi5sZWZ0YmlnIHsKICB3aWR0aDogNDIuNDRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07Cn0KCi5yaWdodHNtYWxsIHsKICB3aWR0aDogMTUuMjRlbTsKfQoKLmNsZWFyOmFmdGVyIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwOwogIGNvbnRlbnQ6ICIgIjsKICBjbGVhcjogYm90aDsKICBoZWlnaHQ6IDA7Cn0KLmNsZWFyIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9Ci8qIHN0YXJ0IGNvbW1lbnRlZCBiYWNrc2xhc2ggaGFjayBcKi8KKiBodG1sIC5jbGVhciB7IGhlaWdodDogMSU7IH0KLmNsZWFyIHsgZGlzcGxheTogYmxvY2s7IH0KLyogY2xvc2UgY29tbWVudGVkIGJhY2tzbGFzaCBoYWNrICovCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/internals.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEludGVybmFsczwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgICA8c3R5bGU+ZGwgZGwge21hcmdpbjogMDt9IC51cGRhdGUge2NvbG9yOiAjZDQwICFpbXBvcnRhbnR9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIChSZS0pIEltcGxlbWVudGluZyBBIFN5bnRheC0KICAgSGlnaGxpZ2h0aW5nIEVkaXRvciBpbiBKYXZhU2NyaXB0ICovCjwvcHJlPgoKPGRpdiBjbGFzcz0iY2xlYXIiPjxkaXYgY2xhc3M9ImxlZnRiaWcgYmxrIj4KCjxwIHN0eWxlPSJmb250LXNpemU6IDg1JSIgaWQ9ImludHJvIj4KICA8c3Ryb25nPlRvcGljOjwvc3Ryb25nPiBKYXZhU2NyaXB0LCBjb2RlIGVkaXRvciBpbXBsZW1lbnRhdGlvbjxicj4KICA8c3Ryb25nPkF1dGhvcjo8L3N0cm9uZz4gTWFyaWpuIEhhdmVyYmVrZTxicj4KICA8c3Ryb25nPkRhdGU6PC9zdHJvbmc+IE1hcmNoIDJuZCAyMDExICh1cGRhdGVkIE5vdmVtYmVyIDEzdGggMjAxMSkKPC9wPgoKPHA+VGhpcyBpcyBhIGZvbGxvd3VwIHRvCm15IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5CcnV0YWwgT2R5c3NleSB0byB0aGUKRGFyayBTaWRlIG9mIHRoZSBET00gVHJlZTwvYT4gc3RvcnkuIFRoYXQgb25lIGRlc2NyaWJlcyB0aGUKbWluZC1iZW5kaW5nIHByb2Nlc3Mgb2YgaW1wbGVtZW50aW5nICh3aGF0IHdvdWxkIGJlY29tZSkgQ29kZU1pcnJvciAxLgpUaGlzIG9uZSBkZXNjcmliZXMgdGhlIGludGVybmFscyBvZiBDb2RlTWlycm9yIDIsIGEgY29tcGxldGUgcmV3cml0ZQphbmQgcmV0aGluayBvZiB0aGUgb2xkIGNvZGUgYmFzZS4gSSB3YW50ZWQgdG8gZ2l2ZSB0aGlzIHBpZWNlIGFub3RoZXIKSHVudGVyIFRob21wc29uIGNvcHljYXQgc3VidGl0bGUsIGJ1dCBzb21laG93IHRoYXQgd291bGQgYmUgb3V0IG9mCnBsYWNl4oCUdGhlIHByb2Nlc3MgdGhpcyB0aW1lIGFyb3VuZCB3YXMgb25lIG9mIHN0cmFpZ2h0Zm9yd2FyZAplbmdpbmVlcmluZywgcmVxdWlyaW5nIG5vIHNlcmlvdXMgbWluZC1iZW5kaW5nIHdoYXRzb2V2ZXIuPC9wPgoKPHA+U28sIHdoYXQgaXMgd3Jvbmcgd2l0aCBDb2RlTWlycm9yIDE/IEknZCBlc3RpbWF0ZSwgYnkgbWFpbGluZyBsaXN0CmFjdGl2aXR5IGFuZCBnZW5lcmFsIHNlYXJjaC1lbmdpbmUgcHJlc2VuY2UsIHRoYXQgaXQgaGFzIGJlZW4KaW50ZWdyYXRlZCBpbnRvIGFib3V0IGEgdGhvdXNhbmQgc3lzdGVtcyBieSBub3cuIFRoZSBtb3N0IHByb21pbmVudApvbmUsIHNpbmNlIGEgZmV3IHdlZWtzLApiZWluZyA8YSBocmVmPSJodHRwOi8vZ29vZ2xlY29kZS5ibG9nc3BvdC5jb20vMjAxMS8wMS9tYWtlLXF1aWNrLWZpeGVzLXF1aWNrZXItb24tZ29vZ2xlLmh0bWwiPkdvb2dsZQpjb2RlJ3MgcHJvamVjdCBob3N0aW5nPC9hPi4gSXQgd29ya3MsIGFuZCBpdCdzIGJlaW5nIHVzZWQgd2lkZWx5LjwvYT4KCjxwPlN0aWxsLCBJIGRpZCBub3Qgc3RhcnQgcmVwbGFjaW5nIGl0IGJlY2F1c2UgSSB3YXMgYm9yZWQuIENvZGVNaXJyb3IKMSB3YXMgaGVhdmlseSByZWxpYW50IG9uIDxjb2RlPmRlc2lnbk1vZGU8L2NvZGU+Cm9yIDxjb2RlPmNvbnRlbnRFZGl0YWJsZTwvY29kZT4gKGRlcGVuZGluZyBvbiB0aGUgYnJvd3NlcikuIE5laXRoZXIgb2YKdGhlc2UgYXJlIHdlbGwgc3BlY2lmaWVkIChIVE1MNSB0cmllcwp0byA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lZGl0aW5nLmh0bWwjY29udGVudGVkaXRhYmxlIj5zcGVjaWZ5PC9hPgp0aGVpciBiYXNpY3MpLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZXkgdGVuZCB0byBiZSBvbmUgb2YgdGhlIG1vcmUKb2JzY3VyZSBhbmQgYnVnZ3kgYXJlYXMgb2YgYnJvd3NlciBmdW5jdGlvbmFsaXR54oCUQ29kZU1pcnJvciwgYnkgdXNpbmcKdGhpcyBmdW5jdGlvbmFsaXR5IGluIGEgbm9uLXR5cGljYWwgd2F5LCB3YXMgY29uc3RhbnRseSBydW5uaW5nIHVwCmFnYWluc3QgYnJvd3NlciBidWdzLiBXZWJLaXQgd291bGRuJ3Qgc2hvdyBhbiBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YKdGhlIGRvY3VtZW50LCBhbmQgaW4gc29tZSByZWxlYXNlcyB3b3VsZCBzdWRkZW5seSBnZXQgdW5iZWFyYWJseSBzbG93LgpGaXJlZm94IHdvdWxkIHNob3cgdGhlIGN1cnNvciBpbiB0aGUgd3JvbmcgcGxhY2UuIEludGVybmV0IEV4cGxvcmVyCndvdWxkIGluc2lzdCBvbiBsaW5raWZ5aW5nIGV2ZXJ5dGhpbmcgdGhhdCBsb29rZWQgbGlrZSBhIFVSTCBvciBlbWFpbAphZGRyZXNzLCBhIGJlaGF2aW91ciB0aGF0IGNhbid0IGJlIHR1cm5lZCBvZmYuIFNvbWUgYnVncyBJIG1hbmFnZWQgdG8Kd29yayBhcm91bmQgKHdoaWNoIHdhcyBvZnRlbiBhIGZydXN0cmF0aW5nLCBwYWluZnVsIHByb2Nlc3MpLCBvdGhlcnMsCnN1Y2ggYXMgdGhlIEZpcmVmb3ggY3Vyc29yIHBsYWNlbWVudCwgSSBnYXZlIHVwIG9uLCBhbmQgaGFkIHRvIHRlbGwKdXNlciBhZnRlciB1c2VyIHRoYXQgdGhleSB3ZXJlIGtub3duIHByb2JsZW1zLCBidXQgbm90IHNvbWV0aGluZyBJCmNvdWxkIGhlbHAuPC9wPgoKPHA+QWxzbywgdGhlcmUgaXMgdGhlIGZhY3QgdGhhdCA8Y29kZT5kZXNpZ25Nb2RlPC9jb2RlPiAod2hpY2ggc2VlbWVkCnRvIGJlIGxlc3MgYnVnZ3kgdGhhbiA8Y29kZT5jb250ZW50RWRpdGFibGU8L2NvZGU+IGluIFdlYmtpdCBhbmQKRmlyZWZveCwgYW5kIHdhcyB0aHVzIHVzZWQgYnkgQ29kZU1pcnJvciAxIGluIHRob3NlIGJyb3dzZXJzKSByZXF1aXJlcwphIGZyYW1lLiBGcmFtZXMgYXJlIGFub3RoZXIgdHJpY2t5IGFyZWEuIEl0IHRha2VzIHNvbWUgZWZmb3J0IHRvCnByZXZlbnQgZ2V0dGluZyB0cmlwcGVkIHVwIGJ5IGRvbWFpbiByZXN0cmljdGlvbnMsIHRoZXkgZG9uJ3QKaW5pdGlhbGl6ZSBzeW5jaHJvbm91c2x5LCBiZWhhdmUgc3RyYW5nZWx5IGluIHJlc3BvbnNlIHRvIHRoZSBiYWNrCmJ1dHRvbiwgYW5kLCBvbiBzZXZlcmFsIGJyb3dzZXJzLCBjYW4ndCBiZSBtb3ZlZCBhcm91bmQgdGhlIERPTQp3aXRob3V0IGhhdmluZyB0aGVtIHJlLWluaXRpYWxpemUuIFRoZXkgZGlkIHByb3ZpZGUgYSB2ZXJ5IG5pY2Ugd2F5IHRvCm5hbWVzcGFjZSB0aGUgbGlicmFyeSwgdGhvdWdo4oCUQ29kZU1pcnJvciAxIGNvdWxkIGZyZWVseSBwb2xsdXRlIHRoZQpuYW1lc3BhY2UgaW5zaWRlIHRoZSBmcmFtZS48L3A+Cgo8cD5GaW5hbGx5LCB3b3JraW5nIHdpdGggYW4gZWRpdGFibGUgZG9jdW1lbnQgbWVhbnMgd29ya2luZyB3aXRoCnNlbGVjdGlvbiBpbiBhcmJpdHJhcnkgRE9NIHN0cnVjdHVyZXMuIEludGVybmV0IEV4cGxvcmVyICg4IGFuZApiZWZvcmUpIGhhcyBhbiB1dHRlcmx5IGRpZmZlcmVudCAoYW5kIGF3a3dhcmQpIHNlbGVjdGlvbiBBUEkgdGhhbiBhbGwKb2YgdGhlIG90aGVyIGJyb3dzZXJzLCBhbmQgZXZlbiBhbW9uZyB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZgo8Y29kZT5kb2N1bWVudC5zZWxlY3Rpb248L2NvZGU+LCBkZXRhaWxzIGFib3V0IGhvdyBleGFjdGx5IGEgc2VsZWN0aW9uCmlzIHJlcHJlc2VudGVkIHZhcnkgcXVpdGUgYSBiaXQuIEFkZCB0byB0aGF0IHRoZSBmYWN0IHRoYXQgT3BlcmEncwpzZWxlY3Rpb24gc3VwcG9ydCB0ZW5kZWQgdG8gYmUgdmVyeSBidWdneSB1bnRpbCByZWNlbnRseSwgYW5kIHlvdSBjYW4KaW1hZ2luZSB3aHkgQ29kZU1pcnJvciAxIGNvbnRhaW5zIDcwMCBsaW5lcyBvZiBzZWxlY3Rpb24taGFuZGxpbmcKY29kZS48L3A+Cgo8cD5BbmQgdGhhdCBicmluZ3MgdXMgdG8gdGhlIG1haW4gaXNzdWUgd2l0aCB0aGUgQ29kZU1pcnJvciAxCmNvZGUgYmFzZTogVGhlIHByb3BvcnRpb24gb2YgYnJvd3Nlci1idWctd29ya2Fyb3VuZHMgdG8gcmVhbAphcHBsaWNhdGlvbiBjb2RlIHdhcyBnZXR0aW5nIGRhbmdlcm91c2x5IGhpZ2guIEJ5IGJ1aWxkaW5nIG9uIHRvcCBvZiBhCmZldyBkb2RneSBmZWF0dXJlcywgSSBwdXQgdGhlIHN5c3RlbSBpbiBhIHZ1bG5lcmFibGUgcG9zaXRpb27igJRhbnkKaW5jb21wYXRpYmlsaXR5IGFuZCBidWdnaW5lc3MgaW4gdGhlc2UgZmVhdHVyZXMsIEkgaGFkIHRvIHBhcGVyIG92ZXIKd2l0aCBteSBvd24gY29kZS4gTm90IG9ubHkgZGlkIEkgaGF2ZSB0byBkbyBzb21lIHNlcmlvdXMgc3R1bnQtd29yayB0bwpnZXQgaXQgdG8gd29yayBvbiBvbGRlciBicm93c2VycyAoYXMgZGV0YWlsZWQgaW4gdGhlCnByZXZpb3VzIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5zdG9yeTwvYT4pLCB0aGluZ3MKYWxzbyBrZXB0IGJyZWFraW5nIGluIG5ld2x5IHJlbGVhc2VkIHZlcnNpb25zLCByZXF1aXJpbmcgbWUgdG8gY29tZSB1cAp3aXRoIDxlbT5uZXc8L2VtPiBzY2FyeSBoYWNrcyBpbiBvcmRlciB0byBrZWVwIHVwLiBUaGlzIHdhcyBzdGFydGluZwp0byBsb3NlIGl0cyBhcHBlYWwuPC9wPgoKPGgyIGlkPSJhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvaDI+Cgo8cD5XaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHRyeSB0byBzaWRlc3RlcCBtb3N0IG9mIHRoZSBoYWlyeSBoYWNrcwp0aGF0IGNhbWUgdXAgaW4gdmVyc2lvbiAxLiBJIG93ZSBhIGxvdCB0byB0aGUKPGEgaHJlZj0iaHR0cDovL2FjZS5hamF4Lm9yZyI+QUNFPC9hPiBlZGl0b3IgZm9yIGluc3BpcmF0aW9uIG9uIGhvdyB0bwphcHByb2FjaCB0aGlzLjwvcD4KCjxwPkkgYWJzb2x1dGVseSBkaWQgbm90IHdhbnQgdG8gYmUgY29tcGxldGVseSByZWxpYW50IG9uIGtleSBldmVudHMgdG8KZ2VuZXJhdGUgbXkgaW5wdXQuIEV2ZXJ5IEphdmFTY3JpcHQgcHJvZ3JhbW1lciBrbm93cyB0aGF0IGtleSBldmVudAppbmZvcm1hdGlvbiBpcyBob3JyaWJsZSBhbmQgaW5jb21wbGV0ZS4gU29tZSBwZW9wbGUgKG1vc3QgYXdlc29tZWx5Ck1paGFpIEJhem9uIHdpdGggPGEgaHJlZj0iaHR0cDovL3ltYWNzLm9yZyI+WW1hY3M8L2E+KSBoYXZlIGJlZW4gYWJsZQp0byBidWlsZCBtb3JlIG9yIGxlc3MgZnVuY3Rpb25pbmcgZWRpdG9ycyBieSBkaXJlY3RseSByZWFkaW5nIGtleQpldmVudHMsIGJ1dCBpdCB0YWtlcyBhIGxvdCBvZiB3b3JrICh0aGUga2luZCBvZiBuZXZlci1lbmRpbmcsIGZyYWdpbGUKd29yayBJIGRlc2NyaWJlZCBlYXJsaWVyKSwgYW5kIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBwcm9wZXJseSBzdXBwb3J0CnRoaW5ncyBsaWtlIG11bHRpLWtleXN0b2tlIGludGVybmF0aW9uYWwgY2hhcmFjdGVyCmlucHV0LiA8YSBocmVmPSIja2V5bWFwIiBjbGFzcz0idXBkYXRlIj5bc2VlIGJlbG93IGZvciBjYXZlYXRdPC9hPjwvcD4KCjxwPlNvIHdoYXQgSSBkbyBpcyBmb2N1cyBhIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGxldCB0aGUgYnJvd3NlcgpiZWxpZXZlIHRoYXQgdGhlIHVzZXIgaXMgdHlwaW5nIGludG8gdGhhdC4gV2hhdCB3ZSBzaG93IHRvIHRoZSB1c2VyIGlzCmEgRE9NIHN0cnVjdHVyZSB3ZSBidWlsdCB0byByZXByZXNlbnQgaGlzIGRvY3VtZW50LiBJZiB0aGlzIGlzIHVwZGF0ZWQKcXVpY2tseSBlbm91Z2gsIGFuZCBzaG93cyBzb21lIGtpbmQgb2YgYmVsaWV2YWJsZSBjdXJzb3IsIGl0IGZlZWxzCmxpa2UgYSByZWFsIHRleHQtaW5wdXQgY29udHJvbC48L3A+Cgo8cD5Bbm90aGVyIGJpZyB3aW4gaXMgdGhhdCB0aGlzIERPTSByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHRvCnNwYW4gdGhlIHdob2xlIGRvY3VtZW50LiBTb21lIENvZGVNaXJyb3IgMSB1c2VycyBpbnNpc3RlZCB0aGF0IHRoZXkKbmVlZGVkIHRvIHB1dCBhIDMwIHRob3VzYW5kIGxpbmUgWE1MIGRvY3VtZW50IGludG8gQ29kZU1pcnJvci4gUHV0dGluZwphbGwgdGhhdCBpbnRvIHRoZSBET00gdGFrZXMgYSB3aGlsZSwgZXNwZWNpYWxseSBzaW5jZSwgZm9yIHNvbWUKcmVhc29uLCBhbiBlZGl0YWJsZSBET00gdHJlZSBpcyBzbG93ZXIgdGhhbiBhIG5vcm1hbCBvbmUgb24gbW9zdApicm93c2Vycy4gSWYgd2UgaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB3aGF0IHdlIHNob3csIHdlIG11c3Qgb25seQplbnN1cmUgdGhhdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBhZGRlZCwgYW5kIGNhbgpkbyB0aGUgcmVzdCBvbmx5IHdoZW4gbmVlZGVkLiAoRm9ydHVuYXRlbHksIHRoZSA8Y29kZT5vbnNjcm9sbDwvY29kZT4KZXZlbnQgd29ya3MgYWxtb3N0IHRoZSBzYW1lIG9uIGFsbCBicm93c2VycywgYW5kIGxlbmRzIGl0c2VsZiB3ZWxsIHRvCmRpc3BsYXlpbmcgdGhpbmdzIG9ubHkgYXMgdGhleSBhcmUgc2Nyb2xsZWQgaW50byB2aWV3Lik8L3A+Cgo8aDIgaWQ9ImlucHV0Ij5JbnB1dDwvaDI+Cgo8cD5BQ0UgdXNlcyBpdHMgaGlkZGVuIHRleHRhcmVhIG9ubHkgYXMgYSB0ZXh0IGlucHV0IHNoaW0sIGFuZCBkb2VzCmFsbCBjdXJzb3IgbW92ZW1lbnQgYW5kIHRoaW5ncyBsaWtlIHRleHQgZGVsZXRpb24gaXRzZWxmIGJ5IGRpcmVjdGx5CmhhbmRsaW5nIGtleSBldmVudHMuIENvZGVNaXJyb3IncyB3YXkgaXMgdG8gbGV0IHRoZSBicm93c2VyIGRvIGl0cwp0aGluZyBhcyBtdWNoIGFzIHBvc3NpYmxlLCBhbmQgbm90LCBmb3IgZXhhbXBsZSwgZGVmaW5lIGl0cyBvd24gc2V0IG9mCmtleSBiaW5kaW5ncy4gT25lIHdheSB0byBkbyB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0byBoYXZlIHRoZSB3aG9sZQpkb2N1bWVudCBpbnNpZGUgdGhlIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGFmdGVyIGVhY2gga2V5IGV2ZW50IHVwZGF0ZQp0aGUgZGlzcGxheSBET00gdG8gcmVmbGVjdCB3aGF0J3MgaW4gdGhhdCB0ZXh0YXJlYS48L3A+Cgo8cD5UaGF0J2QgYmUgc2ltcGxlLCBidXQgaXQgaXMgbm90IHJlYWxpc3RpYy4gRm9yIGV2ZW4gbWVkaXVtLXNpemVkCmRvY3VtZW50IHRoZSBlZGl0b3Igd291bGQgYmUgY29uc3RhbnRseSBtdW5naW5nIGh1Z2Ugc3RyaW5ncywgYW5kIGdldAp0ZXJyaWJseSBzbG93LiBXaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHB1dCB0aGUgY3VycmVudCBzZWxlY3Rpb24sCmFsb25nIHdpdGggYW4gZXh0cmEgbGluZSBvbiB0aGUgdG9wIGFuZCBvbiB0aGUgYm90dG9tLCBpbnRvIHRoZQp0ZXh0YXJlYS48L3A+Cgo8cD5UaGlzIG1lYW5zIHRoYXQgdGhlIGFycm93IGtleXMgKGFuZCB0aGVpciBjdHJsLXZhcmlhdGlvbnMpLCBob21lLAplbmQsIGV0Y2V0ZXJhLCBkbyBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHNwZWNpYWxseS4gV2UganVzdCByZWFkIHRoZQpjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIG91ciBjdXJzb3IgdG8gbWF0Y2ggaXQuCkFsc28sIGNvcHkgYW5kIHBhc3RlIHdvcmsgcHJldHR5IG11Y2ggZm9yIGZyZWUsIGFuZCBwZW9wbGUgZ2V0IHRoZWlyCm5hdGl2ZSBrZXkgYmluZGluZ3MsIHdpdGhvdXQgYW55IHNwZWNpYWwgd29yayBvbiBteSBwYXJ0LiBGb3IgZXhhbXBsZSwKSSBoYXZlIGVtYWNzIGtleSBiaW5kaW5ncyBjb25maWd1cmVkIGZvciBDaHJvbWUgYW5kIEZpcmVmb3guIFRoZXJlIGlzCm5vIHdheSBmb3IgYSBzY3JpcHQgdG8gZGV0ZWN0IHRoaXMuIDxhIGNsYXNzPSJ1cGRhdGUiCmhyZWY9IiNrZXltYXAiPltubyBsb25nZXIgdGhlIGNhc2VdPC9hPjwvcD4KCjxwPk9mIGNvdXJzZSwgc2luY2Ugb25seSBhIHNtYWxsIHBhcnQgb2YgdGhlIGRvY3VtZW50IHNpdHMgaW4gdGhlCnRleHRhcmVhLCBrZXlzIGxpa2UgcGFnZSB1cCBhbmQgY3RybC1lbmQgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgpDb2RlTWlycm9yIGlzIGNhdGNoaW5nIHRob3NlIGV2ZW50cyBhbmQgaGFuZGxpbmcgdGhlbSBpdHNlbGYuPC9wPgoKPGgyIGlkPSJzZWxlY3Rpb24iPlNlbGVjdGlvbjwvaDI+Cgo8cD5HZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugb2YgYSB0ZXh0YXJlYSBpbiBtb2Rlcm4KYnJvd3NlcnMgaXMgdHJpdmlhbOKAlHlvdSBqdXN0IHVzZSB0aGUgPGNvZGU+c2VsZWN0aW9uU3RhcnQ8L2NvZGU+CmFuZCA8Y29kZT5zZWxlY3Rpb25FbmQ8L2NvZGU+IHByb3BlcnRpZXMuIE9uIElFIHlvdSBoYXZlIHRvIGRvIHNvbWUKaW5zYW5lIHN0dWZmIHdpdGggdGVtcG9yYXJ5IHJhbmdlcyBhbmQgY29tcGVuc2F0aW5nIGZvciB0aGUgZmFjdCB0aGF0Cm1vdmluZyB0aGUgc2VsZWN0aW9uIGJ5IGEgJ2NoYXJhY3Rlcicgd2lsbCB0cmVhdCBcclxuIGFzIGEgc2luZ2xlCmNoYXJhY3RlciwgYnV0IGV2ZW4gdGhlcmUgaXQgaXMgcG9zc2libGUgdG8gYnVpbGQgZnVuY3Rpb25zIHRoYXQKcmVsaWFibHkgc2V0IGFuZCBnZXQgdGhlIHNlbGVjdGlvbiByYW5nZS48L3A+Cgo8cD5CdXQgY29uc2lkZXIgdGhpcyB0eXBpY2FsIGNhc2U6IFdoZW4gSSdtIHNvbWV3aGVyZSBpbiBteSBkb2N1bWVudCwKcHJlc3Mgc2hpZnQsIGFuZCBwcmVzcyB0aGUgdXAgYXJyb3csIHNvbWV0aGluZyBnZXRzIHNlbGVjdGVkLiBUaGVuLCBpZgpJLCBzdGlsbCBob2xkaW5nIHNoaWZ0LCBwcmVzcyB0aGUgdXAgYXJyb3cgYWdhaW4sIHRoZSB0b3Agb2YgbXkKc2VsZWN0aW9uIGlzIGFkanVzdGVkLiBUaGUgc2VsZWN0aW9uIHJlbWVtYmVycyB3aGVyZSBpdHMgPGVtPmhlYWQ8L2VtPgphbmQgaXRzIDxlbT5hbmNob3I8L2VtPiBhcmUsIGFuZCBtb3ZlcyB0aGUgaGVhZCB3aGVuIHdlIHNoaWZ0LW1vdmUuClRoaXMgaXMgYSBnZW5lcmFsbHkgYWNjZXB0ZWQgcHJvcGVydHkgb2Ygc2VsZWN0aW9ucywgYW5kIGRvbmUgcmlnaHQgYnkKZXZlcnkgZWRpdGluZyBjb21wb25lbnQgYnVpbHQgaW4gdGhlIHBhc3QgdHdlbnR5IHllYXJzLjwvcD4KCjxwPkJ1dCBub3Qgc29tZXRoaW5nIHRoYXQgdGhlIGJyb3dzZXIgc2VsZWN0aW9uIEFQSXMgZXhwb3NlLjwvcD4KCjxwPkdyZWF0LiBTbyB3aGVuIHNvbWVvbmUgY3JlYXRlcyBhbiAndXBzaWRlLWRvd24nIHNlbGVjdGlvbiwgdGhlIG5leHQKdGltZSBDb2RlTWlycm9yIGhhcyB0byB1cGRhdGUgdGhlIHRleHRhcmVhLCBpdCdsbCByZS1jcmVhdGUgdGhlCnNlbGVjdGlvbiBhcyBhbiAndXBzaWRlLXVwJyBzZWxlY3Rpb24sIHdpdGggdGhlIGFuY2hvciBhdCB0aGUgdG9wLCBhbmQKdGhlIG5leHQgY3Vyc29yIG1vdGlvbiB3aWxsIGJlaGF2ZSBpbiBhbiB1bmV4cGVjdGVkIHdheeKAlG91ciBzZWNvbmQKdXAtYXJyb3cgcHJlc3MgaW4gdGhlIGV4YW1wbGUgYWJvdmUgd2lsbCBub3QgZG8gYW55dGhpbmcsIHNpbmNlIGl0IGlzCmludGVycHJldGVkIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdC48L3A+Cgo8cD5ObyBwcm9ibGVtLiBXZSdsbCBqdXN0LCBlaG0sIGRldGVjdCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMKdXBzaWRlLWRvd24gKHlvdSBjYW4gdGVsbCBieSB0aGUgd2F5IGl0IHdhcyBjcmVhdGVkKSwgYW5kIHRoZW4sIHdoZW4KYW4gdXBzaWRlLWRvd24gc2VsZWN0aW9uIGlzIHByZXNlbnQsIGFuZCBhIGN1cnNvci1tb3Zpbmcga2V5IGlzCnByZXNzZWQgaW4gY29tYmluYXRpb24gd2l0aCBzaGlmdCwgd2UgcXVpY2tseSBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uCmluIHRoZSB0ZXh0YXJlYSB0byBpdHMgc3RhcnQsIGFsbG93IHRoZSBrZXkgdG8gdGFrZSBlZmZlY3QsIGFuZCB0aGVuCmNvbWJpbmUgaXRzIG5ldyBoZWFkIHdpdGggaXRzIG9sZCBhbmNob3IgdG8gZ2V0IHRoZSA8ZW0+cmVhbDwvZW0+CnNlbGVjdGlvbi48L3A+Cgo8cD5JbiBzaG9ydCwgc2NhcnkgaGFja3MgY291bGQgbm90IGJlIGF2b2lkZWQgZW50aXJlbHkgaW4gQ29kZU1pcnJvcgoyLjwvcD4KCjxwPkFuZCwgdGhlIG9ic2VydmFudCByZWFkZXIgbWlnaHQgYXNrLCBob3cgZG8geW91IGV2ZW4ga25vdyB0aGF0IGEKa2V5IGNvbWJvIGlzIGEgY3Vyc29yLW1vdmluZyBjb21ibywgaWYgeW91IGNsYWltIHlvdSBzdXBwb3J0IGFueQpuYXRpdmUga2V5IGJpbmRpbmdzPyBXZWxsLCB3ZSBkb24ndCwgYnV0IHdlIGNhbiBsZWFybi4gVGhlIGVkaXRvcgprZWVwcyBhIHNldCBrbm93biBjdXJzb3ItbW92ZW1lbnQgY29tYm9zIChpbml0aWFsaXplZCB0byB0aGUKcHJlZGljdGFibGUgZGVmYXVsdHMpLCBhbmQgdXBkYXRlcyB0aGlzIHNldCB3aGVuIGl0IG9ic2VydmVzIHRoYXQKcHJlc3NpbmcgYSBjZXJ0YWluIGtleSBoYWQgKG9ubHkpIHRoZSBlZmZlY3Qgb2YgbW92aW5nIHRoZSBjdXJzb3IuClRoaXMsIG9mIGNvdXJzZSwgZG9lc24ndCB3b3JrIGlmIHRoZSBmaXJzdCB0aW1lIHRoZSBrZXkgaXMgdXNlZCB3YXMKZm9yIGV4dGVuZGluZyBhbiBpbnZlcnRlZCBzZWxlY3Rpb24sIGJ1dCBpdCB3b3JrcyBtb3N0IG9mIHRoZQp0aW1lLjwvcD4KCjxoMiBpZD0idXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvaDI+Cgo8cD5PbmUgdGhpbmcgdGhhdCBhbHdheXMgY29tZXMgdXAgd2hlbiB5b3UgaGF2ZSBhIGNvbXBsaWNhdGVkIGludGVybmFsCnN0YXRlIHRoYXQncyByZWZsZWN0ZWQgaW4gc29tZSB1c2VyLXZpc2libGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24KKGluIHRoaXMgY2FzZSwgdGhlIGRpc3BsYXllZCBjb2RlIGFuZCB0aGUgdGV4dGFyZWEncyBjb250ZW50KSBpcwprZWVwaW5nIHRoZSB0d28gaW4gc3luYy4gVGhlIG5haXZlIHdheSBpcyB0byBqdXN0IHVwZGF0ZSB0aGUgZGlzcGxheQpldmVyeSB0aW1lIHlvdSBjaGFuZ2UgeW91ciBzdGF0ZSwgYnV0IHRoaXMgaXMgbm90IG9ubHkgZXJyb3IgcHJvbmUKKHlvdSdsbCBmb3JnZXQpLCBpdCBhbHNvIGVhc2lseSBsZWFkcyB0byBkdXBsaWNhdGUgd29yayBvbiBiaWcsCmNvbXBvc2l0ZSBvcGVyYXRpb25zLiBUaGVuIHlvdSBzdGFydCBwYXNzaW5nIGFyb3VuZCBmbGFncyBpbmRpY2F0aW5nCndoZXRoZXIgdGhlIGRpc3BsYXkgc2hvdWxkIGJlIHVwZGF0ZWQgaW4gYW4gYXR0ZW1wdCB0byBiZSBlZmZpY2llbnQKYWdhaW4gYW5kLCB3ZWxsLCBhdCB0aGF0IHBvaW50IHlvdSBtaWdodCBhcyB3ZWxsIGdpdmUgdXAgY29tcGxldGVseS48L3A+Cgo8cD5JIGRpZCBnbyBkb3duIHRoYXQgcm9hZCwgYnV0IHRoZW4gc3dpdGNoZWQgdG8gYSBtdWNoIHNpbXBsZXIgbW9kZWw6CnNpbXBseSBrZWVwIHRyYWNrIG9mIGFsbCB0aGUgdGhpbmdzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgZHVyaW5nIGFuCmFjdGlvbiwgYW5kIHRoZW4sIG9ubHkgYXQgdGhlIGVuZCwgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gdXBkYXRlIHRoZQp1c2VyLXZpc2libGUgZGlzcGxheS48L3A+Cgo8cD5Db2RlTWlycm9yIHVzZXMgYSBjb25jZXB0IG9mIDxlbT5vcGVyYXRpb25zPC9lbT4sIHdoaWNoIHN0YXJ0IGJ5CmNhbGxpbmcgYSBzcGVjaWZpYyBzZXQtdXAgZnVuY3Rpb24gdGhhdCBjbGVhcnMgdGhlIHN0YXRlIGFuZCBlbmQgYnkKY2FsbGluZyBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgcmVhZHMgdGhpcyBzdGF0ZSBhbmQgZG9lcyB0aGUgcmVxdWlyZWQKdXBkYXRpbmcuIE1vc3QgZXZlbnQgaGFuZGxlcnMsIGFuZCBhbGwgdGhlIHVzZXItdmlzaWJsZSBtZXRob2RzIHRoYXQKY2hhbmdlIHN0YXRlIGFyZSB3cmFwcGVkIGxpa2UgdGhpcy4gVGhlcmUncyBhIG1ldGhvZApjYWxsZWQgPGNvZGU+b3BlcmF0aW9uPC9jb2RlPiB0aGF0IGFjY2VwdHMgYSBmdW5jdGlvbiwgYW5kIHJldHVybnMKYW5vdGhlciBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhbiBvcGVyYXRpb24uPC9wPgoKPHA+SXQncyB0cml2aWFsIHRvIGV4dGVuZCB0aGlzIChhcyBDb2RlTWlycm9yIGRvZXMpIHRvIGRldGVjdCBuZXN0aW5nLAphbmQsIHdoZW4gYW4gb3BlcmF0aW9uIGlzIHN0YXJ0ZWQgaW5zaWRlIGFuIG9wZXJhdGlvbiwgc2ltcGx5CmluY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCwgYW5kIG9ubHkgZG8gdGhlIHVwZGF0aW5nIHdoZW4gdGhpcyBjb3VudApyZWFjaGVzIHplcm8gYWdhaW4uPC9wPgoKPHA+SWYgd2UgaGF2ZSBhIHNldCBvZiBjaGFuZ2VkIHJhbmdlcyBhbmQga25vdyB0aGUgY3VycmVudGx5IHNob3duCnJhbmdlLCB3ZSBjYW4gKHdpdGggc29tZSBhd2t3YXJkIGNvZGUgdG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQKY2hhbmdlcyBjYW4gYWRkIGFuZCByZW1vdmUgbGluZXMsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5naW5nCmNvb3JkaW5hdGUgc3lzdGVtKSBjb25zdHJ1Y3QgYSBtYXAgb2YgdGhlIHJhbmdlcyB0aGF0IHdlcmUgbGVmdAppbnRhY3QuIFdlIGNhbiB0aGVuIGNvbXBhcmUgdGhpcyBtYXAgd2l0aCB0aGUgcGFydCBvZiB0aGUgZG9jdW1lbnQKdGhhdCdzIGN1cnJlbnRseSB2aXNpYmxlIChiYXNlZCBvbiBzY3JvbGwgb2Zmc2V0IGFuZCBlZGl0b3IgaGVpZ2h0KSB0bwpkZXRlcm1pbmUgd2hldGhlciBzb21ldGhpbmcgbmVlZHMgdG8gYmUgdXBkYXRlZC48L3A+Cgo8cD5Db2RlTWlycm9yIHVzZXMgdHdvIHVwZGF0ZSBhbGdvcml0aG1z4oCUYSBmdWxsIHJlZnJlc2gsIHdoZXJlIGl0IGp1c3QKZGlzY2FyZHMgdGhlIHdob2xlIHBhcnQgb2YgdGhlIERPTSB0aGF0IGNvbnRhaW5zIHRoZSBlZGl0ZWQgdGV4dCBhbmQKcmVidWlsZHMgaXQsIGFuZCBhIHBhdGNoIGFsZ29yaXRobSwgd2hlcmUgaXQgdXNlcyB0aGUgaW5mb3JtYXRpb24KYWJvdXQgY2hhbmdlZCBhbmQgaW50YWN0IHJhbmdlcyB0byB1cGRhdGUgb25seSB0aGUgb3V0LW9mLWRhdGUgcGFydHMKb2YgdGhlIERPTS4gV2hlbiBtb3JlIHRoYW4gMzAgcGVyY2VudCAod2hpY2ggaXMgdGhlIGN1cnJlbnQgaGV1cmlzdGljLAptaWdodCBjaGFuZ2UpIG9mIHRoZSBsaW5lcyBuZWVkIHRvIGJlIHVwZGF0ZWQsIHRoZSBmdWxsIHJlZnJlc2ggaXMKY2hvc2VuIChzaW5jZSBpdCdzIGZhc3RlciB0byBkbyB0aGFuIHBhaW5zdGFraW5nbHkgZmluZGluZyBhbmQKdXBkYXRpbmcgYWxsIHRoZSBjaGFuZ2VkIGxpbmVzKSwgaW4gdGhlIG90aGVyIGNhc2UgaXQgZG9lcyB0aGUKcGF0Y2hpbmcgKHNvIHRoYXQsIGlmIHlvdSBzY3JvbGwgYSBsaW5lIG9yIHNlbGVjdCBhbm90aGVyIGNoYXJhY3RlciwKdGhlIHdob2xlIHNjcmVlbiBkb2Vzbid0IGhhdmUgdG8gYmUKcmUtcmVuZGVyZWQpLiA8c3BhbiBjbGFzcz0idXBkYXRlIj5bdGhlIGZ1bGwtcmVmcmVzaAphbGdvcml0aG0gd2FzIGRyb3BwZWQsIGl0IHdhc24ndCByZWFsbHkgZmFzdGVyIHRoYW4gdGhlIHBhdGNoaW5nCm9uZV08L3NwYW4+PC9wPgoKPHA+QWxsIHVwZGF0aW5nIHVzZXMgPGNvZGU+aW5uZXJIVE1MPC9jb2RlPiByYXRoZXIgdGhhbiBkaXJlY3QgRE9NCm1hbmlwdWxhdGlvbiwgc2luY2UgdGhhdCBzdGlsbCBzZWVtcyB0byBiZSBieSBmYXIgdGhlIGZhc3Rlc3Qgd2F5IHRvCmJ1aWxkIGRvY3VtZW50cy4gVGhlcmUncyBhIHBlci1saW5lIGZ1bmN0aW9uIHRoYXQgY29tYmluZXMgdGhlCmhpZ2hsaWdodGluZywgPGEgaHJlZj0ibWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtpbmc8L2E+LCBhbmQKc2VsZWN0aW9uIGluZm8gZm9yIHRoYXQgbGluZSBpbnRvIGEgc25pcHBldCBvZiBIVE1MLiBUaGUgcGF0Y2ggdXBkYXRlcgp1c2VzIHRoaXMgdG8gcmVzZXQgaW5kaXZpZHVhbCBsaW5lcywgdGhlIHJlZnJlc2ggdXBkYXRlciBidWlsZHMgYW4KSFRNTCBjaHVuayBmb3IgdGhlIHdob2xlIHZpc2libGUgZG9jdW1lbnQgYXQgb25jZSwgYW5kIHRoZW4gdXNlcyBhCnNpbmdsZSA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IHVwZGF0ZSB0byBkbyB0aGUgcmVmcmVzaC48L3A+Cgo8aDIgaWQ9InBhcnNlIj5QYXJzZXJzIGNhbiBiZSBTaW1wbGU8L2gyPgoKPHA+V2hlbiBJIHdyb3RlIENvZGVNaXJyb3IgMSwgSQp0aG91Z2h0IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sI3BhcnNlciI+aW50ZXJydXB0YWJsZQpwYXJzZXJzPC9hPiB3ZXJlIGEgaHVnZWx5IHNjYXJ5IGFuZCBjb21wbGljYXRlZCB0aGluZywgYW5kIEkgdXNlZCBhCmJ1bmNoIG9mIGhlYXZ5d2VpZ2h0IGFic3RyYWN0aW9ucyB0byBrZWVwIHRoaXMgc3VwcG9zZWQgY29tcGxleGl0eQp1bmRlciBjb250cm9sOiBwYXJzZXJzCndlcmUgPGEgaHJlZj0iaHR0cDovL2JvYi5weXRob25tYWMub3JnL2FyY2hpdmVzLzIwMDUvMDcvMDYvaXRlcmF0aW9uLWluLWphdmFzY3JpcHQvIj5pdGVyYXRvcnM8L2E+CnRoYXQgY29uc3VtZWQgaW5wdXQgZnJvbSBhbm90aGVyIGl0ZXJhdG9yLCBhbmQgdXNlZCBmdW5ueQpjbG9zdXJlLXJlc2V0dGluZyB0cmlja3MgdG8gY29weSBhbmQgcmVzdW1lIHRoZW1zZWx2ZXMuPC9wPgoKPHA+VGhpcyBtYWRlIGZvciBhIHJhdGhlciBuaWNlIHN5c3RlbSwgaW4gdGhhdCBwYXJzZXJzIGZvcm1lZCBzdHJpY3RseQpzZXBhcmF0ZSBtb2R1bGVzLCBhbmQgY291bGQgYmUgY29tcG9zZWQgaW4gcHJlZGljdGFibGUgd2F5cy4KVW5mb3J0dW5hdGVseSwgaXQgd2FzIHF1aXRlIHNsb3cgKHN0YWNraW5nIHRocmVlIG9yIGZvdXIgaXRlcmF0b3JzIG9uCnRvcCBvZiBlYWNoIG90aGVyKSwgYW5kIGV4dHJlbWVseSBpbnRpbWlkYXRpbmcgdG8gcGVvcGxlIG5vdCB1c2VkIHRvIGEKZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBzdHlsZS48L3A+Cgo8cD5XaXRoIGEgZmV3IHNtYWxsIGNoYW5nZXMsIGhvd2V2ZXIsIHdlIGNhbiBrZWVwIGFsbCB0aG9zZQphZHZhbnRhZ2VzLCBidXQgc2ltcGxpZnkgdGhlIEFQSSBhbmQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgbGVzcwppbmRpcmVjdCBhbmQgaW5lZmZpY2llbnQuIENvZGVNaXJyb3IKMidzIDxhIGhyZWY9Im1hbnVhbC5odG1sI21vZGVhcGkiPm1vZGUgQVBJPC9hPiB1c2VzIGV4cGxpY2l0IHN0YXRlCm9iamVjdHMsIGFuZCBtYWtlcyB0aGUgcGFyc2VyL3Rva2VuaXplciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IHRha2VzIGEKc3RhdGUgYW5kIGEgY2hhcmFjdGVyIHN0cmVhbSBhYnN0cmFjdGlvbiwgYWR2YW5jZXMgdGhlIHN0cmVhbSBvbmUKdG9rZW4sIGFuZCByZXR1cm5zIHRoZSB3YXkgdGhlIHRva2VuIHNob3VsZCBiZSBzdHlsZWQuIFRoaXMgc3RhdGUgbWF5CmJlIGNvcGllZCwgb3B0aW9uYWxseSBpbiBhIG1vZGUtZGVmaW5lZCB3YXksIGluIG9yZGVyIHRvIGJlIGFibGUgdG8KY29udGludWUgYSBwYXJzZSBhdCBhIGdpdmVuIHBvaW50LiBFdmVuIHNvbWVvbmUgd2hvJ3MgbmV2ZXIgdG91Y2hlZCBhCmxhbWJkYSBpbiBoaXMgbGlmZSBjYW4gdW5kZXJzdGFuZCB0aGlzIGFwcHJvYWNoLiBBZGRpdGlvbmFsbHksIGZhcgpmZXdlciBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGNvdXJzZSBvZiBwYXJzaW5nIG5vdy48L3A+Cgo8cD5UaGUgYmlnZ2VzdCBzcGVlZHVwIGNvbWVzIGZyb20gdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2luZyBubyBsb25nZXIKaGFzIHRvIHRvdWNoIHRoZSBET00gdGhvdWdoLiBJbiBDb2RlTWlycm9yIDEsIG9uIGFuIG9sZGVyIGJyb3dzZXIsIHlvdQpjb3VsZCA8ZW0+c2VlPC9lbT4gdGhlIHBhcnNlciB3b3JrIGl0cyB3YXkgdGhyb3VnaCB0aGUgZG9jdW1lbnQsCm1hbmFnaW5nIHNvbWUgdHdlbnR5IGxpbmVzIGluIGVhY2ggNTAtbWlsbGlzZWNvbmQgdGltZSBzbGljZSBpdCBnb3QuIEl0CndhcyByZWFkaW5nIGl0cyBpbnB1dCBmcm9tIHRoZSBET00sIGFuZCB1cGRhdGluZyB0aGUgRE9NIGFzIGl0IHdlbnQKYWxvbmcsIHdoaWNoIGFueSBleHBlcmllbmNlZCBKYXZhU2NyaXB0IHByb2dyYW1tZXIgd2lsbCBpbW1lZGlhdGVseQpzcG90IGFzIGEgcmVjaXBlIGZvciBzbG93bmVzcy4gSW4gQ29kZU1pcnJvciAyLCB0aGUgcGFyc2VyIHVzdWFsbHkKZmluaXNoZXMgdGhlIHdob2xlIGRvY3VtZW50IGluIGEgc2luZ2xlIDEwMC1taWxsaXNlY29uZCB0aW1lIHNsaWNl4oCUaXQKbWFuYWdlcyBzb21lIDE1MDAgbGluZXMgZHVyaW5nIHRoYXQgdGltZSBvbiBDaHJvbWUuIEFsbCBpdCBoYXMgdG8gZG8KaXMgbXVuZ2Ugc3RyaW5ncywgc28gdGhlcmUgaXMgbm8gcmVhbCByZWFzb24gZm9yIGl0IHRvIGJlIHNsb3cKYW55bW9yZS48L3A+Cgo8aDIgaWQ9InN1bW1hcnkiPldoYXQgR2l2ZXM/PC9oMj4KCjxwPkdpdmVuIGFsbCB0aGlzLCB3aGF0IGNhbiB5b3UgZXhwZWN0IGZyb20gQ29kZU1pcnJvciAyPzwvcD4KCjx1bD4KCjxsaT48c3Ryb25nPlNtYWxsLjwvc3Ryb25nPiB0aGUgYmFzZSBsaWJyYXJ5IGlzCnNvbWUgPHNwYW4gY2xhc3M9InVwZGF0ZSI+NDVrPC9zcGFuPiB3aGVuIG1pbmlmaWVkCm5vdywgPHNwYW4gY2xhc3M9InVwZGF0ZSI+MTdrPC9zcGFuPiB3aGVuIGd6aXBwZWQuIEl0J3Mgc21hbGxlciB0aGFuCml0cyBvd24gbG9nby48L2xpPgoKPGxpPjxzdHJvbmc+TGlnaHR3ZWlnaHQuPC9zdHJvbmc+IENvZGVNaXJyb3IgMiBpbml0aWFsaXplcyB2ZXJ5CnF1aWNrbHksIGFuZCBkb2VzIGFsbW9zdCBubyB3b3JrIHdoZW4gaXQgaXMgbm90IGZvY3VzZWQuIFRoaXMgbWVhbnMKeW91IGNhbiB0cmVhdCBpdCBhbG1vc3QgbGlrZSBhIHRleHRhcmVhLCBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvbiBhCnBhZ2Ugd2l0aG91dCB0cm91YmxlLjwvbGk+Cgo8bGk+PHN0cm9uZz5IdWdlIGRvY3VtZW50IHN1cHBvcnQuPC9zdHJvbmc+IFNpbmNlIGhpZ2hsaWdodGluZyBpcwpyZWFsbHkgZmFzdCwgYW5kIG5vIERPTSBzdHJ1Y3R1cmUgaXMgYmVpbmcgYnVpbHQgZm9yIG5vbi12aXNpYmxlCmNvbnRlbnQsIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgdXAgeW91ciBicm93c2VyIHdoZW4gYQp1c2VyIGVudGVycyBhIG1lZ2FieXRlLXNpemVkIGRvY3VtZW50LjwvbGk+Cgo8bGk+PHN0cm9uZz5FeHRlbmRlZCBBUEkuPC9zdHJvbmc+IFNvbWUgdGhpbmdzIGtlcHQgY29taW5nIHVwIGluIHRoZQptYWlsaW5nIGxpc3QsIHN1Y2ggYXMgbWFya2luZyBwaWVjZXMgb2YgdGV4dCBvciBsaW5lcywgd2hpY2ggd2VyZQpleHRyZW1lbHkgaGFyZCB0byBkbyB3aXRoIENvZGVNaXJyb3IgMS4gVGhlIG5ldyB2ZXJzaW9uIGhhcyBwcm9wZXIKc3VwcG9ydCBmb3IgdGhlc2UgYnVpbHQgaW4uPC9saT4KCjxsaT48c3Ryb25nPlRhYiBzdXBwb3J0Ljwvc3Ryb25nPiBUYWJzIGluc2lkZSBlZGl0YWJsZSBkb2N1bWVudHMgd2VyZSwKZm9yIHNvbWUgcmVhc29uLCBhIG5vLWdvLiBBdCBsZWFzdCBzaXggZGlmZmVyZW50IHBlb3BsZSBhbm5vdW5jZWQgdGhleQp3ZXJlIGdvaW5nIHRvIGFkZCB0YWIgc3VwcG9ydCB0byBDb2RlTWlycm9yIDEsIG5vbmUgc3Vydml2ZWQgKEkgbWVhbiwKbm9uZSBkZWxpdmVyZWQgYSB3b3JraW5nIHZlcnNpb24pLiBDb2RlTWlycm9yIDIgbm8gbG9uZ2VyIHJlbW92ZXMgdGFicwpmcm9tIHlvdXIgZG9jdW1lbnQuPC9saT4KCjxsaT48c3Ryb25nPlNhbmUgc3R5bGluZy48L3N0cm9uZz4gPGNvZGU+aWZyYW1lPC9jb2RlPiBub2RlcyBhcmVuJ3QKcmVhbGx5IGtub3duIGZvciByZXNwZWN0aW5nIGRvY3VtZW50IGZsb3cuIE5vdyB0aGF0IGFuIGVkaXRvciBpbnN0YW5jZQppcyBhIHBsYWluIDxjb2RlPmRpdjwvY29kZT4gZWxlbWVudCwgaXQgaXMgbXVjaCBlYXNpZXIgdG8gc2l6ZSBpdCB0bwpmaXQgdGhlIHN1cnJvdW5kaW5nIGVsZW1lbnRzLiBZb3UgZG9uJ3QgZXZlbiBoYXZlIHRvIG1ha2UgaXQgc2Nyb2xsIGlmCnlvdSBkbyBub3QgPGEgaHJlZj0iLi4vZGVtby9yZXNpemUuaHRtbCI+d2FudCB0bzwvYT4uPC9saT4KCjwvdWw+Cgo8cD5PbiB0aGUgZG93bnNpZGUsIGEgQ29kZU1pcnJvciAyIGluc3RhbmNlIGlzIDxlbT5ub3Q8L2VtPiBhIG5hdGl2ZQplZGl0YWJsZSBjb21wb25lbnQuIFRob3VnaCBpdCBkb2VzIGl0cyBiZXN0IHRvIGVtdWxhdGUgc3VjaCBhCmNvbXBvbmVudCBhcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGVyZSBpcyBmdW5jdGlvbmFsaXR5IHRoYXQgYnJvd3NlcnMKanVzdCBkbyBub3QgYWxsb3cgdXMgdG8gaG9vayBpbnRvLiBEb2luZyBzZWxlY3QtYWxsIGZyb20gdGhlIGNvbnRleHQKbWVudSwgZm9yIGV4YW1wbGUsIGlzIG5vdCBjdXJyZW50bHkgZGV0ZWN0ZWQgYnkgQ29kZU1pcnJvci48L3A+Cgo8cCBpZD0iY2hhbmdlcyIgc3R5bGU9Im1hcmdpbi10b3A6IDJlbTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDoKYm9sZCI+W1VwZGF0ZXMgZnJvbSBOb3ZlbWJlciAxM3RoIDIwMTFdPC9zcGFuPiBSZWNlbnRseSwgSSd2ZSBtYWRlCnNvbWUgY2hhbmdlcyB0byB0aGUgY29kZWJhc2UgdGhhdCBjYXVzZSBzb21lIG9mIHRoZSB0ZXh0IGFib3ZlIHRvIG5vCmxvbmdlciBiZSBjdXJyZW50LiBJJ3ZlIGxlZnQgdGhlIHRleHQgaW50YWN0LCBidXQgYWRkZWQgbWFya2VycyBhdCB0aGUKcGFzc2FnZXMgdGhhdCBhcmUgbm93IGluYWNjdXJhdGUuIFRoZSBuZXcgc2l0dWF0aW9uIGlzIGRlc2NyaWJlZApiZWxvdy48L3A+Cgo8aDIgaWQ9ImJ0cmVlIj5Db250ZW50IFJlcHJlc2VudGF0aW9uPC9oMj4KCjxwPlRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBDb2RlTWlycm9yIDIgcmVwcmVzZW50ZWQgdGhlCmRvY3VtZW50IGFzIGEgZmxhdCBhcnJheSBvZiBsaW5lIG9iamVjdHMuIFRoaXMgd29ya2VkIHdlbGzigJRzcGxpY2luZwphcnJheXMgd2lsbCByZXF1aXJlIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSBhZnRlciB0aGUgc3BsaWNlIHRvIGJlCm1vdmVkLCBidXQgdGhpcyBpcyBiYXNpY2FsbHkganVzdCBhIHNpbXBsZSA8Y29kZT5tZW1tb3ZlPC9jb2RlPiBvZiBhCmJ1bmNoIG9mIHBvaW50ZXJzLCBzbyBpdCBpcyBjaGVhcCBldmVuIGZvciBodWdlIGRvY3VtZW50cy48L3A+Cgo8cD5Ib3dldmVyLCBJIHJlY2VudGx5IGFkZGVkIGxpbmUgd3JhcHBpbmcgYW5kIGNvZGUgZm9sZGluZyAobGluZQpjb2xsYXBzaW5nLCBiYXNpY2FsbHkpLiBPbmNlIGxpbmVzIHN0YXJ0IHRha2luZyB1cCBhIG5vbi1jb25zdGFudAphbW91bnQgb2YgdmVydGljYWwgc3BhY2UsIGxvb2tpbmcgdXAgYSBsaW5lIGJ5IHZlcnRpY2FsIHBvc2l0aW9uCih3aGljaCBpcyBuZWVkZWQgd2hlbiBzb21lb25lIGNsaWNrcyB0aGUgZG9jdW1lbnQsIGFuZCB0byBkZXRlcm1pbmUKdGhlIHZpc2libGUgcGFydCBvZiB0aGUgZG9jdW1lbnQgZHVyaW5nIHNjcm9sbGluZykgY2FuIG9ubHkgYmUgZG9uZQp3aXRoIGEgbGluZWFyIHNjYW4gdGhyb3VnaCB0aGUgd2hvbGUgYXJyYXksIHN1bW1pbmcgdXAgbGluZSBoZWlnaHRzIGFzCnlvdSBnby4gU2VlaW5nIGhvdyBJJ3ZlIGJlZW4gZ29pbmcgb3V0IG9mIG15IHdheSB0byBtYWtlIGJpZyBkb2N1bWVudHMKZmFzdCwgdGhpcyBpcyBub3QgYWNjZXB0YWJsZS48L3A+Cgo8cD5UaGUgbmV3IHJlcHJlc2VudGF0aW9uIGlzIGJhc2VkIG9uIGEgQi10cmVlLiBUaGUgbGVhdmVzIG9mIHRoZSB0cmVlCmNvbnRhaW4gYXJyYXlzIG9mIGxpbmUgb2JqZWN0cywgd2l0aCBhIGZpeGVkIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSwKYW5kIHRoZSBub24tbGVhZiBub2RlcyBzaW1wbHkgaG9sZCBhcnJheXMgb2YgY2hpbGQgbm9kZXMuIEVhY2ggbm9kZQpzdG9yZXMgYm90aCB0aGUgYW1vdW50IG9mIGxpbmVzIHRoYXQgbGl2ZSBiZWxvdyB0aGVtIGFuZCB0aGUgdmVydGljYWwKc3BhY2UgdGFrZW4gdXAgYnkgdGhlc2UgbGluZXMuIFRoaXMgYWxsb3dzIHRoZSB0cmVlIHRvIGJlIGluZGV4ZWQgYm90aApieSBsaW5lIG51bWJlciBhbmQgYnkgdmVydGljYWwgcG9zaXRpb24sIGFuZCBhbGwgYWNjZXNzIGhhcwpsb2dhcml0aG1pYyBjb21wbGV4aXR5IGluIHJlbGF0aW9uIHRvIHRoZSBkb2N1bWVudCBzaXplLjwvcD4KCjxwPkkgZ2F2ZSBsaW5lIG9iamVjdHMgYW5kIHRyZWUgbm9kZXMgcGFyZW50IHBvaW50ZXJzLCB0byB0aGUgbm9kZQphYm92ZSB0aGVtLiBXaGVuIGEgbGluZSBoYXMgdG8gdXBkYXRlIGl0cyBoZWlnaHQsIGl0IGNhbiBzaW1wbHkgd2Fsawp0aGVzZSBwb2ludGVycyB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLCBhZGRpbmcgb3Igc3VidHJhY3RpbmcgdGhlCmRpZmZlcmVuY2UgaW4gaGVpZ2h0IGZyb20gZWFjaCBub2RlIGl0IGVuY291bnRlcnMuIFRoZSBwYXJlbnQgcG9pbnRlcnMKYWxzbyBtYWtlIGl0IGNoZWFwZXIgKGluIGNvbXBsZXhpdHkgdGVybXMsIHRoZSBkaWZmZXJlbmNlIGlzIHByb2JhYmx5CnRpbnkgaW4gbm9ybWFsLXNpemVkIGRvY3VtZW50cykgdG8gZmluZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciB3aGVuCmdpdmVuIGEgbGluZSBvYmplY3QuIEluIHRoZSBvbGQgYXBwcm9hY2gsIHRoZSB3aG9sZSBkb2N1bWVudCBhcnJheSBoYWQKdG8gYmUgc2VhcmNoZWQuIE5vdywgd2UgY2FuIGp1c3Qgd2FsayB1cCB0aGUgdHJlZSBhbmQgY291bnQgdGhlIHNpemVzCm9mIHRoZSBub2RlcyBjb21pbmcgYmVmb3JlIHVzIGF0IGVhY2ggbGV2ZWwuPC9wPgoKPHA+SSBjaG9zZSBCLXRyZWVzLCBub3QgcmVndWxhciBiaW5hcnkgdHJlZXMsIG1vc3RseSBiZWNhdXNlIHRoZXkKYWxsb3cgZm9yIHZlcnkgZmFzdCBidWxrIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gV2hlbiB0aGVyZSBpcyBhIGJpZwpjaGFuZ2UgdG8gYSBkb2N1bWVudCwgaXQgdHlwaWNhbGx5IGludm9sdmVzIGFkZGluZywgZGVsZXRpbmcsIG9yCnJlcGxhY2luZyBhIGNodW5rIG9mIHN1YnNlcXVlbnQgbGluZXMuIEluIGEgcmVndWxhciBiYWxhbmNlZCB0cmVlLCBhbGwKdGhlc2UgaW5zZXJ0cyBvciBkZWxldGVzIHdvdWxkIGhhdmUgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5LCB3aGljaCBjb3VsZApiZSByZWFsbHkgZXhwZW5zaXZlLiBJbiBhIEItdHJlZSwgdG8gaW5zZXJ0IGEgY2h1bmssIHlvdSBqdXN0IHdhbGsKZG93biB0aGUgdHJlZSBvbmNlIHRvIGZpbmQgd2hlcmUgaXQgc2hvdWxkIGdvLCBpbnNlcnQgdGhlbSBhbGwgaW4gb25lCnNob3QsIGFuZCB0aGVuIGJyZWFrIHVwIHRoZSBub2RlIGlmIG5lZWRlZC4gVGhpcyBicmVha2luZyB1cCBtaWdodAppbnZvbHZlIGJyZWFraW5nIHVwIG5vZGVzIGZ1cnRoZXIgdXAsIGJ1dCBvbmx5IHJlcXVpcmVzIGEgc2luZ2xlIHBhc3MKYmFjayB1cCB0aGUgdHJlZS4gRm9yIGRlbGV0aW9uLCBJJ20gc29tZXdoYXQgbGF4IGluIGtlZXBpbmcgdGhpbmdzCmJhbGFuY2Vk4oCUSSBqdXN0IGNvbGxhcHNlIG5vZGVzIGludG8gYSBsZWFmIHdoZW4gdGhlaXIgY2hpbGQgY291bnQgZ29lcwpiZWxvdyBhIGdpdmVuIG51bWJlci4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBzb21lIHdlaXJkIGVkaXRpbmcKcGF0dGVybnMgdGhhdCBtYXkgcmVzdWx0IGluIGEgc2VyaW91c2x5IHVuYmFsYW5jZWQgdHJlZSwgYnV0IGV2ZW4gc3VjaAphbiB1bmJhbGFuY2VkIHRyZWUgd2lsbCBwZXJmb3JtIHdlbGwsIHVubGVzcyB5b3Ugc3BlbmQgYSBkYXkgbWFraW5nCnN0cmFuZ2VseSByZXBlYXRpbmcgZWRpdHMgdG8gYSByZWFsbHkgYmlnIGRvY3VtZW50LjwvcD4KCjxoMiBpZD0ia2V5bWFwIj5LZXltYXBzPC9oMj4KCjxwPjxhIGhyZWY9IiNhcHByb2FjaCI+QWJvdmU8L2E+LCBJIGNsYWltZWQgdGhhdCBkaXJlY3RseSBjYXRjaGluZyBrZXkKZXZlbnRzIGZvciB0aGluZ3MgbGlrZSBjdXJzb3IgbW92ZW1lbnQgaXMgaW1wcmFjdGljYWwgYmVjYXVzZSBpdApyZXF1aXJlcyBzb21lIGJyb3dzZXItc3BlY2lmaWMga2x1ZGdlcy4gSSB0aGVuIHByb2NlZWRlZCB0byBleHBsYWluCnNvbWUgYXdmdWwgPGEgaHJlZj0iI3NlbGVjdGlvbiI+aGFja3M8L2E+IHRoYXQgd2VyZSBuZWVkZWQgdG8gbWFrZSBpdApwb3NzaWJsZSBmb3IgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzIHRvIGJlIGRldGVjdGVkIHRocm91Z2ggdGhlCnRleHRhcmVhLiBJbiBmYWN0LCB0aGUgc2Vjb25kIGhhY2sgaXMgYWJvdXQgYXMgYmFkIGFzIHRoZSBmaXJzdC48L3A+Cgo8cD5PbiB0b3Agb2YgdGhhdCwgaW4gdGhlIHByZXNlbmNlIG9mIHVzZXItY29uZmlndXJhYmxlIHRhYiBzaXplcyBhbmQKY29sbGFwc2VkIGFuZCB3cmFwcGVkIGxpbmVzLCBsaW5pbmcgdXAgY3Vyc29yIG1vdmVtZW50IGluIHRoZSB0ZXh0YXJlYQp3aXRoIHdoYXQncyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4gYmVjb21lcyBhIG5pZ2h0bWFyZS4gVGh1cywgSSd2ZQpkZWNpZGVkIHRvIG1vdmUgdG8gYSBtb2RlbCB3aGVyZSB0aGUgdGV4dGFyZWEncyBzZWxlY3Rpb24gaXMgbm8gbG9uZ2VyCmRlcGVuZGVkIG9uLjwvcD4KCjxwPlNvIEkgbW92ZWQgdG8gYSBtb2RlbCB3aGVyZSBhbGwgY3Vyc29yIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbXkKb3duIGNvZGUuIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBhIGdvYWwgY29sdW1uLCBwcm9wZXIgaW50ZXJhY3Rpb24gb2YKY3Vyc29yIG1vdmVtZW50IHdpdGggY29sbGFwc2VkIGxpbmVzLCBhbmQgbWFrZXMgaXQgcG9zc2libGUgZm9yCnZlcnRpY2FsIG1vdmVtZW50IHRvIG1vdmUgdGhyb3VnaCB3cmFwcGVkIGxpbmVzIHByb3Blcmx5LCBpbnN0ZWFkIG9mCmp1c3QgdHJlYXRpbmcgdGhlbSBsaWtlIG5vbi13cmFwcGVkIGxpbmVzLjwvcD4KCjxwPlRoZSBrZXkgZXZlbnQgaGFuZGxlcnMgbm93IHRyYW5zbGF0ZSB0aGUga2V5IGV2ZW50IGludG8gYSBzdHJpbmcsCnNvbWV0aGluZyBsaWtlIDxjb2RlPkN0cmwtSG9tZTwvY29kZT4gb3IgPGNvZGU+U2hpZnQtQ21kLVI8L2NvZGU+LCBhbmQKdXNlIHRoYXQgc3RyaW5nIHRvIGxvb2sgdXAgYW4gYWN0aW9uIHRvIHBlcmZvcm0uIFRvIG1ha2Uga2V5YmluZGluZwpjdXN0b21pemFibGUsIHRoaXMgbG9va3VwIGdvZXMgdGhyb3VnaAphIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9rZXlNYXAiPnRhYmxlPC9hPiwgdXNpbmcgYSBzY2hlbWUgdGhhdAphbGxvd3Mgc3VjaCB0YWJsZXMgdG8gYmUgY2hhaW5lZCB0b2dldGhlciAoZm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0Ck1hYyBiaW5kaW5ncyBmYWxsIHRocm91Z2ggdG8gYSB0YWJsZSBuYW1lZCAnZW1hY3N5Jywgd2hpY2ggZGVmaW5lcwpiYXNpYyBFbWFjcy1zdHlsZSBiaW5kaW5ncyBsaWtlIDxjb2RlPkN0cmwtRjwvY29kZT4sIGFuZCB3aGljaCBpcyBhbHNvCnVzZWQgYnkgdGhlIGN1c3RvbSBFbWFjcyBiaW5kaW5ncykuPC9wPgoKPHA+QSBuZXcKb3B0aW9uIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9leHRyYUtleXMiPjxjb2RlPmV4dHJhS2V5czwvY29kZT48L2E+CmFsbG93cyBhZC1ob2Mga2V5YmluZGluZ3MgdG8gYmUgZGVmaW5lZCBpbiBhIG11Y2ggbmljZXIgd2F5IHRoYW4gd2hhdAp3YXMgcG9zc2libGUgd2l0aCB0aGUKb2xkIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9vbktleUV2ZW50Ij48Y29kZT5vbktleUV2ZW50PC9jb2RlPjwvYT4KY2FsbGJhY2suIFlvdSBzaW1wbHkgcHJvdmlkZSBhbiBvYmplY3QgbWFwcGluZyBrZXkgaWRlbnRpZmllcnMgdG8KZnVuY3Rpb25zLCBpbnN0ZWFkIG9mIHBhaW5zdGFraW5nbHkgbG9va2luZyBhdCByYXcga2V5IGV2ZW50cy48L3A+Cgo8cD5CdWlsdC1pbiBjb21tYW5kcyBtYXAgdG8gc3RyaW5ncywgcmF0aGVyIHRoYW4gZnVuY3Rpb25zLCBmb3IKZXhhbXBsZSA8Y29kZT4iZ29MaW5lVXAiPC9jb2RlPiBpcyB0aGUgZGVmYXVsdCBhY3Rpb24gYm91bmQgdG8gdGhlIHVwCmFycm93IGtleS4gVGhpcyBhbGxvd3MgbmV3IGtleW1hcHMgdG8gcmVmZXIgdG8gdGhlbSB3aXRob3V0CmR1cGxpY2F0aW5nIGFueSBjb2RlLiBOZXcgY29tbWFuZHMgY2FuIGJlIGRlZmluZWQgYnkgYXNzaWduaW5nIHRvCnRoZSA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiBvYmplY3QsIHdoaWNoIG1hcHMgc3VjaCBjb21tYW5kcwp0byBmdW5jdGlvbnMuPC9wPgoKPHA+VGhlIGhpZGRlbiB0ZXh0YXJlYSBub3cgb25seSBob2xkcyB0aGUgY3VycmVudCBzZWxlY3Rpb24sIHdpdGggbm8KZXh0cmEgY2hhcmFjdGVycyBhcm91bmQgaXQuIFRoaXMgaGFzIGEgbmljZSBhZHZhbnRhZ2U6IHBvbGxpbmcgZm9yCmlucHV0IGJlY29tZXMgbXVjaCwgbXVjaCBmYXN0ZXIuIElmIHRoZXJlJ3MgYSBiaWcgc2VsZWN0aW9uLCB0aGlzIHRleHQKZG9lcyBub3QgaGF2ZSB0byBiZSByZWFkIGZyb20gdGhlIHRleHRhcmVhIGV2ZXJ5IHRpbWXigJR3aGVuIHdlIHBvbGwsCmp1c3Qgbm90aWNpbmcgdGhhdCBzb21ldGhpbmcgaXMgc3RpbGwgc2VsZWN0ZWQgaXMgZW5vdWdoIHRvIHRlbGwgdXMKdGhhdCBubyBuZXcgdGV4dCB3YXMgdHlwZWQuPC9wPgoKPHA+VGhlIHJlYXNvbiB0aGF0IGNoZWFwIHBvbGxpbmcgaXMgaW1wb3J0YW50IGlzIHRoYXQgbWFueSBicm93c2VycyBkbwpub3QgZmlyZSB1c2VmdWwgZXZlbnRzIG9uIElNRSAoaW5wdXQgbWV0aG9kIGVuZ2luZSkgaW5wdXQsIHdoaWNoIGlzCnRoZSB0aGluZyB3aGVyZSBwZW9wbGUgaW5wdXR0aW5nIGEgbGFuZ3VhZ2UgbGlrZSBKYXBhbmVzZSBvciBDaGluZXNlCnVzZSBtdWx0aXBsZSBrZXlzdHJva2VzIHRvIGNyZWF0ZSBhIGNoYXJhY3RlciBvciBzZXF1ZW5jZSBvZgpjaGFyYWN0ZXJzLiBNb3N0IG1vZGVybiBicm93c2VycyBmaXJlIDxjb2RlPmlucHV0PC9jb2RlPiB3aGVuIHRoZQpjb21wb3NpbmcgaXMgZmluaXNoZWQsIGJ1dCBtYW55IGRvbid0IGZpcmUgYW55dGhpbmcgd2hlbiB0aGUgY2hhcmFjdGVyCmlzIHVwZGF0ZWQgPGVtPmR1cmluZzwvZW0+IGNvbXBvc2l0aW9uLiBTbyB3ZSBwb2xsLCB3aGVuZXZlciB0aGUKZWRpdG9yIGlzIGZvY3VzZWQsIHRvIHByb3ZpZGUgaW1tZWRpYXRlIHVwZGF0ZXMgb2YgdGhlIGRpc3BsYXkuPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI2ludHJvIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2lucHV0Ij5JbnB1dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3NlbGVjdGlvbiI+U2VsZWN0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3BhcnNlIj5QYXJzaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjc3VtbWFyeSI+V2hhdCBHaXZlcz88L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNidHJlZSI+Q29udGVudCBSZXByZXNlbnRhdGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2tleW1hcCI+S2V5IE1hcHM8L2E+PC9saT4KICAgIDwvdWw+Cgo8L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImhlaWdodDogMmVtIj4mbmJzcDs8L2Rpdj4KCjwvYm9keT48L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/manual.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVzZXIgTWFudWFsPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5kbCBkbCB7bWFyZ2luOiAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KCjxoMT48c3BhbiBjbGFzcz0ibG9nby1icmFjZXMiPnsgfTwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+Q29kZU1pcnJvcjwvYT48L2gxPgoKPHByZSBjbGFzcz0iZ3JleSI+CjxpbWcgc3JjPSJiYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogVXNlciBtYW51YWwgYW5kCiAgIHJlZmVyZW5jZSBndWlkZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0YmlnIGJsayI+CgogICAgPGgyIGlkPSJvdmVydmlldyI+T3ZlcnZpZXc8L2gyPgoKICAgIDxwPkNvZGVNaXJyb3IgaXMgYSBjb2RlLWVkaXRvciBjb21wb25lbnQgdGhhdCBjYW4gYmUgZW1iZWRkZWQgaW4KICAgIFdlYiBwYWdlcy4gVGhlIGNvZGUgbGlicmFyeSBwcm92aWRlcyA8ZW0+b25seTwvZW0+IHRoZSBlZGl0b3IKICAgIGNvbXBvbmVudCwgbm8gYWNjb21wYW55aW5nIGJ1dHRvbnMsIGF1dG8tY29tcGxldGlvbiwgb3Igb3RoZXIgSURFCiAgICBmdW5jdGlvbmFsaXR5LiBJdCBkb2VzIHByb3ZpZGUgYSByaWNoIEFQSSBvbiB0b3Agb2Ygd2hpY2ggc3VjaAogICAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgc3RyYWlnaHRmb3J3YXJkbHkgaW1wbGVtZW50ZWQuIFNlZQogICAgdGhlIDxhIGhyZWY9IiNhZGRvbnMiPmFkZC1vbnM8L2E+IGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24sCiAgICBhbmQKICAgIHRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vamFndGhlZHJ1bW1lci9jb2RlbWlycm9yLXVpIj5Db2RlTWlycm9yCiAgICBVSTwvYT4gcHJvamVjdCwgZm9yIHJldXNhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBleHRyYSBmZWF0dXJlcy48L3A+CgogICAgPHA+Q29kZU1pcnJvciB3b3JrcyB3aXRoIGxhbmd1YWdlLXNwZWNpZmljIG1vZGVzLiBNb2RlcyBhcmUKICAgIEphdmFTY3JpcHQgcHJvZ3JhbXMgdGhhdCBoZWxwIGNvbG9yIChhbmQgb3B0aW9uYWxseSBpbmRlbnQpIHRleHQKICAgIHdyaXR0ZW4gaW4gYSBnaXZlbiBsYW5ndWFnZS4gVGhlIGRpc3RyaWJ1dGlvbiBjb21lcyB3aXRoIGEgbnVtYmVyCiAgICBvZiBtb2RlcyAoc2VlIHRoZSA8Y29kZT5tb2RlLzwvY29kZT4gZGlyZWN0b3J5KSwgYW5kIGl0IGlzbid0IGhhcmQKICAgIHRvIDxhIGhyZWY9IiNtb2RlYXBpIj53cml0ZSBuZXcgb25lczwvYT4gZm9yIG90aGVyIGxhbmd1YWdlcy48L3A+CgogICAgPGgyIGlkPSJ1c2FnZSI+QmFzaWMgVXNhZ2U8L2gyPgoKICAgIDxwPlRoZSBlYXNpZXN0IHdheSB0byB1c2UgQ29kZU1pcnJvciBpcyB0byBzaW1wbHkgbG9hZCB0aGUgc2NyaXB0CiAgICBhbmQgc3R5bGUgc2hlZXQgZm91bmQgdW5kZXIgPGNvZGU+bGliLzwvY29kZT4gaW4gdGhlIGRpc3RyaWJ1dGlvbiwKICAgIHBsdXMgYSBtb2RlIHNjcmlwdCBmcm9tIG9uZSBvZiB0aGUgPGNvZGU+bW9kZS88L2NvZGU+IGRpcmVjdG9yaWVzCiAgICBhbmQgYSB0aGVtZSBzdHlsZXNoZWV0IGZyb20gPGNvZGU+dGhlbWUvPC9jb2RlPi4gKFNlZQogICAgYWxzbyA8YSBocmVmPSJjb21wcmVzcy5odG1sIj50aGUgY29tcHJlc3Npb24gaGVscGVyPC9hPi4pIEZvcgogICAgZXhhbXBsZTo8L3A+CgogICAgPHByZT4mbHQ7c2NyaXB0IHNyYz0ibGliL2NvZGVtaXJyb3IuanMiPiZsdDsvc2NyaXB0PgombHQ7bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiZsdDtzY3JpcHQgc3JjPSJtb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+Jmx0Oy9zY3JpcHQ+PC9wcmU+CgogICAgPHA+SGF2aW5nIGRvbmUgdGhpcywgYW4gZWRpdG9yIGluc3RhbmNlIGNhbiBiZSBjcmVhdGVkIGxpa2UKICAgIHRoaXM6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IoZG9jdW1lbnQuYm9keSk7PC9wcmU+CgogICAgPHA+VGhlIGVkaXRvciB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBkb2N1bWVudCBib2R5LCB3aWxsIHN0YXJ0CiAgICBlbXB0eSwgYW5kIHdpbGwgdXNlIHRoZSBtb2RlIHRoYXQgd2UgbG9hZGVkLiBUbyBoYXZlIG1vcmUgY29udHJvbAogICAgb3ZlciB0aGUgbmV3IGVkaXRvciwgYSBjb25maWd1cmF0aW9uIG9iamVjdCBjYW4gYmUgcGFzc2VkCiAgICB0byA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBhcyBhIHNlY29uZCBhcmd1bWVudDo8L3A+CgogICAgPHByZT52YXIgbXlDb2RlTWlycm9yID0gQ29kZU1pcnJvcihkb2N1bWVudC5ib2R5LCB7CiAgdmFsdWU6ICJmdW5jdGlvbiBteVNjcmlwdCgpe3JldHVybiAxMDA7fVxuIiwKICBtb2RlOiAgImphdmFzY3JpcHQiCn0pOzwvcHJlPgoKICAgIDxwPlRoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBlZGl0b3Igd2l0aCBhIHBpZWNlIG9mIGNvZGUgYWxyZWFkeSBpbgogICAgaXQsIGFuZCBleHBsaWNpdGx5IHRlbGwgaXQgdG8gdXNlIHRoZSBKYXZhU2NyaXB0IG1vZGUgKHdoaWNoIGlzCiAgICB1c2VmdWwgd2hlbiBtdWx0aXBsZSBtb2RlcyBhcmUgbG9hZGVkKS4KICAgIFNlZSA8YSBocmVmPSIjY29uZmlnIj5iZWxvdzwvYT4gZm9yIGEgZnVsbCBkaXNjdXNzaW9uIG9mIHRoZQogICAgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgQ29kZU1pcnJvciBhY2NlcHRzLjwvcD4KCiAgICA8cD5JbiBjYXNlcyB3aGVyZSB5b3UgZG9uJ3Qgd2FudCB0byBhcHBlbmQgdGhlIGVkaXRvciB0byBhbgogICAgZWxlbWVudCwgYW5kIG5lZWQgbW9yZSBjb250cm9sIG92ZXIgdGhlIHdheSBpdCBpcyBpbnNlcnRlZCwgdGhlCiAgICBmaXJzdCBhcmd1bWVudCB0byB0aGUgPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4gZnVuY3Rpb24gY2FuIGFsc28KICAgIGJlIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBnaXZlbiBhIERPTSBlbGVtZW50LCBpbnNlcnRzIGl0IGludG8gdGhlCiAgICBkb2N1bWVudCBzb21ld2hlcmUuIFRoaXMgY291bGQgYmUgdXNlZCB0bywgZm9yIGV4YW1wbGUsIHJlcGxhY2UgYQogICAgdGV4dGFyZWEgd2l0aCBhIHJlYWwgZWRpdG9yOjwvcD4KCiAgICA8cHJlPnZhciBteUNvZGVNaXJyb3IgPSBDb2RlTWlycm9yKGZ1bmN0aW9uKGVsdCkgewogIG15VGV4dEFyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZWx0LCBteVRleHRBcmVhKTsKfSwge3ZhbHVlOiBteVRleHRBcmVhLnZhbHVlfSk7PC9wcmU+CgogICAgPHA+SG93ZXZlciwgZm9yIHRoaXMgdXNlIGNhc2UsIHdoaWNoIGlzIGEgY29tbW9uIHdheSB0byB1c2UKICAgIENvZGVNaXJyb3IsIHRoZSBsaWJyYXJ5IHByb3ZpZGVzIGEgbXVjaCBtb3JlIHBvd2VyZnVsCiAgICBzaG9ydGN1dDo8L3A+CgogICAgPHByZT52YXIgbXlDb2RlTWlycm9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEobXlUZXh0QXJlYSk7PC9wcmU+CgogICAgPHA+VGhpcyB3aWxsLCBhbW9uZyBvdGhlciB0aGluZ3MsIGVuc3VyZSB0aGF0IHRoZSB0ZXh0YXJlYSdzIHZhbHVlCiAgICBpcyB1cGRhdGVkIHdoZW4gdGhlIGZvcm0gKGlmIGl0IGlzIHBhcnQgb2YgYSBmb3JtKSBpcyBzdWJtaXR0ZWQuCiAgICBTZWUgdGhlIDxhIGhyZWY9IiNmcm9tVGV4dEFyZWEiPkFQSSByZWZlcmVuY2U8L2E+IGZvciBhIGZ1bGwKICAgIGRlc2NyaXB0aW9uIG9mIHRoaXMgbWV0aG9kLjwvcD4KCiAgICA8aDIgaWQ9ImNvbmZpZyI+Q29uZmlndXJhdGlvbjwvaDI+CgogICAgPHA+Qm90aCB0aGUgPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4gZnVuY3Rpb24gYW5kCiAgICBpdHMgPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPiBtZXRob2QgdGFrZSBhcyBzZWNvbmQgKG9wdGlvbmFsKQogICAgYXJndW1lbnQgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbnkgb3B0aW9uCiAgICBub3Qgc3VwcGxpZWQgbGlrZSB0aGlzIHdpbGwgYmUgdGFrZW4KICAgIGZyb20gPGNvZGU+Q29kZU1pcnJvci5kZWZhdWx0czwvY29kZT4sIGFuIG9iamVjdCBjb250YWluaW5nIHRoZQogICAgZGVmYXVsdCBvcHRpb25zLiBZb3UgY2FuIHVwZGF0ZSB0aGlzIG9iamVjdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHRzCiAgICBvbiB5b3VyIHBhZ2UuPC9wPgoKICAgIDxwPk9wdGlvbnMgYXJlIG5vdCBjaGVja2VkIGluIGFueSB3YXksIHNvIHNldHRpbmcgYm9ndXMgb3B0aW9uCiAgICB2YWx1ZXMgaXMgYm91bmQgdG8gbGVhZCB0byBvZGQgZXJyb3JzLjwvcD4KCiAgICA8cD5UaGVzZSBhcmUgdGhlIHN1cHBvcnRlZCBvcHRpb25zOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdCBpZD0ib3B0aW9uX3ZhbHVlIj48Y29kZT52YWx1ZSAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBlZGl0b3IuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX21vZGUiPjxjb2RlPm1vZGUgKHN0cmluZyBvciBvYmplY3QpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgbW9kZSB0byB1c2UuIFdoZW4gbm90IGdpdmVuLCB0aGlzIHdpbGwgZGVmYXVsdCB0byB0aGUKICAgICAgZmlyc3QgbW9kZSB0aGF0IHdhcyBsb2FkZWQuIEl0IG1heSBiZSBhIHN0cmluZywgd2hpY2ggZWl0aGVyCiAgICAgIHNpbXBseSBuYW1lcyB0aGUgbW9kZSBvciBpcwogICAgICBhIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlNRSI+TUlNRTwvYT4gdHlwZQogICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIG1vZGUuIEFsdGVybmF0aXZlbHksIGl0IG1heSBiZSBhbiBvYmplY3QKICAgICAgY29udGFpbmluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtb2RlLCB3aXRoCiAgICAgIGEgPGNvZGU+bmFtZTwvY29kZT4gcHJvcGVydHkgdGhhdCBuYW1lcyB0aGUgbW9kZSAoZm9yCiAgICAgIGV4YW1wbGUgPGNvZGU+e25hbWU6ICJqYXZhc2NyaXB0IiwganNvbjogdHJ1ZX08L2NvZGU+KS4gVGhlIGRlbW8KICAgICAgcGFnZXMgZm9yIGVhY2ggbW9kZSBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgY29uZmlndXJhdGlvbgogICAgICBwYXJhbWV0ZXJzIHRoZSBtb2RlIHN1cHBvcnRzLiBZb3UgY2FuIGFzayBDb2RlTWlycm9yIHdoaWNoIG1vZGVzCiAgICAgIGFuZCBNSU1FIHR5cGVzIGFyZSBsb2FkZWQgd2l0aAogICAgICB0aGUgPGNvZGU+Q29kZU1pcnJvci5saXN0TW9kZXM8L2NvZGU+CiAgICAgIGFuZCA8Y29kZT5Db2RlTWlycm9yLmxpc3RNSU1FczwvY29kZT4gZnVuY3Rpb25zLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl90aGVtZSI+PGNvZGU+dGhlbWUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSB0aGVtZSB0byBzdHlsZSB0aGUgZWRpdG9yIHdpdGguIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKICAgICAgQ1NTIGZpbGUgZGVmaW5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgPGNvZGU+LmNtLXMtW25hbWVdPC9jb2RlPgogICAgICBzdHlsZXMgaXMgbG9hZGVkIChzZWUKICAgICAgdGhlIDxhIGhyZWY9Ii4uL3RoZW1lLyI+PGNvZGU+dGhlbWU8L2NvZGU+PC9hPiBkaXJlY3RvcnkgaW4gdGhlCiAgICAgIGRpc3RyaWJ1dGlvbikuIFRoZSBkZWZhdWx0IGlzIDxjb2RlPiJkZWZhdWx0IjwvY29kZT4sIGZvciB3aGljaAogICAgICBjb2xvcnMgYXJlIGluY2x1ZGVkIGluIDxjb2RlPmNvZGVtaXJyb3IuY3NzPC9jb2RlPi4gSXQgaXMKICAgICAgcG9zc2libGUgdG8gdXNlIG11bHRpcGxlIHRoZW1pbmcgY2xhc3NlcyBhdCBvbmNl4oCUZm9yCiAgICAgIGV4YW1wbGUgPGNvZGU+ImZvbyBiYXIiPC9jb2RlPiB3aWxsIGFzc2lnbiBib3RoCiAgICAgIHRoZSA8Y29kZT5jbS1zLWZvbzwvY29kZT4gYW5kIHRoZSA8Y29kZT5jbS1zLWJhcjwvY29kZT4gY2xhc3NlcwogICAgICB0byB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0IChpbnRlZ2VyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SG93IG1hbnkgc3BhY2VzIGEgYmxvY2sgKHdoYXRldmVyIHRoYXQgbWVhbnMgaW4gdGhlIGVkaXRlZAogICAgICBsYW5ndWFnZSkgc2hvdWxkIGJlIGluZGVudGVkLiBUaGUgZGVmYXVsdCBpcyAyLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9zbWFydEluZGVudCI+PGNvZGU+c21hcnRJbmRlbnQgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGV0aGVyIHRvIHVzZSB0aGUgY29udGV4dC1zZW5zaXRpdmUgaW5kZW50YXRpb24gdGhhdCB0aGUKICAgICAgbW9kZSBwcm92aWRlcyAob3IganVzdCBpbmRlbnQgdGhlIHNhbWUgYXMgdGhlIGxpbmUgYmVmb3JlKS4KICAgICAgRGVmYXVsdHMgdG8gdHJ1ZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdGFiU2l6ZSI+PGNvZGU+dGFiU2l6ZSAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSB3aWR0aCBvZiBhIHRhYiBjaGFyYWN0ZXIuIERlZmF1bHRzIHRvIDQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2luZGVudFdpdGhUYWJzIj48Y29kZT5pbmRlbnRXaXRoVGFicyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio8Y29kZT50YWJTaXplPC9jb2RlPgogICAgICBzcGFjZXMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IE4gdGFicy4gRGVmYXVsdCBpcyBmYWxzZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZWxlY3RyaWNDaGFycyI+PGNvZGU+ZWxlY3RyaWNDaGFycyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNvbmZpZ3VyZXMgd2hldGhlciB0aGUgZWRpdG9yIHNob3VsZCByZS1pbmRlbnQgdGhlIGN1cnJlbnQKICAgICAgbGluZSB3aGVuIGEgY2hhcmFjdGVyIGlzIHR5cGVkIHRoYXQgbWlnaHQgY2hhbmdlIGl0cyBwcm9wZXIKICAgICAgaW5kZW50YXRpb24gKG9ubHkgd29ya3MgaWYgdGhlIG1vZGUgc3VwcG9ydHMgaW5kZW50YXRpb24pLgogICAgICBEZWZhdWx0IGlzIHRydWUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2F1dG9DbGVhckVtcHR5TGluZXMiPjxjb2RlPmF1dG9DbGVhckVtcHR5TGluZXMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIHR1cm5lZCBvbiAoZGVmYXVsdCBpcyBvZmYpLCB0aGlzIHdpbGwgY2xlYXIKICAgICAgYXV0b21hdGljYWxseSBjbGVhciBsaW5lcyBjb25zaXN0aW5nIG9ubHkgb2Ygd2hpdGVzcGFjZSB3aGVuIHRoZQogICAgICBjdXJzb3IgbGVhdmVzIHRoZW0uIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCB0byBwcmV2ZW50IGF1dG8KICAgICAgaW5kZW50YXRpb24gZnJvbSBpbnRyb2R1Y2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlIGluIGEgZmlsZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fa2V5TWFwIj48Y29kZT5rZXlNYXAgKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNvbmZpZ3VyZXMgdGhlIGtleW1hcCB0byB1c2UuIFRoZSBkZWZhdWx0CiAgICAgIGlzIDxjb2RlPiJkZWZhdWx0IjwvY29kZT4sIHdoaWNoIGlzIHRoZSBvbmx5IGtleW1hcCBkZWZpbmVkCiAgICAgIGluIDxjb2RlPmNvZGVtaXJyb3IuanM8L2NvZGU+IGl0c2VsZi4gRXh0cmEga2V5bWFwcyBhcmUgZm91bmQgaW4KICAgICAgdGhlIDxhIGhyZWY9Ii4uL2tleW1hcC8iPjxjb2RlPmtleW1hcDwvY29kZT48L2E+IGRpcmVjdG9yeS4gU2VlCiAgICAgIHRoZSA8YSBocmVmPSIja2V5bWFwcyI+c2VjdGlvbiBvbiBrZXltYXBzPC9hPiBmb3IgbW9yZQogICAgICBpbmZvcm1hdGlvbi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZXh0cmFLZXlzIj48Y29kZT5leHRyYUtleXMgKG9iamVjdCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZXh0cmEga2V5YmluZGluZ3MgZm9yIHRoZSBlZGl0b3IsCiAgICAgIGFsb25nc2lkZSB0aGUgb25lcyBkZWZpbmVkCiAgICAgIGJ5IDxhIGhyZWY9IiNvcHRpb25fa2V5TWFwIj48Y29kZT5rZXlNYXA8L2NvZGU+PC9hPi4gU2hvdWxkIGJlCiAgICAgIGVpdGhlciBudWxsLCBvciBhIHZhbGlkIDxhIGhyZWY9IiNrZXltYXBzIj5rZXltYXA8L2E+IHZhbHVlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9saW5lV3JhcHBpbmciPjxjb2RlPmxpbmVXcmFwcGluZyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZXRoZXIgQ29kZU1pcnJvciBzaG91bGQgc2Nyb2xsIG9yIHdyYXAgZm9yIGxvbmcgbGluZXMuCiAgICAgIERlZmF1bHRzIHRvIDxjb2RlPmZhbHNlPC9jb2RlPiAoc2Nyb2xsKS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fbGluZU51bWJlcnMiPjxjb2RlPmxpbmVOdW1iZXJzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hldGhlciB0byBzaG93IGxpbmUgbnVtYmVycyB0byB0aGUgbGVmdCBvZiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9maXJzdExpbmVOdW1iZXIiPjxjb2RlPmZpcnN0TGluZU51bWJlciAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkF0IHdoaWNoIG51bWJlciB0byBzdGFydCBjb3VudGluZyBsaW5lcy4gRGVmYXVsdCBpcyAxLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9ndXR0ZXIiPjxjb2RlPmd1dHRlciAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNhbiBiZSB1c2VkIHRvIGZvcmNlIGEgJ2d1dHRlcicgKGVtcHR5IHNwYWNlIG9uIHRoZSBsZWZ0IG9mCiAgICAgIHRoZSBlZGl0b3IpIHRvIGJlIHNob3duIGV2ZW4gd2hlbiBubyBsaW5lIG51bWJlcnMgYXJlIGFjdGl2ZS4KICAgICAgVGhpcyBpcyB1c2VmdWwgZm9yIHNldHRpbmcgPGEgaHJlZj0iI3NldE1hcmtlciI+bWFya2VyczwvYT4uPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2ZpeGVkR3V0dGVyIj48Y29kZT5maXhlZEd1dHRlciAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZW5hYmxlZCAob2ZmIGJ5IGRlZmF1bHQpLCB0aGlzIHdpbGwgbWFrZSB0aGUgZ3V0dGVyCiAgICAgIHN0YXkgdmlzaWJsZSB3aGVuIHRoZSBkb2N1bWVudCBpcyBzY3JvbGxlZCBob3Jpem9udGFsbHkuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3JlYWRPbmx5Ij48Y29kZT5yZWFkT25seSAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgZGlzYWJsZXMgZWRpdGluZyBvZiB0aGUgZWRpdG9yIGNvbnRlbnQgYnkgdGhlIHVzZXIuIElmCiAgICAgIHRoZSBzcGVjaWFsIHZhbHVlIDxjb2RlPiJub2N1cnNvciI8L2NvZGU+IGlzIGdpdmVuIChpbnN0ZWFkIG9mCiAgICAgIHNpbXBseSA8Y29kZT50cnVlPC9jb2RlPiksIGZvY3VzaW5nIG9mIHRoZSBlZGl0b3IgaXMgYWxzbwogICAgICBkaXNhbGxvd2VkLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkNoYW5nZSI+PGNvZGU+b25DaGFuZ2UgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBnaXZlbiwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZQogICAgICBjb250ZW50IG9mIHRoZSBlZGl0b3IgaXMgY2hhbmdlZC4gSXQgd2lsbCBiZSBnaXZlbiB0aGUgZWRpdG9yCiAgICAgIGluc3RhbmNlIGFzIGZpcnN0IGFyZ3VtZW50LCBhbmQgYW4gPGNvZGU+e2Zyb20sIHRvLCB0ZXh0LCBuZXh0fTwvY29kZT4KICAgICAgb2JqZWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYW5nZXMKICAgICAgdGhhdCBvY2N1cnJlZCBhcyBzZWNvbmQgYXJndW1lbnQuIDxjb2RlPmZyb208L2NvZGU+CiAgICAgIGFuZCA8Y29kZT50bzwvY29kZT4gYXJlIHRoZSBwb3NpdGlvbnMgKGluIHRoZSBwcmUtY2hhbmdlCiAgICAgIGNvb3JkaW5hdGUgc3lzdGVtKSB3aGVyZSB0aGUgY2hhbmdlIHN0YXJ0ZWQgYW5kCiAgICAgIGVuZGVkIChmb3IgZXhhbXBsZSwgaXQgbWlnaHQgYmUgPGNvZGU+e2NoOjAsIGxpbmU6MTh9PC9jb2RlPiBpZiB0aGUKICAgICAgcG9zaXRpb24gaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBsaW5lICMxOSkuIDxjb2RlPnRleHQ8L2NvZGU+CiAgICAgIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB0ZXh0IHRoYXQgcmVwbGFjZWQgdGhlIGNoYW5nZWQKICAgICAgcmFuZ2UgKHNwbGl0IGJ5IGxpbmUpLiBJZiBtdWx0aXBsZSBjaGFuZ2VzIGhhcHBlbmVkIGR1cmluZyBhIHNpbmdsZQogICAgICBvcGVyYXRpb24sIHRoZSBvYmplY3Qgd2lsbCBoYXZlIGEgPGNvZGU+bmV4dDwvY29kZT4gcHJvcGVydHkgcG9pbnRpbmcgdG8KICAgICAgYW5vdGhlciBjaGFuZ2Ugb2JqZWN0ICh3aGljaCBtYXkgcG9pbnQgdG8gYW5vdGhlciwgZXRjKS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25DdXJzb3JBY3Rpdml0eSI+PGNvZGU+b25DdXJzb3JBY3Rpdml0eSAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBjdXJzb3Igb3Igc2VsZWN0aW9uIG1vdmVzLCBvciBhbnkKICAgICAgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGVkaXRvciBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkd1dHRlckNsaWNrIj48Y29kZT5vbkd1dHRlckNsaWNrIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBlZGl0b3IgZ3V0dGVyICh0aGUKICAgICAgbGluZS1udW1iZXIgYXJlYSkgaXMgY2xpY2tlZC4gV2lsbCBiZSBnaXZlbiB0aGUgZWRpdG9yIGluc3RhbmNlCiAgICAgIGFzIGZpcnN0IGFyZ3VtZW50LCB0aGUgKHplcm8tYmFzZWQpIG51bWJlciBvZiB0aGUgbGluZSB0aGF0IHdhcwogICAgICBjbGlja2VkIGFzIHNlY29uZCBhcmd1bWVudCwgYW5kIHRoZSByYXcgPGNvZGU+bW91c2Vkb3duPC9jb2RlPgogICAgICBldmVudCBvYmplY3QgYXMgdGhpcmQgYXJndW1lbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uRm9jdXMiPjxjb2RlPm9uRm9jdXMsIG9uQmx1ciAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgZ2l2ZW4gZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBlZGl0b3IgaXMKICAgICAgZm9jdXNlZCBvciB1bmZvY3VzZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uU2Nyb2xsIj48Y29kZT5vblNjcm9sbCAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIGdpdmVuLCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZWRpdG9yIGlzCiAgICAgIHNjcm9sbGVkLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkhpZ2hsaWdodENvbXBsZXRlIj48Y29kZT5vbkhpZ2hsaWdodENvbXBsZXRlIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW5ldmVyIHRoZSBlZGl0b3IncyBjb250ZW50IGhhcyBiZWVuIGZ1bGx5IGhpZ2hsaWdodGVkLAogICAgICB0aGlzIGZ1bmN0aW9uIChpZiBnaXZlbikgd2lsbCBiZSBjYWxsZWQuIEl0J2xsIGJlIGdpdmVuIGEgc2luZ2xlCiAgICAgIGFyZ3VtZW50LCB0aGUgZWRpdG9yIGluc3RhbmNlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vblVwZGF0ZSI+PGNvZGU+b25VcGRhdGUgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgQ29kZU1pcnJvciB1cGRhdGVzIGl0cyBET00gZGlzcGxheS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fbWF0Y2hCcmFja2V0cyI+PGNvZGU+bWF0Y2hCcmFja2V0cyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkRldGVybWluZXMgd2hldGhlciBicmFja2V0cyBhcmUgbWF0Y2hlZCB3aGVuZXZlciB0aGUgY3Vyc29yCiAgICAgIGlzIG1vdmVkIG5leHQgdG8gYSBicmFja2V0LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl93b3JrVGltZSI+PGNvZGU+d29ya1RpbWUsIHdvcmtEZWxheSAobnVtYmVyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SGlnaGxpZ2h0aW5nIGlzIGRvbmUgYnkgYSBwc2V1ZG8gYmFja2dyb3VuZC10aHJlYWQgdGhhdCB3aWxsCiAgICAgIHdvcmsgZm9yIDxjb2RlPndvcmtUaW1lPC9jb2RlPiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIHVzZQogICAgICB0aW1lb3V0IHRvIHNsZWVwIGZvciA8Y29kZT53b3JrRGVsYXk8L2NvZGU+IG1pbGxpc2Vjb25kcy4gVGhlCiAgICAgIGRlZmF1bHRzIGFyZSAyMDAgYW5kIDMwMCwgeW91IGNhbiBjaGFuZ2UgdGhlc2Ugb3B0aW9ucyB0byBtYWtlCiAgICAgIHRoZSBoaWdobGlnaHRpbmcgbW9yZSBvciBsZXNzIGFnZ3Jlc3NpdmUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3BvbGxJbnRlcnZhbCI+PGNvZGU+cG9sbEludGVydmFsIChudW1iZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRpY2F0ZXMgaG93IHF1aWNrbHkgQ29kZU1pcnJvciBzaG91bGQgcG9sbCBpdHMgaW5wdXQKICAgICAgdGV4dGFyZWEgZm9yIGNoYW5nZXMuIE1vc3QgaW5wdXQgaXMgY2FwdHVyZWQgYnkgZXZlbnRzLCBidXQgc29tZQogICAgICB0aGluZ3MsIGxpa2UgSU1FIGlucHV0IG9uIHNvbWUgYnJvd3NlcnMsIGRvZXNuJ3QgZ2VuZXJhdGUgZXZlbnRzCiAgICAgIHRoYXQgYWxsb3cgQ29kZU1pcnJvciB0byBwcm9wZXJseSBkZXRlY3QgaXQuIFRodXMsIGl0IHBvbGxzLgogICAgICBEZWZhdWx0IGlzIDEwMCBtaWxsaXNlY29uZHMuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3VuZG9EZXB0aCI+PGNvZGU+dW5kb0RlcHRoIChpbnRlZ2VyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIHVuZG8gbGV2ZWxzIHRoYXQgdGhlIGVkaXRvciBzdG9yZXMuCiAgICAgIERlZmF1bHRzIHRvIDQwLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl90YWJpbmRleCI+PGNvZGU+dGFiaW5kZXggKGludGVnZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2FkZWYtdGFiaW5kZXgiPnRhYgogICAgICBpbmRleDwvYT4gdG8gYXNzaWduIHRvIHRoZSBlZGl0b3IuIElmIG5vdCBnaXZlbiwgbm8gdGFiIGluZGV4CiAgICAgIHdpbGwgYmUgYXNzaWduZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2F1dG9mb2N1cyI+PGNvZGU+YXV0b2ZvY3VzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2FuIGJlIHVzZWQgdG8gbWFrZSBDb2RlTWlycm9yIGZvY3VzIGl0c2VsZiBvbgogICAgICBpbml0aWFsaXphdGlvbi4gRGVmYXVsdHMgdG8gb2ZmLgogICAgICBXaGVuIDxhIGhyZWY9IiNmcm9tVGV4dEFyZWEiPjxjb2RlPmZyb21UZXh0QXJlYTwvY29kZT48L2E+IGlzCiAgICAgIHVzZWQsIGFuZCBubyBleHBsaWNpdCB2YWx1ZSBpcyBnaXZlbiBmb3IgdGhpcyBvcHRpb24sIGl0IHdpbGwKICAgICAgaW5oZXJpdCB0aGUgc2V0dGluZyBmcm9tIHRoZSB0ZXh0YXJlYSdzIDxjb2RlPmF1dG9mb2N1czwvY29kZT4KICAgICAgYXR0cmlidXRlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9kcmFnRHJvcCI+PGNvZGU+ZHJhZ0Ryb3AgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db250cm9scyB3aGV0aGVyIGRyYWctYW5kLWRyb3AgaXMgZW5hYmxlZC4gT24gYnkgZGVmYXVsdC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25EcmFnRXZlbnQiPjxjb2RlPm9uRHJhZ0V2ZW50IChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZWRpdG9yIGlzIGhhbmRsaW5nCiAgICAgIGEgPGNvZGU+ZHJhZ2VudGVyPC9jb2RlPiwgPGNvZGU+ZHJhZ292ZXI8L2NvZGU+LAogICAgICBvciA8Y29kZT5kcm9wPC9jb2RlPiBldmVudC4gSXQgd2lsbCBiZSBwYXNzZWQgdGhlIGVkaXRvciBpbnN0YW5jZQogICAgICBhbmQgdGhlIGV2ZW50IG9iamVjdCBhcyBhcmd1bWVudHMuIFRoZSBjYWxsYmFjayBjYW4gY2hvb3NlIHRvCiAgICAgIGhhbmRsZSB0aGUgZXZlbnQgaXRzZWxmLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZAogICAgICByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gaW5kaWNhdGUgdGhhdCBDb2RlTWlycm9yIHNob3VsZCBub3QKICAgICAgZG8gYW55dGhpbmcgZnVydGhlci48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25LZXlFdmVudCI+PGNvZGU+b25LZXlFdmVudCAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGlzIHByb3ZpZGVzIGEgcmF0aGVyIGxvdy1sZXZlbCBob29rIGludG8gQ29kZU1pcnJvcidzIGtleQogICAgICBoYW5kbGluZy4gSWYgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24KICAgICAgZXZlcnkgPGNvZGU+a2V5ZG93bjwvY29kZT4sIDxjb2RlPmtleXVwPC9jb2RlPiwKICAgICAgYW5kIDxjb2RlPmtleXByZXNzPC9jb2RlPiBldmVudCB0aGF0IENvZGVNaXJyb3IgY2FwdHVyZXMuIEl0CiAgICAgIHdpbGwgYmUgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBlZGl0b3IgaW5zdGFuY2UgYW5kIHRoZSBrZXkKICAgICAgZXZlbnQuIFRoaXMga2V5IGV2ZW50IGlzIHByZXR0eSBtdWNoIHRoZSByYXcga2V5IGV2ZW50LCBleGNlcHQKICAgICAgdGhhdCBhIDxjb2RlPnN0b3AoKTwvY29kZT4gbWV0aG9kIGlzIGFsd2F5cyBhZGRlZCB0byBpdC4gWW91CiAgICAgIGNvdWxkIGZlZWQgaXQgdG8sIGZvciBleGFtcGxlLCA8Y29kZT5qUXVlcnkuRXZlbnQ8L2NvZGU+IHRvCiAgICAgIGZ1cnRoZXIgbm9ybWFsaXplIGl0Ljxicj5UaGlzIGZ1bmN0aW9uIGNhbiBpbnNwZWN0IHRoZSBrZXkKICAgICAgZXZlbnQsIGFuZCBoYW5kbGUgaXQgaWYgaXQgd2FudHMgdG8uIEl0IG1heSByZXR1cm4gdHJ1ZSB0byB0ZWxsCiAgICAgIENvZGVNaXJyb3IgdG8gaWdub3JlIHRoZSBldmVudC4gQmUgd2FyeSB0aGF0LCBvbiBzb21lIGJyb3dzZXJzLAogICAgICBzdG9wcGluZyBhIDxjb2RlPmtleWRvd248L2NvZGU+IGRvZXMgbm90IHN0b3AKICAgICAgdGhlIDxjb2RlPmtleXByZXNzPC9jb2RlPiBmcm9tIGZpcmluZywgd2hlcmVhcyBvbiBvdGhlcnMgaXQKICAgICAgZG9lcy4gSWYgeW91IHJlc3BvbmQgdG8gYW4gZXZlbnQsIHlvdSBzaG91bGQgcHJvYmFibHkgaW5zcGVjdAogICAgICBpdHMgPGNvZGU+dHlwZTwvY29kZT4gcHJvcGVydHkgYW5kIG9ubHkgZG8gc29tZXRoaW5nIHdoZW4gaXQKICAgICAgaXMgPGNvZGU+a2V5ZG93bjwvY29kZT4gKG9yIDxjb2RlPmtleXByZXNzPC9jb2RlPiBmb3IgYWN0aW9ucwogICAgICB0aGF0IG5lZWQgY2hhcmFjdGVyIGRhdGEpLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxoMiBpZD0ia2V5bWFwcyI+S2V5bWFwczwvaDI+CgogICAgPHA+S2V5bWFwcyBhcmUgd2F5cyB0byBhc3NvY2lhdGUga2V5cyB3aXRoIGZ1bmN0aW9uYWxpdHkuIEEga2V5bWFwCiAgICBpcyBhbiBvYmplY3QgbWFwcGluZyBzdHJpbmdzIHRoYXQgaWRlbnRpZnkgdGhlIGtleXMgdG8gZnVuY3Rpb25zCiAgICB0aGF0IGltcGxlbWVudCB0aGVpciBmdW5jdGlvbmFsaXR5LjwvcD4KCiAgICA8cD5LZXlzIGFyZSBpZGVudGlmaWVkIGVpdGhlciBieSBuYW1lIG9yIGJ5IGNoYXJhY3Rlci4KICAgIFRoZSA8Y29kZT5Db2RlTWlycm9yLmtleU5hbWVzPC9jb2RlPiBvYmplY3QgZGVmaW5lcyBuYW1lcyBmb3IKICAgIGNvbW1vbiBrZXlzIGFuZCBhc3NvY2lhdGVzIHRoZW0gd2l0aCB0aGVpciBrZXkgY29kZXMuIEV4YW1wbGVzIG9mCiAgICBuYW1lcyBkZWZpbmVkIGhlcmUgYXJlIDxjb2RlPkVudGVyPC9jb2RlPiwgPGNvZGU+RjU8L2NvZGU+LAogICAgYW5kIDxjb2RlPlE8L2NvZGU+LiBUaGVzZSBjYW4gYmUgcHJlZml4ZWQKICAgIHdpdGggPGNvZGU+U2hpZnQtPC9jb2RlPiwgPGNvZGU+Q21kLTwvY29kZT4sIDxjb2RlPkN0cmwtPC9jb2RlPiwKICAgIGFuZCA8Y29kZT5BbHQtPC9jb2RlPiAoaW4gdGhhdCBvcmRlciEpIHRvIHNwZWNpZnkgYSBtb2RpZmllci4gU28KICAgIGZvciBleGFtcGxlLCA8Y29kZT5TaGlmdC1DdHJsLVNwYWNlPC9jb2RlPiB3b3VsZCBiZSBhIHZhbGlkIGtleQogICAgaWRlbnRpZmllci48L3A+CgogICAgPHA+QWx0ZXJuYXRpdmVseSwgYSBjaGFyYWN0ZXIgY2FuIGJlIHNwZWNpZmllZCBkaXJlY3RseSBieQogICAgc3Vycm91bmRpbmcgaXQgaW4gc2luZ2xlIHF1b3RlcywgZm9yIGV4YW1wbGUgPGNvZGU+JyQnPC9jb2RlPgogICAgb3IgPGNvZGU+J3EnPC9jb2RlPi4gRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSB3YXkgYnJvd3NlcnMgZmlyZQogICAga2V5IGV2ZW50cywgdGhlc2UgbWF5IG5vdCBiZSBwcmVmaXhlZCB3aXRoIG1vZGlmaWVycy48L3A+CgogICAgPHA+VGhlIDxjb2RlPkNvZGVNaXJyb3Iua2V5TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlcyBrZXltYXBzCiAgICB3aXRoIG5hbWVzLiBVc2VyIGNvZGUgYW5kIGtleW1hcCBkZWZpbml0aW9ucyBjYW4gYXNzaWduIGV4dHJhCiAgICBwcm9wZXJ0aWVzIHRvIHRoaXMgb2JqZWN0LiBBbnl3aGVyZSB3aGVyZSBhIGtleW1hcCBpcyBleHBlY3RlZCwgYQogICAgc3RyaW5nIGNhbiBiZSBnaXZlbiwgd2hpY2ggd2lsbCBiZSBsb29rZWQgdXAgaW4gdGhpcyBvYmplY3QuIEl0CiAgICBhbHNvIGNvbnRhaW5zIHRoZSA8Y29kZT4iZGVmYXVsdCI8L2NvZGU+IGtleW1hcCBob2xkaW5nIHRoZQogICAgZGVmYXVsdCBiaW5kaW5ncy48L3A+CgogICAgPHA+VGhlIHZhbHVlcyBvZiBwcm9wZXJ0aWVzIGluIGtleW1hcHMgY2FuIGJlIGVpdGhlciBmdW5jdGlvbnMgb2YKICAgIGEgc2luZ2xlIGFyZ3VtZW50ICh0aGUgQ29kZU1pcnJvciBpbnN0YW5jZSksIG9yIHN0cmluZ3MuIFN1Y2gKICAgIHN0cmluZ3MgcmVmZXIgdG8gcHJvcGVydGllcyBvZiB0aGUKICAgIDxjb2RlPkNvZGVNaXJyb3IuY29tbWFuZHM8L2NvZGU+IG9iamVjdCwgd2hpY2ggZGVmaW5lcyBhIG51bWJlciBvZgogICAgY29tbW9uIGNvbW1hbmRzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGRlZmF1bHQga2V5YmluZGluZ3MsIGFuZCBtYXBzCiAgICB0aGVtIHRvIGZ1bmN0aW9ucy4gQSBrZXkgaGFuZGxlciBmdW5jdGlvbiBtYXkgdGhyb3cKICAgIDxjb2RlPkNvZGVNaXJyb3IuUGFzczwvY29kZT4gdG8gaW5kaWNhdGUgdGhhdCBpdCBoYXMgZGVjaWRlZCBub3QKICAgIHRvIGhhbmRsZSB0aGUga2V5LCBhbmQgb3RoZXIgaGFuZGxlcnMgKG9yIHRoZSBkZWZhdWx0IGJlaGF2aW9yKQogICAgc2hvdWxkIGJlIGdpdmVuIGEgdHVybi48L3A+CgogICAgPHA+S2V5cyBtYXBwZWQgdG8gY29tbWFuZCBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggdGhlCiAgICBjaGFyYWN0ZXJzIDxjb2RlPiJnbyI8L2NvZGU+ICh3aGljaCBzaG91bGQgYmUgdXNlZCBmb3IKICAgIGN1cnNvci1tb3ZlbWVudCBhY3Rpb25zKSB3aWxsIGJlIGZpcmVkIGV2ZW4gd2hlbiBhbgogICAgZXh0cmEgPGNvZGU+U2hpZnQ8L2NvZGU+IG1vZGlmaWVyIGlzIHByZXNlbnQgKGkuZS4gPGNvZGU+IlVwIjoKICAgICJnb0xpbmVVcCI8L2NvZGU+IG1hdGNoZXMgYm90aCB1cCBhbmQgc2hpZnQtdXApLiBUaGlzIGlzIHVzZWQgdG8KICAgIGVhc2lseSBpbXBsZW1lbnQgc2hpZnQtc2VsZWN0aW9uLjwvcD4KCiAgICA8cD5LZXltYXBzIGNhbiBkZWZlciB0byBlYWNoIG90aGVyIGJ5IGRlZmluaW5nCiAgICBhIDxjb2RlPmZhbGx0aHJvdWdoPC9jb2RlPiBwcm9wZXJ0eS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3aGVuIGEKICAgIGtleSBpcyBub3QgZm91bmQgaW4gdGhlIG1hcCBpdHNlbGYsIG9uZSBvciBtb3JlIG90aGVyIG1hcHMgc2hvdWxkCiAgICBiZSBzZWFyY2hlZC4gSXQgY2FuIGhvbGQgZWl0aGVyIGEgc2luZ2xlIGtleW1hcCBvciBhbiBhcnJheSBvZgogICAga2V5bWFwcy48L3A+CgogICAgPHA+V2hlbiBhIGtleW1hcCBjb250YWlucyBhIDxjb2RlPm5vZmFsbHRocm91Z2g8L2NvZGU+IHByb3BlcnR5CiAgICBzZXQgdG8gPGNvZGU+dHJ1ZTwvY29kZT4sIGtleXMgbWF0Y2hlZCBhZ2FpbnN0IHRoYXQgbWFwIHdpbGwgYmUKICAgIGlnbm9yZWQgaWYgdGhleSBkb24ndCBtYXRjaCBhbnkgb2YgdGhlIGJpbmRpbmdzIGluIHRoZSBtYXAgKG5vCiAgICBmdXJ0aGVyIGNoaWxkIG1hcHMgd2lsbCBiZSB0cmllZCwgYW5kIHRoZSBkZWZhdWx0IGVmZmVjdCBvZgogICAgaW5zZXJ0aW5nIGEgY2hhcmFjdGVyIHdpbGwgbm90IG9jY3VyKS48L3A+CgogICAgPGgyIGlkPSJzdHlsaW5nIj5DdXN0b21pemVkIFN0eWxpbmc8L2gyPgoKICAgIDxwPlVwIHRvIGEgY2VydGFpbiBleHRlbnQsIENvZGVNaXJyb3IncyBsb29rIGNhbiBiZSBjaGFuZ2VkIGJ5CiAgICBtb2RpZnlpbmcgc3R5bGUgc2hlZXQgZmlsZXMuIFRoZSBzdHlsZSBzaGVldHMgc3VwcGxpZWQgYnkgbW9kZXMKICAgIHNpbXBseSBwcm92aWRlIHRoZSBjb2xvcnMgZm9yIHRoYXQgbW9kZSwgYW5kIGNhbiBiZSBhZGFwdGVkIGluIGEKICAgIHZlcnkgc3RyYWlnaHRmb3J3YXJkIHdheS4gVG8gc3R5bGUgdGhlIGVkaXRvciBpdHNlbGYsIGl0IGlzCiAgICBwb3NzaWJsZSB0byBhbHRlciBvciBvdmVycmlkZSB0aGUgc3R5bGVzIGRlZmluZWQKICAgIGluIDxhIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+PGNvZGU+Y29kZW1pcnJvci5jc3M8L2NvZGU+PC9hPi48L3A+CgogICAgPHA+U29tZSBjYXJlIG11c3QgYmUgdGFrZW4gdGhlcmUsIHNpbmNlIGEgbG90IG9mIHRoZSBydWxlcyBpbiB0aGlzCiAgICBmaWxlIGFyZSBuZWNlc3NhcnkgdG8gaGF2ZSBDb2RlTWlycm9yIGZ1bmN0aW9uIHByb3Blcmx5LiBBZGp1c3RpbmcKICAgIGNvbG9ycyBzaG91bGQgYmUgc2FmZSwgb2YgY291cnNlLCBhbmQgd2l0aCBzb21lIGNhcmUgYSBsb3Qgb2YKICAgIG90aGVyIHRoaW5ncyBjYW4gYmUgY2hhbmdlZCBhcyB3ZWxsLiBUaGUgQ1NTIGNsYXNzZXMgZGVmaW5lZCBpbgogICAgdGhpcyBmaWxlIHNlcnZlIHRoZSBmb2xsb3dpbmcgcm9sZXM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yIj48Y29kZT5Db2RlTWlycm9yPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgb3V0ZXIgZWxlbWVudCBvZiB0aGUgZWRpdG9yLiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvcgogICAgICBib3JkZXJzIGFuZCBwb3NpdGlvbmluZy4gQ2FuIGFsc28gYmUgdXNlZCB0byBzZXQgc3R5bGVzIHRoYXQKICAgICAgc2hvdWxkIGhvbGQgZm9yIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBlZGl0b3IgKHN1Y2ggYXMgZm9udAogICAgICBhbmQgZm9udCBzaXplKSwgb3IgdG8gc2V0IGEgYmFja2dyb3VuZC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX3Njcm9sbCI+PGNvZGU+Q29kZU1pcnJvci1zY3JvbGw8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlZGl0b3Igc2Nyb2xscyAoPGNvZGU+b3ZlcmZsb3c6CiAgICAgIGF1dG88L2NvZGU+ICsgZml4ZWQgaGVpZ2h0KS4gQnkgZGVmYXVsdCwgaXQgZG9lcy4gR2l2aW5nCiAgICAgIHRoaXMgPGNvZGU+aGVpZ2h0OiBhdXRvOyBvdmVyZmxvdzogdmlzaWJsZTs8L2NvZGU+IHdpbGwgY2F1c2UKICAgICAgdGhlIGVkaXRvciB0byByZXNpemUgdG8gZml0IGl0cyBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZm9jdXNlZCI+PGNvZGU+Q29kZU1pcnJvci1mb2N1c2VkPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuZXZlciB0aGUgZWRpdG9yIGlzIGZvY3VzZWQsIHRoZSB0b3AgZWxlbWVudCBnZXRzIHRoaXMKICAgICAgY2xhc3MuIFRoaXMgaXMgdXNlZCB0byBoaWRlIHRoZSBjdXJzb3IgYW5kIGdpdmUgdGhlIHNlbGVjdGlvbiBhCiAgICAgIGRpZmZlcmVudCBjb2xvciB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9ndXR0ZXIiPjxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhpcyBmb3IgZ2l2aW5nIGEgYmFja2dyb3VuZCBvciBhIGJvcmRlciB0byB0aGUgZWRpdG9yCiAgICAgIGd1dHRlci4gRG9uJ3Qgc2V0IGFueSBwYWRkaW5nIGhlcmUsCiAgICAgIHVzZSA8Y29kZT5Db2RlTWlycm9yLWd1dHRlci10ZXh0PC9jb2RlPiBmb3IgdGhhdC4gQnkgZGVmYXVsdCwKICAgICAgdGhlIGd1dHRlciBpcyAnZmx1aWQnLCBtZWFuaW5nIGl0IHdpbGwgYWRqdXN0IGl0cyB3aWR0aCB0byB0aGUKICAgICAgbWF4aW11bSBsaW5lIG51bWJlciBvciBsaW5lIG1hcmtlciB3aWR0aC4gWW91IGNhbiBhbHNvIHNldCBhCiAgICAgIGZpeGVkIHdpZHRoIGlmIHlvdSB3YW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZ3V0dGVyX3RleHQiPjxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPlVzZWQgdG8gc3R5bGUgdGhlIGFjdHVhbCBsaW5lIG51bWJlcnMuIEZvciB0aGUgbnVtYmVycyB0bwogICAgICBsaW5lIHVwLCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgZm9udCBpbiB0aGUgZ3V0dGVyIGlzIHRoZQogICAgICBzYW1lIGFzIHRoZSBvbmUgaW4gdGhlIHJlc3Qgb2YgdGhlIGVkaXRvciwgc28geW91IHNob3VsZAogICAgICBwcm9iYWJseSBvbmx5IHNldCBmb250IHN0eWxlIGFuZCBzaXplIGluCiAgICAgIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBjbGFzcy48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX2xpbmVzIj48Y29kZT5Db2RlTWlycm9yLWxpbmVzPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgdmlzaWJsZSBsaW5lcy4gSWYgdGhpcyBoYXMgdmVydGljYWwKICAgICAgcGFkZGluZywgPGNvZGU+Q29kZU1pcnJvci1ndXR0ZXI8L2NvZGU+IHNob3VsZCBoYXZlIHRoZSBzYW1lCiAgICAgIHBhZGRpbmcuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9jdXJzb3IiPjxjb2RlPkNvZGVNaXJyb3ItY3Vyc29yPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgY3Vyc29yIGlzIGEgYmxvY2sgZWxlbWVudCB0aGF0IGlzIGFic29sdXRlbHkgcG9zaXRpb25lZC4KICAgICAgWW91IGNhbiBtYWtlIGl0IGxvb2sgd2hpY2hldmVyIHdheSB5b3Ugd2FudC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX3NlbGVjdGVkIj48Y29kZT5Db2RlTWlycm9yLXNlbGVjdGVkPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgc2VsZWN0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IDxjb2RlPnNwYW48L2NvZGU+IGVsZW1lbnRzCiAgICAgIHdpdGggdGhpcyBjbGFzcy48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX21hdGNoaW5nYnJhY2tldCI+PGNvZGU+Q29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQ8L2NvZGU+LAogICAgICAgIDxjb2RlPkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGVzZSBhcmUgdXNlZCB0byBzdHlsZSBtYXRjaGVkIChvciB1bm1hdGNoZWQpIGJyYWNrZXRzLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPlRoZSBhY3R1YWwgbGluZXMsIGFzIHdlbGwgYXMgdGhlIGN1cnNvciwgYXJlIHJlcHJlc2VudGVkCiAgICBieSA8Y29kZT5wcmU8L2NvZGU+IGVsZW1lbnRzLiBCeSBkZWZhdWx0IG5vIHRleHQgc3R5bGluZyAoc3VjaCBhcwogICAgYm9sZCkgdGhhdCBtaWdodCBjaGFuZ2UgbGluZSBoZWlnaHQgaXMgYXBwbGllZC4gSWYgeW91IGRvIHdhbnQKICAgIHN1Y2ggZWZmZWN0cywgeW91J2xsIGhhdmUgdG8gZ2l2ZSA8Y29kZT5Db2RlTWlycm9yIHByZTwvY29kZT4gYQogICAgZml4ZWQgaGVpZ2h0LjwvcD4KCiAgICA8cD5JZiB5b3VyIHBhZ2UncyBzdHlsZSBzaGVldHMgZG8gZnVua3kgdGhpbmdzIHRvCiAgICBhbGwgPGNvZGU+ZGl2PC9jb2RlPiBvciA8Y29kZT5wcmU8L2NvZGU+IGVsZW1lbnRzICh5b3UgcHJvYmFibHkKICAgIHNob3VsZG4ndCBkbyB0aGF0KSwgeW91J2xsIGhhdmUgdG8gZGVmaW5lIHJ1bGVzIHRvIGNhbmNlbCB0aGVzZQogICAgZWZmZWN0cyBvdXQgYWdhaW4gZm9yIGVsZW1lbnRzIHVuZGVyIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPgogICAgY2xhc3MuPC9wPgoKICAgIDxwPlRoZW1lcyBhcmUgYWxzbyBzaW1wbHkgQ1NTIGZpbGVzLCB3aGljaCBkZWZpbmUgY29sb3JzIGZvcgogICAgdmFyaW91cyBzeW50YWN0aWMgZWxlbWVudHMuIFNlZSB0aGUgZmlsZXMgaW4KICAgIHRoZSA8YSBocmVmPSIuLi90aGVtZS8iPjxjb2RlPnRoZW1lPC9jb2RlPjwvYT4gZGlyZWN0b3J5LjwvcD4KCiAgICA8aDIgaWQ9ImFwaSI+UHJvZ3JhbW1pbmcgQVBJPC9oMj4KCiAgICA8cD5BIGxvdCBvZiBDb2RlTWlycm9yIGZlYXR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSB0aHJvdWdoIGl0cyBBUEkuCiAgICBUaGlzIGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgeW91IG5lZWQgdG8gZG8gd29yayB0byBlbmFibGUgdGhlbSwKICAgIGFuZCB0aGUgYWR2YW50YWdlIHRoYXQgQ29kZU1pcnJvciB3aWxsIGZpdCBzZWFtbGVzc2x5IGludG8geW91cgogICAgYXBwbGljYXRpb24uPC9wPgoKICAgIDxwPldoZW5ldmVyIHBvaW50cyBpbiB0aGUgZG9jdW1lbnQgYXJlIHJlcHJlc2VudGVkLCB0aGUgQVBJIHVzZXMKICAgIG9iamVjdHMgd2l0aCA8Y29kZT5saW5lPC9jb2RlPiBhbmQgPGNvZGU+Y2g8L2NvZGU+IHByb3BlcnRpZXMuCiAgICBCb3RoIGFyZSB6ZXJvLWJhc2VkLiBDb2RlTWlycm9yIG1ha2VzIHN1cmUgdG8gJ2NsaXAnIGFueSBwb3NpdGlvbnMKICAgIHBhc3NlZCBieSBjbGllbnQgY29kZSBzbyB0aGF0IHRoZXkgZml0IGluc2lkZSB0aGUgZG9jdW1lbnQsIHNvIHlvdQogICAgc2hvdWxkbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IHNhbml0aXppbmcgeW91ciBjb29yZGluYXRlcy4gSWYgeW91CiAgICBnaXZlIDxjb2RlPmNoPC9jb2RlPiBhIHZhbHVlIG9mIDxjb2RlPm51bGw8L2NvZGU+LCBvciBkb24ndAogICAgc3BlY2lmeSBpdCwgaXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIHNwZWNpZmllZAogICAgbGluZS48L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9ImdldFZhbHVlIj48Y29kZT5nZXRWYWx1ZSgpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY3VycmVudCBlZGl0b3IgY29udGVudC48L2RkPgogICAgICA8ZHQgaWQ9InNldFZhbHVlIj48Y29kZT5zZXRWYWx1ZShzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgdGhlIGVkaXRvciBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldFNlbGVjdGlvbiI+PGNvZGU+Z2V0U2VsZWN0aW9uKCkg4oaSIHN0cmluZzwvY29kZT48L2R0PgogICAgICA8ZGQ+R2V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29kZS48L2RkPgogICAgICA8ZHQgaWQ9InJlcGxhY2VTZWxlY3Rpb24iPjxjb2RlPnJlcGxhY2VTZWxlY3Rpb24oc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVwbGFjZSB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIGdpdmVuIHN0cmluZy48L2RkPgoKICAgICAgPGR0IGlkPSJmb2N1cyI+PGNvZGU+Zm9jdXMoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+R2l2ZSB0aGUgZWRpdG9yIGZvY3VzLjwvZGQ+CiAgICAgIDxkdCBpZD0ic2Nyb2xsVG8iPjxjb2RlPnNjcm9sbFRvKHgsIHkpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TY3JvbGwgdGhlIGVkaXRvciB0byBhIGdpdmVuIChwaXhlbCkgcG9zaXRpb24uIEJvdGgKICAgICAgYXJndW1lbnRzIG1heSBiZSBsZWZ0IGFzIDxjb2RlPm51bGw8L2NvZGU+CiAgICAgIG9yIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gdG8gaGF2ZSBubyBlZmZlY3QuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRTY3JvbGxJbmZvIj48Y29kZT5nZXRTY3JvbGxJbmZvKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCBhbiA8Y29kZT57eCwgeSwgd2lkdGgsIGhlaWdodH08L2NvZGU+IG9iamVjdCB0aGF0CiAgICAgIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGFuZCBzY3JvbGxhYmxlIGFyZWEgc2l6ZQogICAgICBvZiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9InNldE9wdGlvbiI+PGNvZGU+c2V0T3B0aW9uKG9wdGlvbiwgdmFsdWUpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGVkaXRvci4gPGNvZGU+b3B0aW9uPC9jb2RlPgogICAgICBzaG91bGQgdGhlIG5hbWUgb2YgYW4gPGEgaHJlZj0iI2NvbmZpZyI+b3B0aW9uPC9hPiwKICAgICAgYW5kIDxjb2RlPnZhbHVlPC9jb2RlPiBzaG91bGQgYmUgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdAogICAgICBvcHRpb24uPC9kZD4KICAgICAgPGR0IGlkPSJnZXRPcHRpb24iPjxjb2RlPmdldE9wdGlvbihvcHRpb24pIOKGkiB2YWx1ZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0cmlldmVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBnaXZlbiBvcHRpb24gZm9yIHRoaXMKICAgICAgZWRpdG9yIGluc3RhbmNlLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImN1cnNvckNvb3JkcyI+PGNvZGU+Y3Vyc29yQ29vcmRzKHN0YXJ0LCBtb2RlKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIGFuIDxjb2RlPnt4LCB5LCB5Qm90fTwvY29kZT4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlCiAgICAgIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJzb3IuIElmIDxjb2RlPm1vZGU8L2NvZGU+CiAgICAgIGlzIDxjb2RlPiJsb2NhbCI8L2NvZGU+LCB0aGV5IHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0CiAgICAgIGNvcm5lciBvZiB0aGUgZWRpdGFibGUgZG9jdW1lbnQuIElmIGl0IGlzIDxjb2RlPiJwYWdlIjwvY29kZT4gb3IKICAgICAgbm90IGdpdmVuLCB0aGV5IGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZQogICAgICBwYWdlLiA8Y29kZT55Qm90PC9jb2RlPiBpcyB0aGUgY29vcmRpbmF0ZSBvZiB0aGUgYm90dG9tIG9mIHRoZQogICAgICBjdXJzb3IuIDxjb2RlPnN0YXJ0PC9jb2RlPiBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHlvdQogICAgICB3YW50IHRoZSBzdGFydCBvciB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24uPC9kZD4KICAgICAgPGR0IGlkPSJjaGFyQ29vcmRzIj48Y29kZT5jaGFyQ29vcmRzKHBvcywgbW9kZSkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+TGlrZSA8Y29kZT5jdXJzb3JDb29yZHM8L2NvZGU+LCBidXQgcmV0dXJucyB0aGUgcG9zaXRpb24gb2YKICAgICAgYW4gYXJiaXRyYXJ5IGNoYXJhY3RlcnMuIDxjb2RlPnBvczwvY29kZT4gc2hvdWxkIGJlCiAgICAgIGEgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0LjwvZGQ+CiAgICAgIDxkdCBpZD0iY29vcmRzQ2hhciI+PGNvZGU+Y29vcmRzQ2hhcihvYmplY3QpIOKGkiBwb3M8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdpdmVuIGFuIDxjb2RlPnt4LCB5fTwvY29kZT4gb2JqZWN0IChpbiBwYWdlIGNvb3JkaW5hdGVzKSwKICAgICAgcmV0dXJucyB0aGUgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gcG9zaXRpb24gdGhhdCBjb3JyZXNwb25kcyB0bwogICAgICBpdC48L2RkPgoKICAgICAgPGR0IGlkPSJ1bmRvIj48Y29kZT51bmRvKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlVuZG8gb25lIGVkaXQgKGlmIGFueSB1bmRvIGV2ZW50cyBhcmUgc3RvcmVkKS48L2RkPgogICAgICA8ZHQgaWQ9InJlZG8iPjxjb2RlPnJlZG8oKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVkbyBvbmUgdW5kb25lIGVkaXQuPC9kZD4KICAgICAgPGR0IGlkPSJoaXN0b3J5U2l6ZSI+PGNvZGU+aGlzdG9yeVNpemUoKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIGFuIG9iamVjdCB3aXRoIDxjb2RlPnt1bmRvLCByZWRvfTwvY29kZT4gcHJvcGVydGllcywKICAgICAgYm90aCBvZiB3aGljaCBob2xkIGludGVnZXJzLCBpbmRpY2F0aW5nIHRoZSBhbW91bnQgb2Ygc3RvcmVkCiAgICAgIHVuZG8gYW5kIHJlZG8gb3BlcmF0aW9ucy48L2RkPgogICAgICA8ZHQgaWQ9ImNsZWFySGlzdG9yeSI+PGNvZGU+Y2xlYXJIaXN0b3J5KCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNsZWFycyB0aGUgZWRpdG9yJ3MgdW5kbyBoaXN0b3J5LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImluZGVudExpbmUiPjxjb2RlPmluZGVudExpbmUobGluZSwgZGlyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVzZXQgdGhlIGdpdmVuIGxpbmUncyBpbmRlbnRhdGlvbiB0byB0aGUgaW5kZW50YXRpb24KICAgICAgcHJlc2NyaWJlZCBieSB0aGUgbW9kZS4gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBnaXZlbiwKICAgICAgaW5kZW50YXRpb24gd2lsbCBiZSBpbmNyZWFzZWQgKGlmIDxjb2RlPmRpcjwvY29kZT4gaXMgdHJ1ZSkgb3IKICAgICAgZGVjcmVhc2VkIChpZiBmYWxzZSkgYnkgYW4gPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij5pbmRlbnQKICAgICAgdW5pdDwvYT4gaW5zdGVhZC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRUb2tlbkF0Ij48Y29kZT5nZXRUb2tlbkF0KHBvcykg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b2tlbiB0aGUgY3VycmVudCBtb2RlIGZvdW5kCiAgICAgIGJlZm9yZSB0aGUgZ2l2ZW4gcG9zaXRpb24gKGEgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0KS4gVGhlCiAgICAgIHJldHVybmVkIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogICAgICA8ZGw+CiAgICAgICAgPGR0Pjxjb2RlPnN0YXJ0PC9jb2RlPjwvZHQ+PGRkPlRoZSBjaGFyYWN0ZXIgKG9uIHRoZSBnaXZlbiBsaW5lKSBhdCB3aGljaCB0aGUgdG9rZW4gc3RhcnRzLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPmVuZDwvY29kZT48L2R0PjxkZD5UaGUgY2hhcmFjdGVyIGF0IHdoaWNoIHRoZSB0b2tlbiBlbmRzLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPnN0cmluZzwvY29kZT48L2R0PjxkZD5UaGUgdG9rZW4ncyBzdHJpbmcuPC9kZD4KICAgICAgICA8ZHQ+PGNvZGU+Y2xhc3NOYW1lPC9jb2RlPjwvZHQ+PGRkPlRoZSBjbGFzcyB0aGUgbW9kZSBhc3NpZ25lZAogICAgICAgIHRvIHRoZSB0b2tlbi4gKENhbiBiZSBudWxsIHdoZW4gbm8gY2xhc3Mgd2FzIGFzc2lnbmVkLik8L2RkPgogICAgICAgIDxkdD48Y29kZT5zdGF0ZTwvY29kZT48L2R0PjxkZD5UaGUgbW9kZSdzIHN0YXRlIGF0IHRoZSBlbmQgb2YgdGhpcyB0b2tlbi48L2RkPgogICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9Im1hcmtUZXh0Ij48Y29kZT5tYXJrVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DYW4gYmUgdXNlZCB0byBtYXJrIGEgcmFuZ2Ugb2YgdGV4dCB3aXRoIGEgc3BlY2lmaWMgQ1NTCiAgICAgIGNsYXNzIG5hbWUuIDxjb2RlPmZyb208L2NvZGU+IGFuZCA8Y29kZT50bzwvY29kZT4gc2hvdWxkCiAgICAgIGJlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdHMuIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYW4KICAgICAgb2JqZWN0IHdpdGggdHdvIG1ldGhvZHMsIDxjb2RlPmNsZWFyKCk8L2NvZGU+LCB3aGljaCByZW1vdmVzIHRoZQogICAgICBtYXJrLCBhbmQgPGNvZGU+ZmluZCgpPC9jb2RlPiwgd2hpY2ggcmV0dXJucyBhIDxjb2RlPntmcm9tLAogICAgICB0b308L2NvZGU+IChib3RoIGRvY3VtZW50IHBvc2l0aW9ucyksIGluZGljYXRpbmcgdGhlIGN1cnJlbnQKICAgICAgcG9zaXRpb24gb2YgdGhlIG1hcmtlZCByYW5nZS48L2RkPgoKICAgICAgPGR0IGlkPSJzZXRCb29rbWFyayI+PGNvZGU+c2V0Qm9va21hcmsocG9zKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbnNlcnRzIGEgYm9va21hcmssIGEgaGFuZGxlIHRoYXQgZm9sbG93cyB0aGUgdGV4dCBhcm91bmQgaXQKICAgICAgYXMgaXQgaXMgYmVpbmcgZWRpdGVkLCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uIEEgYm9va21hcmsgaGFzIHR3bwogICAgICBtZXRob2RzIDxjb2RlPmZpbmQoKTwvY29kZT4gYW5kIDxjb2RlPmNsZWFyKCk8L2NvZGU+LiBUaGUgZmlyc3QKICAgICAgcmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgYm9va21hcmssIGlmIGl0IGlzIHN0aWxsIGluCiAgICAgIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBzZWNvbmQgZXhwbGljaXRseSByZW1vdmVzIHRoZQogICAgICBib29rbWFyay48L2RkPgoKICAgICAgPGR0IGlkPSJmaW5kTWFya3NBdCI+PGNvZGU+ZmluZE1hcmtzQXQocG9zKSDihpIgYXJyYXk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBib29rbWFya3MgYW5kIG1hcmtlZCByYW5nZXMKICAgICAgcHJlc2VudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uPC9kZD4KCiAgICAgIDxkdCBpZD0ic2V0TWFya2VyIj48Y29kZT5zZXRNYXJrZXIobGluZSwgdGV4dCwgY2xhc3NOYW1lKSDihpIgbGluZUhhbmRsZTwvY29kZT48L2R0PgogICAgICA8ZGQ+QWRkIGEgZ3V0dGVyIG1hcmtlciBmb3IgdGhlIGdpdmVuIGxpbmUuIEd1dHRlciBtYXJrZXJzIGFyZQogICAgICBzaG93biBpbiB0aGUgbGluZS1udW1iZXIgYXJlYSAoaW5zdGVhZCBvZiB0aGUgbnVtYmVyIGZvciB0aGlzCiAgICAgIGxpbmUpLiBCb3RoIDxjb2RlPnRleHQ8L2NvZGU+IGFuZCA8Y29kZT5jbGFzc05hbWU8L2NvZGU+IGFyZQogICAgICBvcHRpb25hbC4gU2V0dGluZyA8Y29kZT50ZXh0PC9jb2RlPiB0byBhIFVuaWNvZGUgY2hhcmFjdGVyIGxpa2UKICAgICAg4pePIHRlbmRzIHRvIGdpdmUgYSBuaWNlIGVmZmVjdC4gVG8gcHV0IGEgcGljdHVyZSBpbiB0aGUgZ3V0dGVyLAogICAgICBzZXQgPGNvZGU+dGV4dDwvY29kZT4gdG8gYSBzcGFjZSBhbmQgPGNvZGU+Y2xhc3NOYW1lPC9jb2RlPiB0bwogICAgICBzb21ldGhpbmcgdGhhdCBzZXRzIGEgYmFja2dyb3VuZCBpbWFnZS4gSWYgeW91CiAgICAgIHNwZWNpZnkgPGNvZGU+dGV4dDwvY29kZT4sIHRoZSBnaXZlbiB0ZXh0ICh3aGljaCBtYXkgY29udGFpbgogICAgICBIVE1MKSB3aWxsLCBieSBkZWZhdWx0LCByZXBsYWNlIHRoZSBsaW5lIG51bWJlciBmb3IgdGhhdCBsaW5lLgogICAgICBJZiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50LCB5b3UgY2FuIGluY2x1ZGUgdGhlCiAgICAgIHN0cmluZyA8Y29kZT4lTiU8L2NvZGU+IGluIHRoZSB0ZXh0LCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5CiAgICAgIHRoZSBsaW5lIG51bWJlci48L2RkPgogICAgICA8ZHQgaWQ9ImNsZWFyTWFya2VyIj48Y29kZT5jbGVhck1hcmtlcihsaW5lKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2xlYXJzIGEgbWFya2VyIGNyZWF0ZWQKICAgICAgd2l0aCA8Y29kZT5zZXRNYXJrZXI8L2NvZGU+LiA8Y29kZT5saW5lPC9jb2RlPiBjYW4gYmUgZWl0aGVyIGEKICAgICAgbnVtYmVyIG9yIGEgaGFuZGxlIHJldHVybmVkIGJ5IDxjb2RlPnNldE1hcmtlcjwvY29kZT4gKHNpbmNlIGEKICAgICAgbnVtYmVyIG1heSBub3cgcmVmZXIgdG8gYSBkaWZmZXJlbnQgbGluZSBpZiBzb21ldGhpbmcgd2FzIGFkZGVkCiAgICAgIG9yIGRlbGV0ZWQpLjwvZGQ+CiAgICAgIDxkdCBpZD0ic2V0TGluZUNsYXNzIj48Y29kZT5zZXRMaW5lQ2xhc3MobGluZSwgY2xhc3NOYW1lLCBiYWNrZ3JvdW5kQ2xhc3NOYW1lKSDihpIgbGluZUhhbmRsZTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IGEgQ1NTIGNsYXNzIG5hbWUgZm9yIHRoZSBnaXZlbiBsaW5lLiA8Y29kZT5saW5lPC9jb2RlPgogICAgICBjYW4gYmUgYSBudW1iZXIgb3IgYSBsaW5lIGhhbmRsZSAoYXMgcmV0dXJuZWQKICAgICAgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPiBvciB0aGlzCiAgICAgIGZ1bmN0aW9uKS4gPGNvZGU+Y2xhc3NOYW1lPC9jb2RlPiB3aWxsIGJlIHVzZWQgdG8gc3R5bGUgdGhlIHRleHQKICAgICAgZm9yIHRoZSBsaW5lLCBhbmQgPGNvZGU+YmFja2dyb3VuZENsYXNzTmFtZTwvY29kZT4gdG8gc3R5bGUgaXRzCiAgICAgIGJhY2tncm91bmQgKHdoaWNoIGxpZXMgYmVoaW5kIHRoZSBzZWxlY3Rpb24pLgogICAgICBQYXNzIDxjb2RlPm51bGw8L2NvZGU+IHRvIGNsZWFyIHRoZSBjbGFzc2VzIGZvciBhIGxpbmUuPC9kZD4KICAgICAgPGR0IGlkPSJoaWRlTGluZSI+PGNvZGU+aGlkZUxpbmUobGluZSkg4oaSIGxpbmVIYW5kbGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPkhpZGUgdGhlIGdpdmVuIGxpbmUgKGVpdGhlciBieSBudW1iZXIgb3IgYnkgaGFuZGxlKS4gSGlkZGVuCiAgICAgIGxpbmVzIGRvbid0IHNob3cgdXAgaW4gdGhlIGVkaXRvciwgYW5kIHRoZWlyIG51bWJlcnMgYXJlIHNraXBwZWQKICAgICAgd2hlbiA8YSBocmVmPSIjb3B0aW9uX2xpbmVOdW1iZXJzIj5saW5lIG51bWJlcnM8L2E+IGFyZSBlbmFibGVkLgogICAgICBEZWxldGluZyBhIHJlZ2lvbiBhcm91bmQgdGhlbSBkb2VzIGRlbGV0ZSB0aGVtLCBhbmQgY29waW5nIGEKICAgICAgcmVnaW9uIGFyb3VuZCB3aWxsIGluY2x1ZGUgdGhlbSBpbiB0aGUgY29waWVkIHRleHQuPC9kZD4KICAgICAgPGR0IGlkPSJzaG93TGluZSI+PGNvZGU+c2hvd0xpbmUobGluZSkg4oaSIGxpbmVIYW5kbGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBpbnZlcnNlIG9mIDxjb2RlPmhpZGVMaW5lPC9jb2RlPuKAlHJlLXNob3dzIGEgcHJldmlvdXNseQogICAgICBoaWRkZW4gbGluZSwgYnkgbnVtYmVyIG9yIGJ5IGhhbmRsZS48L2RkPgoKICAgICAgPGR0IGlkPSJvbkRlbGV0ZUxpbmUiPjxjb2RlPm9uRGVsZXRlTGluZShsaW5lLCBmdW5jKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVnaXN0ZXIgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgbGluZSBpcwogICAgICBkZWxldGVkIGZyb20gdGhlIGRvY3VtZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImxpbmVJbmZvIj48Y29kZT5saW5lSW5mbyhsaW5lKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBsaW5lIG51bWJlciwgdGV4dCBjb250ZW50LCBhbmQgbWFya2VyIHN0YXR1cyBvZgogICAgICB0aGUgZ2l2ZW4gbGluZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBhIG51bWJlciBvciBhIGhhbmRsZQogICAgICByZXR1cm5lZCBieSA8Y29kZT5zZXRNYXJrZXI8L2NvZGU+LiBUaGUgcmV0dXJuZWQgb2JqZWN0IGhhcyB0aGUKICAgICAgc3RydWN0dXJlIDxjb2RlPntsaW5lLCBoYW5kbGUsIHRleHQsIG1hcmtlclRleHQsIG1hcmtlckNsYXNzLAogICAgICBsaW5lQ2xhc3MsIGJnQ2xhc3N9PC9jb2RlPi48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRMaW5lSGFuZGxlIj48Y29kZT5nZXRMaW5lSGFuZGxlKG51bSkg4oaSIGxpbmVIYW5kbGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPkZldGNoZXMgdGhlIGxpbmUgaGFuZGxlIGZvciB0aGUgZ2l2ZW4gbGluZSBudW1iZXIuPC9kZD4KCiAgICAgIDxkdCBpZD0iYWRkV2lkZ2V0Ij48Y29kZT5hZGRXaWRnZXQocG9zLCBub2RlLCBzY3JvbGxJbnRvVmlldyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlB1dHMgPGNvZGU+bm9kZTwvY29kZT4sIHdoaWNoIHNob3VsZCBiZSBhbiBhYnNvbHV0ZWx5CiAgICAgIHBvc2l0aW9uZWQgRE9NIG5vZGUsIGludG8gdGhlIGVkaXRvciwgcG9zaXRpb25lZCByaWdodCBiZWxvdyB0aGUKICAgICAgZ2l2ZW4gPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gcG9zaXRpb24uCiAgICAgIFdoZW4gPGNvZGU+c2Nyb2xsSW50b1ZpZXc8L2NvZGU+IGlzIHRydWUsIHRoZSBlZGl0b3Igd2lsbCBlbnN1cmUKICAgICAgdGhhdCB0aGUgZW50aXJlIG5vZGUgaXMgdmlzaWJsZSAoaWYgcG9zc2libGUpLiBUbyByZW1vdmUgdGhlCiAgICAgIHdpZGdldCBhZ2Fpbiwgc2ltcGx5IHVzZSBET00gbWV0aG9kcyAobW92ZSBpdCBzb21ld2hlcmUgZWxzZSwgb3IKICAgICAgY2FsbCA8Y29kZT5yZW1vdmVDaGlsZDwvY29kZT4gb24gaXRzIHBhcmVudCkuPC9kZD4KCiAgICAgIDxkdCBpZD0ibWF0Y2hCcmFja2V0cyI+PGNvZGU+bWF0Y2hCcmFja2V0cygpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Gb3JjZSBtYXRjaGluZy1icmFja2V0LWhpZ2hsaWdodGluZyB0byBoYXBwZW4uPC9kZD4KCiAgICAgIDxkdCBpZD0ibGluZUNvdW50Ij48Y29kZT5saW5lQ291bnQoKSDihpIgbnVtYmVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5HZXQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldEN1cnNvciI+PGNvZGU+Z2V0Q3Vyc29yKHN0YXJ0KSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD48Y29kZT5zdGFydDwvY29kZT4gaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3RhcnQKICAgICAgb3IgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uIG11c3QgYmUgcmV0cmlldmVkLiBJZiBpdCBpcyBub3QKICAgICAgZ2l2ZW4sIHRoZSBjdXJyZW50IGN1cnNvciBwb3MsIGkuZS4gdGhlIHNpZGUgb2YgdGhlIHNlbGVjdGlvbgogICAgICB0aGF0IHdvdWxkIG1vdmUgaWYgeW91IHByZXNzZWQgYW4gYXJyb3cga2V5LCBpcyBjaG9zZW4uCiAgICAgIEEgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0IHdpbGwgYmUgcmV0dXJuZWQuPC9kZD4KICAgICAgPGR0IGlkPSJzb21ldGhpbmdTZWxlY3RlZCI+PGNvZGU+c29tZXRoaW5nU2VsZWN0ZWQoKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJuIHRydWUgaWYgYW55IHRleHQgaXMgc2VsZWN0ZWQuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRDdXJzb3IiPjxjb2RlPnNldEN1cnNvcihwb3MpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgdGhlIGN1cnNvciBwb3NpdGlvbi4gWW91IGNhbiBlaXRoZXIgcGFzcyBhCiAgICAgIHNpbmdsZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QsIG9yIHRoZSBsaW5lIGFuZCB0aGUKICAgICAgY2hhcmFjdGVyIGFzIHR3byBzZXBhcmF0ZSBwYXJhbWV0ZXJzLjwvZGQ+CiAgICAgIDxkdCBpZD0ic2V0U2VsZWN0aW9uIj48Y29kZT5zZXRTZWxlY3Rpb24oc3RhcnQsIGVuZCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlNldCB0aGUgc2VsZWN0aW9uIHJhbmdlLiA8Y29kZT5zdGFydDwvY29kZT4KICAgICAgYW5kIDxjb2RlPmVuZDwvY29kZT4gc2hvdWxkIGJlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdHMuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0TGluZSI+PGNvZGU+Z2V0TGluZShuKSDihpIgc3RyaW5nPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5HZXQgdGhlIGNvbnRlbnQgb2YgbGluZSA8Y29kZT5uPC9jb2RlPi48L2RkPgogICAgICA8ZHQgaWQ9InNldExpbmUiPjxjb2RlPnNldExpbmUobiwgdGV4dCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlNldCB0aGUgY29udGVudCBvZiBsaW5lIDxjb2RlPm48L2NvZGU+LjwvZGQ+CiAgICAgIDxkdCBpZD0icmVtb3ZlTGluZSI+PGNvZGU+cmVtb3ZlTGluZShuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVtb3ZlIHRoZSBnaXZlbiBsaW5lIGZyb20gdGhlIGRvY3VtZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldFJhbmdlIj48Y29kZT5nZXRSYW5nZShmcm9tLCB0bykg4oaSIHN0cmluZzwvY29kZT48L3RkPgogICAgICA8ZGQ+R2V0IHRoZSB0ZXh0IGJldHdlZW4gdGhlIGdpdmVuIHBvaW50cyBpbiB0aGUgZWRpdG9yLCB3aGljaAogICAgICBzaG91bGQgYmUgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0cy48L2RkPgogICAgICA8ZHQgaWQ9InJlcGxhY2VSYW5nZSI+PGNvZGU+cmVwbGFjZVJhbmdlKHN0cmluZywgZnJvbSwgdG8pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXBsYWNlIHRoZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBiZXR3ZWVuIDxjb2RlPmZyb208L2NvZGU+CiAgICAgIGFuZCA8Y29kZT50bzwvY29kZT4gd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nLiA8Y29kZT5mcm9tPC9jb2RlPgogICAgICBhbmQgPGNvZGU+dG88L2NvZGU+IG11c3QgYmUgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4KICAgICAgb2JqZWN0cy4gPGNvZGU+dG88L2NvZGU+IGNhbiBiZSBsZWZ0IG9mZiB0byBzaW1wbHkgaW5zZXJ0IHRoZQogICAgICBzdHJpbmcgYXQgcG9zaXRpb24gPGNvZGU+ZnJvbTwvY29kZT4uPC9kZD4KCiAgICAgIDxkdCBpZD0icG9zRnJvbUluZGV4Ij48Y29kZT5wb3NGcm9tSW5kZXgoaW5kZXgpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNhbGN1bGF0ZXMgYW5kIHJldHVybnMgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QgZm9yIGEKICAgICAgemVyby1iYXNlZCA8Y29kZT5pbmRleDwvY29kZT4gd2hvJ3MgdmFsdWUgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZQogICAgICBlZGl0b3IncyB0ZXh0LiBJZiB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+IGlzIG91dCBvZiByYW5nZSBvZiB0aGUgdGV4dCB0aGVuCiAgICAgIHRoZSByZXR1cm5lZCBvYmplY3QgaXMgY2xpcHBlZCB0byBzdGFydCBvciBlbmQgb2YgdGhlIHRleHQKICAgICAgcmVzcGVjdGl2ZWx5LjwvZGQ+CiAgICAgIDxkdCBpZD0iaW5kZXhGcm9tUG9zIj48Y29kZT5pbmRleEZyb21Qb3Mob2JqZWN0KSDihpIgbnVtYmVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgcmV2ZXJzZSBvZiA8YSBocmVmPSIjcG9zRnJvbUluZGV4Ij48Y29kZT5wb3NGcm9tSW5kZXg8L2NvZGU+PC9hPi48L2RkPgogICAgPC9kbD4KCiAgICA8cD5UaGUgZm9sbG93aW5nIGFyZSBtb3JlIGxvdy1sZXZlbCBtZXRob2RzOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdCBpZD0ib3BlcmF0aW9uIj48Y29kZT5vcGVyYXRpb24oZnVuYykg4oaSIHJlc3VsdDwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29kZU1pcnJvciBpbnRlcm5hbGx5IGJ1ZmZlcnMgY2hhbmdlcyBhbmQgb25seSB1cGRhdGVzIGl0cwogICAgICBET00gc3RydWN0dXJlIGFmdGVyIGl0IGhhcyBmaW5pc2hlZCBwZXJmb3JtaW5nIHNvbWUgb3BlcmF0aW9uLgogICAgICBJZiB5b3UgbmVlZCB0byBwZXJmb3JtIGEgbG90IG9mIG9wZXJhdGlvbnMgb24gYSBDb2RlTWlycm9yCiAgICAgIGluc3RhbmNlLCB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBhIGZ1bmN0aW9uIGFyZ3VtZW50LiBJdAogICAgICB3aWxsIGNhbGwgdGhlIGZ1bmN0aW9uLCBidWZmZXJpbmcgdXAgYWxsIGNoYW5nZXMsIGFuZCBvbmx5IGRvaW5nCiAgICAgIHRoZSBleHBlbnNpdmUgdXBkYXRlIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLiBUaGlzIGNhbiBiZSBhCiAgICAgIGxvdCBmYXN0ZXIuIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG1ldGhvZCB3aWxsIGJlIHRoZSByZXR1cm4KICAgICAgdmFsdWUgb2YgeW91ciBmdW5jdGlvbi48L2RkPgoKICAgICAgPGR0IGlkPSJjb21wb3VuZENoYW5nZSI+PGNvZGU+Y29tcG91bmRDaGFuZ2UoZnVuYykg4oaSIHJlc3VsdDwvY29kZT48L2R0PgogICAgICA8ZGQ+V2lsbCBjYWxsIHRoZSBnaXZlbiBmdW5jdGlvbiAoYW5kIHJldHVybiBpdHMgcmVzdWx0KSwKICAgICAgY29tYmluaW5nIGFsbCBjaGFuZ2VzIG1hZGUgd2hpbGUgdGhhdCBmdW5jdGlvbiBleGVjdXRlcyBpbnRvIGEKICAgICAgc2luZ2xlIHVuZG8gZXZlbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0icmVmcmVzaCI+PGNvZGU+cmVmcmVzaCgpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JZiB5b3VyIGNvZGUgZG9lcyBzb21ldGhpbmcgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBlZGl0b3IKICAgICAgZWxlbWVudCAod2luZG93IHJlc2l6ZXMgYXJlIGFscmVhZHkgbGlzdGVuZWQgZm9yKSwgb3IgdW5oaWRlcwogICAgICBpdCwgeW91IHNob3VsZCBwcm9iYWJseSBmb2xsb3cgdXAgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCB0bwogICAgICBlbnN1cmUgQ29kZU1pcnJvciBpcyBzdGlsbCBsb29raW5nIGFzIGludGVuZGVkLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldElucHV0RmllbGQiPjxjb2RlPmdldElucHV0RmllbGQoKSDihpIgdGV4dGFyZWE8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIGhpZGRlbiB0ZXh0YXJlYSB1c2VkIHRvIHJlYWQgaW5wdXQuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRXcmFwcGVyRWxlbWVudCI+PGNvZGU+Z2V0V3JhcHBlckVsZW1lbnQoKSDihpIgbm9kZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgRE9NIG5vZGUgdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0b3IuIFJlbW92ZSB0aGlzCiAgICAgIGZyb20geW91ciB0cmVlIHRvIGRlbGV0ZSBhbiBlZGl0b3IgaW5zdGFuY2UuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRTY3JvbGxlckVsZW1lbnQiPjxjb2RlPmdldFNjcm9sbGVyRWxlbWVudCgpIOKGkiBub2RlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBET00gbm9kZSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc2l6aW5nIGFuZAogICAgICB0aGUgc2Nyb2xsaW5nIG9mIHRoZSBlZGl0b3IuIFlvdSBjYW4gY2hhbmdlCiAgICAgIHRoZSA8Y29kZT5oZWlnaHQ8L2NvZGU+IGFuZCA8Y29kZT53aWR0aDwvY29kZT4gc3R5bGVzIG9mIHRoaXMKICAgICAgZWxlbWVudCB0byByZXNpemUgYW4gZWRpdG9yLiAoWW91IG1pZ2h0IGhhdmUgdG8gY2FsbAogICAgICB0aGUgPGEgaHJlZj0iI3JlZnJlc2giPjxjb2RlPnJlZnJlc2g8L2NvZGU+PC9hPiBtZXRob2QKICAgICAgYWZ0ZXJ3YXJkcy4pPC9kZD4KICAgICAgPGR0IGlkPSJnZXRHdXR0ZXJFbGVtZW50Ij48Y29kZT5nZXRHdXR0ZXJFbGVtZW50KCkg4oaSIG5vZGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPkZldGNoZXMgdGhlIERPTSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdG9yIGd1dHRlci48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRTdGF0ZUFmdGVyIj48Y29kZT5nZXRTdGF0ZUFmdGVyKGxpbmUpIOKGkiBzdGF0ZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbW9kZSdzIHBhcnNlciBzdGF0ZSwgaWYgYW55LCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBnaXZlbiBsaW5lIG51bWJlci4gSWYgbm8gbGluZSBudW1iZXIgaXMgZ2l2ZW4sIHRoZSBzdGF0ZSBhdCB0aGUKICAgICAgZW5kIG9mIHRoZSBkb2N1bWVudCBpcyByZXR1cm5lZC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBzdG9yaW5nCiAgICAgIHBhcnNpbmcgZXJyb3JzIGluIHRoZSBzdGF0ZSwgb3IgZ2V0dGluZyBvdGhlciBraW5kcyBvZgogICAgICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciBhIGxpbmUuPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImZyb21UZXh0QXJlYSI+RmluYWxseSwgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IG9iamVjdAogICAgaXRzZWxmIGhhcyBhIG1ldGhvZCA8Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+LiBUaGlzIHRha2VzIGEKICAgIHRleHRhcmVhIERPTSBub2RlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgYXMgc2Vjb25kLiBJdCB3aWxsIHJlcGxhY2UgdGhlIHRleHRhcmVhIHdpdGggYSBDb2RlTWlycm9yCiAgICBpbnN0YW5jZSwgYW5kIHdpcmUgdXAgdGhlIGZvcm0gb2YgdGhhdCB0ZXh0YXJlYSAoaWYgYW55KSB0byBtYWtlCiAgICBzdXJlIHRoZSBlZGl0b3IgY29udGVudHMgYXJlIHB1dCBpbnRvIHRoZSB0ZXh0YXJlYSB3aGVuIHRoZSBmb3JtCiAgICBpcyBzdWJtaXR0ZWQuIEEgQ29kZU1pcnJvciBpbnN0YW5jZSBjcmVhdGVkIHRoaXMgd2F5IGhhcyB0d28KICAgIGFkZGl0aW9uYWwgbWV0aG9kczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InNhdmUiPjxjb2RlPnNhdmUoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29weSB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGludG8gdGhlIHRleHRhcmVhLjwvZGQ+CgogICAgICA8ZHQgaWQ9InRvVGV4dEFyZWEiPjxjb2RlPnRvVGV4dEFyZWEoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVtb3ZlIHRoZSBlZGl0b3IsIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCB0ZXh0YXJlYSAod2l0aAogICAgICB0aGUgZWRpdG9yJ3MgY3VycmVudCBjb250ZW50KS48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRUZXh0QXJlYSI+PGNvZGU+Z2V0VGV4dEFyZWEoKSDihpIgdGV4dGFyZWE8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIHRleHRhcmVhIHRoYXQgdGhlIGluc3RhbmNlIHdhcyBiYXNlZCBvbi48L2RkPgogICAgPC9kbD4KCiAgICA8cCBpZD0iZGVmaW5lRXh0ZW5zaW9uIj5JZiB5b3Ugd2FudCB0byBkZWZpbmUgZXh0cmEgbWV0aG9kcyBpbiB0ZXJtcwogICAgb2YgdGhlIENvZGVNaXJyb3IgQVBJLCBpdCBpcyBwb3NzaWJsZSB0bwogICAgdXNlIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKG5hbWUsIHZhbHVlKTwvY29kZT4uIFRoaXMKICAgIHdpbGwgY2F1c2UgdGhlIGdpdmVuIHZhbHVlICh1c3VhbGx5IGEgbWV0aG9kKSB0byBiZSBhZGRlZCB0byBhbGwKICAgIENvZGVNaXJyb3IgaW5zdGFuY2VzIGNyZWF0ZWQgZnJvbSB0aGVuIG9uLjwvcD4KCiAgICA8aDIgaWQ9ImFkZG9ucyI+QWRkLW9uczwvaDI+CgogICAgPHA+VGhlIDxjb2RlPmxpYi91dGlsPC9jb2RlPiBkaXJlY3RvcnkgaW4gdGhlIGRpc3RyaWJ1dGlvbgogICAgY29udGFpbnMgYSBudW1iZXIgb2YgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCBleHRyYQogICAgZWRpdG9yIGZ1bmN0aW9uYWxpdHkuIEluIGJyaWVmLCB0aGV5IGFyZTo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InV0aWxfZGlhbG9nIj48YSBocmVmPSIuLi9saWIvdXRpbC9kaWFsb2cuanMiPjxjb2RlPmRpYWxvZy5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPlByb3ZpZGVzIGEgdmVyeSBzaW1wbGUgd2F5IHRvIHF1ZXJ5IHVzZXJzIGZvciB0ZXh0IGlucHV0LgogICAgICBBZGRzIGFuIDxjb2RlPm9wZW5EaWFsb2c8L2NvZGU+IG1ldGhvZCB0byBDb2RlTWlycm9yIGluc3RhbmNlcywKICAgICAgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRoIGFuIEhUTUwgZnJhZ21lbnQgdGhhdCBwcm92aWRlcyB0aGUKICAgICAgcHJvbXB0IChzaG91bGQgaW5jbHVkZSBhbiA8Y29kZT5pbnB1dDwvY29kZT4gdGFnKSwgYW5kIGEKICAgICAgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0ZXh0IGhhcyBiZWVuIGVudGVyZWQuCiAgICAgIERlcGVuZHMgb24gPGNvZGU+bGliL3V0aWwvZGlhbG9nLmNzczwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX3NlYXJjaGN1cnNvciI+PGEgaHJlZj0iLi4vbGliL3V0aWwvc2VhcmNoY3Vyc29yLmpzIj48Y29kZT5zZWFyY2hjdXJzb3IuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5BZGRzIHRoZSA8Y29kZT5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHN0YXJ0LCBjYXNlRm9sZCkg4oaSCiAgICAgIGN1cnNvcjwvY29kZT4gbWV0aG9kIHRvIENvZGVNaXJyb3IgaW5zdGFuY2VzLCB3aGljaCBjYW4gYmUgdXNlZAogICAgICB0byBpbXBsZW1lbnQgc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eS4gPGNvZGU+cXVlcnk8L2NvZGU+CiAgICAgIGNhbiBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIHN0cmluZyAob25seSBzdHJpbmdzIHdpbGwgbWF0Y2gKICAgICAgYWNyb3NzIGxpbmVz4oCUaWYgdGhleSBjb250YWluIG5ld2xpbmVzKS4gPGNvZGU+c3RhcnQ8L2NvZGU+CiAgICAgIHByb3ZpZGVzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgc2VhcmNoLiBJdCBjYW4gYmUKICAgICAgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QsIG9yIGNhbiBiZSBsZWZ0IG9mZiB0byBkZWZhdWx0CiAgICAgIHRvIHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuIDxjb2RlPmNhc2VGb2xkPC9jb2RlPiBpcyBvbmx5CiAgICAgIHJlbGV2YW50IHdoZW4gbWF0Y2hpbmcgYSBzdHJpbmcuIEl0IHdpbGwgY2F1c2UgdGhlIHNlYXJjaCB0byBiZQogICAgICBjYXNlLWluc2Vuc2l0aXZlLiBBIHNlYXJjaCBjdXJzb3IgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKICAgICAgICA8ZGw+CiAgICAgICAgICA8ZHQ+PGNvZGU+ZmluZE5leHQoKSwgZmluZFByZXZpb3VzKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5TZWFyY2ggZm9yd2FyZCBvciBiYWNrd2FyZCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgogICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhIG1hdGNoIHdhcyBmb3VuZC4gSWYKICAgICAgICAgIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlCiAgICAgICAgICBhcnJheSByZXR1cm5lZCBieSB0aGUgPGNvZGU+bWF0Y2g8L2NvZGU+IG1ldGhvZCwgaW4gY2FzZSB5b3UKICAgICAgICAgIHdhbnQgdG8gZXh0cmFjdCBtYXRjaGVkIGdyb3Vwcy48L2RkPgogICAgICAgICAgPGR0Pjxjb2RlPmZyb20oKSwgdG8oKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+VGhlc2UgYXJlIG9ubHkgdmFsaWQgd2hlbiB0aGUgbGFzdCBjYWxsCiAgICAgICAgICB0byA8Y29kZT5maW5kTmV4dDwvY29kZT4gb3IgPGNvZGU+ZmluZFByZXZpb3VzPC9jb2RlPiBkaWQKICAgICAgICAgIG5vdCByZXR1cm4gZmFsc2UuIFRoZXkgd2lsbCByZXR1cm4gPGNvZGU+e2xpbmUsIGNofTwvY29kZT4KICAgICAgICAgIG9iamVjdHMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIG1hdGNoLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+cmVwbGFjZSh0ZXh0KTwvY29kZT48L2R0PgogICAgICAgICAgPGRkPlJlcGxhY2VzIHRoZSBjdXJyZW50bHkgZm91bmQgbWF0Y2ggd2l0aCB0aGUgZ2l2ZW4gdGV4dAogICAgICAgICAgYW5kIGFkanVzdHMgdGhlIGN1cnNvciBwb3NpdGlvbiB0byByZWZsZWN0IHRoZQogICAgICAgICAgcmVwbGFjZW1lbnQuPC9kZD4KICAgICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9InV0aWxfc2VhcmNoIj48YSBocmVmPSIuLi9saWIvdXRpbC9zZWFyY2guanMiPjxjb2RlPnNlYXJjaC5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPkltcGxlbWVudHMgdGhlIHNlYXJjaCBjb21tYW5kcy4gQ29kZU1pcnJvciBoYXMga2V5cyBib3VuZCB0bwogICAgICB0aGVzZSBieSBkZWZhdWx0LCBidXQgd2lsbCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGVtIHVubGVzcyBhbgogICAgICBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZC4gRGVwZW5kcwogICAgICBvbiA8Y29kZT5zZWFyY2hjdXJzb3IuanM8L2NvZGU+LCBhbmQgd2lsbCBtYWtlIHVzZQogICAgICBvZiA8YSBocmVmPSIjdXRpbF9kaWFsb2ciPjxjb2RlPm9wZW5EaWFsb2c8L2NvZGU+PC9hPiB3aGVuCiAgICAgIGF2YWlsYWJsZSB0byBtYWtlIHByb21wdGluZyBmb3Igc2VhcmNoIHF1ZXJpZXMgbGVzcyB1Z2x5LjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9mb2xkY29kZSI+PGEgaHJlZj0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjxjb2RlPmZvbGRjb2RlLmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+SGVscHMgd2l0aCBjb2RlIGZvbGRpbmcuCiAgICAgIFNlZSA8YSBocmVmPSIuLi9kZW1vL2ZvbGRpbmcuaHRtbCI+dGhlIGRlbW88L2E+IGZvciBhbiBleGFtcGxlLgogICAgICBDYWxsIDxjb2RlPkNvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uPC9jb2RlPiB3aXRoIGEgcmFuZ2UtZmluZGVyCiAgICAgIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHdpbGwsIHdoZW4gYXBwbGllZCB0bwogICAgICBhIENvZGVNaXJyb3IgaW5zdGFuY2UgYW5kIGEgbGluZSBudW1iZXIsIGF0dGVtcHQgdG8gZm9sZCBvcgogICAgICB1bmZvbGQgdGhlIGJsb2NrIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBsaW5lLiBBIHJhbmdlLWZpbmRlciBpcyBhCiAgICAgIGxhbmd1YWdlLXNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgYWxzbyB0YWtlcyBhbiBpbnN0YW5jZSBhbmQgYQogICAgICBsaW5lIG51bWJlciwgYW5kIHJldHVybnMgYW4gZW5kIGxpbmUgZm9yIHRoZSBibG9jaywgb3IgbnVsbCBpZgogICAgICBubyBibG9jayBpcyBzdGFydGVkIG9uIHRoYXQgbGluZS4gVGhpcyBmaWxlCiAgICAgIHByb3ZpZGVzIDxjb2RlPkNvZGVNaXJyb3IuYnJhY2VSYW5nZUZpbmRlcjwvY29kZT4sIHdoaWNoIGZpbmRzCiAgICAgIGJsb2NrcyBpbiBicmFjZSBsYW5ndWFnZXMgKEphdmFTY3JpcHQsIEMsIEphdmEsCiAgICAgIGV0YyksIDxjb2RlPkNvZGVNaXJyb3IuaW5kZW50UmFuZ2VGaW5kZXI8L2NvZGU+LCBmb3IgbGFuZ3VhZ2VzCiAgICAgIHdoZXJlIGluZGVudGF0aW9uIGRldGVybWluZXMgYmxvY2sgc3RydWN0dXJlIChQeXRob24sIEhhc2tlbGwpLAogICAgICBhbmQgPGNvZGU+Q29kZU1pcnJvci50YWdSYW5nZUZpbmRlcjwvY29kZT4sIGZvciBYTUwtc3R5bGUKICAgICAgbGFuZ3VhZ2VzLjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9ydW5tb2RlIj48YSBocmVmPSIuLi9saWIvdXRpbC9ydW5tb2RlLmpzIj48Y29kZT5ydW5tb2RlLmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+Q2FuIGJlIHVzZWQgdG8gcnVuIGEgQ29kZU1pcnJvciBtb2RlIG92ZXIgdGV4dCB3aXRob3V0CiAgICAgIGFjdHVhbGx5IG9wZW5pbmcgYW4gZWRpdG9yIGluc3RhbmNlLgogICAgICBTZWUgPGEgaHJlZj0iLi4vZGVtby9ydW5tb2RlLmh0bWwiPnRoZSBkZW1vPC9hPiBmb3IgYW4KICAgICAgZXhhbXBsZS48L2RkPgogICAgICA8ZHQgaWQ9InV0aWxfb3ZlcmxheSI+PGEgaHJlZj0iLi4vbGliL3V0aWwvb3ZlcmxheS5qcyI+PGNvZGU+b3ZlcmxheS5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPk1vZGUgY29tYmluYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIGV4dGVuZCBhIG1vZGUgd2l0aCBhbgogICAgICAnb3ZlcmxheScg4oCUIGEgc2Vjb25kYXJ5IG1vZGUgaXMgcnVuIG92ZXIgdGhlIHN0cmVhbSwgYWxvbmcgd2l0aAogICAgICB0aGUgYmFzZSBtb2RlLCBhbmQgY2FuIGNvbG9yIHNwZWNpZmljIHBpZWNlcyBvZiB0ZXh0IHdpdGhvdXQKICAgICAgaW50ZXJmZXJpbmcgd2l0aCB0aGUgYmFzZSBtb2RlLgogICAgICBEZWZpbmVzIDxjb2RlPkNvZGVNaXJyb3Iub3ZlcmxheU1vZGU8L2NvZGU+LCB3aGljaCBpcyB1c2VkIHRvCiAgICAgIGNyZWF0ZSBzdWNoIGEgbW9kZS4gU2VlIDxhIGhyZWY9Ii4uL2RlbW8vbXVzdGFjaGUuaHRtbCI+dGhpcwogICAgICBkZW1vPC9hPiBmb3IgYSBkZXRhaWxlZCBleGFtcGxlLjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9tdWx0aXBsZXgiPjxhIGhyZWY9Ii4uL2xpYi91dGlsL211bHRpcGxleC5qcyI+PGNvZGU+bXVsdGlwbGV4LmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+TW9kZSBjb21iaW5hdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gZWFzaWx5ICdtdWx0aXBsZXgnCiAgICAgIGJldHdlZW4gc2V2ZXJhbCBtb2Rlcy4KICAgICAgRGVmaW5lcyA8Y29kZT5Db2RlTWlycm9yLm11bHRpcGxleGluZ01vZGU8L2NvZGU+IHdoaWNoLCB3aGVuCiAgICAgIGdpdmVuIGFzIGZpcnN0IGFyZ3VtZW50IGEgbW9kZSBvYmplY3QsIGFuZCBhcyBvdGhlciBhcmd1bWVudHMKICAgICAgYW55IG51bWJlciBvZiA8Y29kZT57b3BlbiwgY2xvc2UsIG1vZGUgWywgZGVsaW1TdHlsZV19PC9jb2RlPgogICAgICBvYmplY3RzLCB3aWxsIHJldHVybiBhIG1vZGUgb2JqZWN0IHRoYXQgc3RhcnRzIHBhcnNpbmcgdXNpbmcgdGhlCiAgICAgIG1vZGUgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50LCBidXQgd2lsbCBzd2l0Y2ggdG8gYW5vdGhlciBtb2RlCiAgICAgIGFzIHNvb24gYXMgaXQgZW5jb3VudGVycyBhIHN0cmluZyB0aGF0IG9jY3VycyBpbiBvbmUgb2YKICAgICAgdGhlIDxjb2RlPm9wZW48L2NvZGU+IGZpZWxkcyBvZiB0aGUgcGFzc2VkIG9iamVjdHMuIFdoZW4gaW4gYQogICAgICBzdWItbW9kZSwgaXQgd2lsbCBnbyBiYWNrIHRvIHRoZSB0b3AgbW9kZSBhZ2FpbiB3aGVuCiAgICAgIHRoZSA8Y29kZT5jbG9zZTwvY29kZT4gc3RyaW5nIGlzIGVuY291bnRlcmVkLgogICAgICBXaGVuIDxjb2RlPmRlbGltU3R5bGU8L2NvZGU+IGlzIHNwZWNpZmllZCwgaXQgd2lsbCBiZSB0aGUgdG9rZW4KICAgICAgc3R5bGUgcmV0dXJuZWQgZm9yIHRoZSBkZWxpbWl0ZXIgdG9rZW5zLiBUaGUgb3V0ZXIgbW9kZSB3aWxsIG5vdAogICAgICBzZWUgdGhlIGNvbnRlbnQgYmV0d2VlbiB0aGUgZGVsaW1pdGVycy4KICAgICAgU2VlIDxhIGhyZWY9Ii4uL2RlbW8vbXVsdGlwbGV4Lmh0bWwiPnRoaXMgZGVtbzwvYT4gZm9yIGFuCiAgICAgIGV4YW1wbGUuPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX3NpbXBsZS1oaW50Ij48YSBocmVmPSIuLi9saWIvdXRpbC9zaW1wbGUtaGludC5qcyI+PGNvZGU+c2ltcGxlLWhpbnQuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5Qcm92aWRlcyBhIGZyYW1ld29yayBmb3Igc2hvd2luZyBhdXRvY29tcGxldGlvbiBoaW50cy4KICAgICAgRGVmaW5lcyA8Y29kZT5Db2RlTWlycm9yLnNpbXBsZUhpbnQ8L2NvZGU+LCB3aGljaCB0YWtlcyBhCiAgICAgIENvZGVNaXJyb3IgaW5zdGFuY2UgYW5kIGEgaGludGluZyBmdW5jdGlvbiwgYW5kIHBvcHMgdXAgYSB3aWRnZXQKICAgICAgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgY29tcGxldGlvbi4gSGludGluZyBmdW5jdGlvbnMKICAgICAgYXJlIGZ1bmN0aW9uIHRoYXQgdGFrZSBhbiBlZGl0b3IgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAgYSA8Y29kZT57bGlzdCwgZnJvbSwgdG99PC9jb2RlPiBvYmplY3QsIHdoZXJlIDxjb2RlPmxpc3Q8L2NvZGU+CiAgICAgIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgKHRoZSBjb21wbGV0aW9ucyksIGFuZCA8Y29kZT5mcm9tPC9jb2RlPgogICAgICBhbmQgPGNvZGU+dG88L2NvZGU+IGdpdmUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHRva2VuIHRoYXQgaXMKICAgICAgYmVpbmcgY29tcGxldGVkLiBEZXBlbmRzCiAgICAgIG9uIDxjb2RlPmxpYi91dGlsL3NpbXBsZS1oaW50LmNzczwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX2phdmFzY3JpcHQtaGludCI+PGEgaHJlZj0iLi4vbGliL3V0aWwvamF2YXNjcmlwdC1oaW50LmpzIj48Y29kZT5qYXZhc2NyaXB0LWhpbnQuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5EZWZpbmVzIDxjb2RlPkNvZGVNaXJyb3IuamF2YXNjcmlwdEhpbnQ8L2NvZGU+CiAgICAgIGFuZCA8Y29kZT5Db2RlTWlycm9yLmNvZmZlZXNjcmlwdEhpbnQ8L2NvZGU+LCB3aGljaCBhcmUgc2ltcGxlCiAgICAgIGhpbnRpbmcgZnVuY3Rpb25zIGZvciB0aGUgSmF2YVNjcmlwdCBhbmQgQ29mZmVlU2NyaXB0CiAgICAgIG1vZGVzLjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9tYXRjaC1oaWdobGlnaHRlciI+PGEgaHJlZj0iLi4vbGliL3V0aWwvbWF0Y2gtaGlnaGxpZ2h0ZXIuanMiPjxjb2RlPm1hdGNoLWhpZ2hsaWdodGVyLmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+QWRkcyBhIDxjb2RlPm1hdGNoSGlnaGxpZ2h0PC9jb2RlPiBtZXRob2QgdG8gQ29kZU1pcnJvcgogICAgICBpbnN0YW5jZXMgdGhhdCBjYW4gYmUgY2FsbGVkICh0eXBpY2FsbHkgZnJvbQogICAgICBhIDxhIGhyZWY9IiNvcHRpb25fb25DdXJzb3JBY3Rpdml0eSI+PGNvZGU+b25DdXJzb3JBY3Rpdml0eTwvY29kZT48L2E+CiAgICAgIGhhbmRsZXIpIHRvIGhpZ2hsaWdodCBhbGwgaW5zdGFuY2VzIG9mIGEgY3VycmVudGx5IHNlbGVjdGVkIHdvcmQKICAgICAgd2l0aCB0aGUgYSBjbGFzc25hbWUgZ2l2ZW4gYXMgYSBmaXJzdCBhcmd1bWVudCB0byB0aGUgbWV0aG9kLgogICAgICBEZXBlbmRzIG9uCiAgICAgIHRoZSA8YSBocmVmPSIjdXRpbF9zZWFyY2hjdXJzb3IiPjxjb2RlPnNlYXJjaGN1cnNvcjwvY29kZT48L2E+CiAgICAgIGFkZC1vbi4gRGVtbyA8YSBocmVmPSIuLi9kZW1vL21hdGNoaGlnaGxpZ2h0ZXIuaHRtbCI+aGVyZTwvYT4uPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX2Nsb3NldGFnIj48YSBocmVmPSIuLi9saWIvdXRpbC9jbG9zZXRhZy5qcyI+PGNvZGU+Y2xvc2V0YWcuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5Qcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgYWRkaW5nIGF1dG9tYXRpYyB0YWcgY2xvc2luZwogICAgICB0byBYTUwgbW9kZXMuIFNlZQogICAgICB0aGUgPGEgaHJlZj0iLi4vZGVtby9jbG9zZXRhZy5odG1sIj5kZW1vPC9hPi48L2RkPgogICAgICA8ZHQgaWQ9InV0aWxfbG9hZG1vZGUiPjxhIGhyZWY9Ii4uL2xpYi91dGlsL2xvYWRtb2RlLmpzIj48Y29kZT5sb2FkbW9kZS5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPkRlZmluZXMgYSA8Y29kZT5Db2RlTWlycm9yLnJlcXVpcmVNb2RlKG1vZGVuYW1lLAogICAgICBjYWxsYmFjayk8L2NvZGU+IGZ1bmN0aW9uIHRoYXQgd2lsbCB0cnkgdG8gbG9hZCBhIGdpdmVuIG1vZGUgYW5kCiAgICAgIGNhbGwgdGhlIGNhbGxiYWNrIHdoZW4gaXQgc3VjY2VlZGVkLiBZb3UnbGwgaGF2ZSB0bwogICAgICBzZXQgPGNvZGU+Q29kZU1pcnJvci5tb2RlVVJMPC9jb2RlPiB0byBhIHN0cmluZyB0aGF0IG1vZGUgcGF0aHMKICAgICAgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20sIGZvcgogICAgICBleGFtcGxlIDxjb2RlPiJtb2RlLyVOLyVOLmpzIjwvY29kZT7igJR0aGUgPGNvZGU+JU48L2NvZGU+J3Mgd2lsbAogICAgICBiZSByZXBsYWNlZCB3aXRoIHRoZSBtb2RlIG5hbWUuIEFsc28KICAgICAgZGVmaW5lcyA8Y29kZT5Db2RlTWlycm9yLmF1dG9Mb2FkTW9kZShpbnN0YW5jZSwgbW9kZSk8L2NvZGU+LAogICAgICB3aGljaCB3aWxsIGVuc3VyZSB0aGUgZ2l2ZW4gbW9kZSBpcyBsb2FkZWQgYW5kIGNhdXNlIHRoZSBnaXZlbgogICAgICBlZGl0b3IgaW5zdGFuY2UgdG8gcmVmcmVzaCBpdHMgbW9kZSB3aGVuIHRoZSBsb2FkaW5nCiAgICAgIHN1Y2NlZWRlZC4gU2VlIHRoZSA8YSBocmVmPSIuLi9kZW1vL2xvYWRtb2RlLmh0bWwiPmRlbW88L2E+LjwvZGQ+CiAgICA8L2RsPgoKICAgIDxoMiBpZD0ibW9kZWFwaSI+V3JpdGluZyBDb2RlTWlycm9yIE1vZGVzPC9oMj4KCiAgICA8cD5Nb2RlcyB0eXBpY2FsbHkgY29uc2lzdCBvZiBhIHNpbmdsZSBKYXZhU2NyaXB0IGZpbGUuIFRoaXMgZmlsZQogICAgZGVmaW5lcywgaW4gdGhlIHNpbXBsZXN0IGNhc2UsIGEgbGV4ZXIgKHRva2VuaXplcikgZm9yIHlvdXIKICAgIGxhbmd1YWdl4oCUYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2hhcmFjdGVyIHN0cmVhbSBhcyBpbnB1dCwKICAgIGFkdmFuY2VzIGl0IHBhc3QgYSB0b2tlbiwgYW5kIHJldHVybnMgYSBzdHlsZSBmb3IgdGhhdCB0b2tlbi4gTW9yZQogICAgYWR2YW5jZWQgbW9kZXMgY2FuIGFsc28gaGFuZGxlIGluZGVudGF0aW9uIGZvciB0aGUgbGFuZ3VhZ2UuPC9wPgoKICAgIDxwIGlkPSJkZWZpbmVNb2RlIj5UaGUgbW9kZSBzY3JpcHQgc2hvdWxkCiAgICBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lTW9kZTwvY29kZT4gdG8gcmVnaXN0ZXIgaXRzZWxmIHdpdGgKICAgIENvZGVNaXJyb3IuIFRoaXMgZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cy4gVGhlIGZpcnN0IHNob3VsZCBiZQogICAgdGhlIG5hbWUgb2YgdGhlIG1vZGUsIGZvciB3aGljaCB5b3Ugc2hvdWxkIHVzZSBhIGxvd2VyY2FzZSBzdHJpbmcsCiAgICBwcmVmZXJhYmx5IG9uZSB0aGF0IGlzIGFsc28gdGhlIG5hbWUgb2YgdGhlIGZpbGVzIHRoYXQgZGVmaW5lIHRoZQogICAgbW9kZSAoaS5lLiA8Y29kZT4ieG1sIjwvY29kZT4gaXMgZGVmaW5lZCA8Y29kZT54bWwuanM8L2NvZGU+KS4gVGhlCiAgICBzZWNvbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgZnVuY3Rpb24gdGhhdCwgZ2l2ZW4gYSBDb2RlTWlycm9yCiAgICBjb25maWd1cmF0aW9uIG9iamVjdCAodGhlIHRoaW5nIHBhc3NlZCB0bwogICAgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uKSBhbmQgYW4gb3B0aW9uYWwgbW9kZQogICAgY29uZmlndXJhdGlvbiBvYmplY3QgKGFzIGluCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9tb2RlIj48Y29kZT5tb2RlPC9jb2RlPjwvYT4gb3B0aW9uKSwgcmV0dXJucwogICAgYSBtb2RlIG9iamVjdC48L3A+CgogICAgPHA+VHlwaWNhbGx5LCB5b3Ugc2hvdWxkIHVzZSB0aGlzIHNlY29uZCBhcmd1bWVudAogICAgdG8gPGNvZGU+ZGVmaW5lTW9kZTwvY29kZT4gYXMgeW91ciBtb2R1bGUgc2NvcGUgZnVuY3Rpb24gKG1vZGVzCiAgICBzaG91bGQgbm90IGxlYWsgYW55dGhpbmcgaW50byB0aGUgZ2xvYmFsIHNjb3BlISksIGkuZS4gd3JpdGUgeW91cgogICAgd2hvbGUgbW9kZSBpbnNpZGUgdGhpcyBmdW5jdGlvbi48L3A+CgogICAgPHA+VGhlIG1haW4gcmVzcG9uc2liaWxpdHkgb2YgYSBtb2RlIHNjcmlwdCBpcyA8ZW0+cGFyc2luZzwvZW0+CiAgICB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yLiBEZXBlbmRpbmcgb24gdGhlIGxhbmd1YWdlIGFuZCB0aGUKICAgIGFtb3VudCBvZiBmdW5jdGlvbmFsaXR5IGRlc2lyZWQsIHRoaXMgY2FuIGJlIGRvbmUgaW4gcmVhbGx5IGVhc3kKICAgIG9yIGV4dHJlbWVseSBjb21wbGljYXRlZCB3YXlzLiBTb21lIHBhcnNlcnMgY2FuIGJlIHN0YXRlbGVzcywKICAgIG1lYW5pbmcgdGhhdCB0aGV5IGxvb2sgYXQgb25lIGVsZW1lbnQgKDxlbT50b2tlbjwvZW0+KSBvZiB0aGUgY29kZQogICAgYXQgYSB0aW1lLCB3aXRoIG5vIG1lbW9yeSBvZiB3aGF0IGNhbWUgYmVmb3JlLiBNb3N0LCBob3dldmVyLCB3aWxsCiAgICBuZWVkIHRvIHJlbWVtYmVyIHNvbWV0aGluZy4gVGhpcyBpcyBkb25lIGJ5IHVzaW5nIGEgPGVtPnN0YXRlCiAgICBvYmplY3Q8L2VtPiwgd2hpY2ggaXMgYW4gb2JqZWN0IHRoYXQgaXMgYWx3YXlzIHBhc3NlZCB3aGVuCiAgICByZWFkaW5nIGEgdG9rZW4sIGFuZCB3aGljaCBjYW4gYmUgbXV0YXRlZCBieSB0aGUgdG9rZW5pemVyLjwvcD4KCiAgICA8cCBpZD0ic3RhcnRTdGF0ZSI+TW9kZXMgdGhhdCB1c2UgYSBzdGF0ZSBtdXN0IGRlZmluZQogICAgYSA8Y29kZT5zdGFydFN0YXRlPC9jb2RlPiBtZXRob2Qgb24gdGhlaXIgbW9kZSBvYmplY3QuIFRoaXMgaXMgYQogICAgZnVuY3Rpb24gb2Ygbm8gYXJndW1lbnRzIHRoYXQgcHJvZHVjZXMgYSBzdGF0ZSBvYmplY3QgdG8gYmUgdXNlZAogICAgYXQgdGhlIHN0YXJ0IG9mIGEgZG9jdW1lbnQuPC9wPgoKICAgIDxwIGlkPSJ0b2tlbiI+VGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgb2YgYSBtb2RlIG9iamVjdCBpcwogICAgaXRzIDxjb2RlPnRva2VuKHN0cmVhbSwgc3RhdGUpPC9jb2RlPiBtZXRob2QuIEFsbCBtb2RlcyBtdXN0CiAgICBkZWZpbmUgdGhpcyBtZXRob2QuIEl0IHNob3VsZCByZWFkIG9uZSB0b2tlbiBmcm9tIHRoZSBzdHJlYW0gaXQgaXMKICAgIGdpdmVuIGFzIGFuIGFyZ3VtZW50LCBvcHRpb25hbGx5IHVwZGF0ZSBpdHMgc3RhdGUsIGFuZCByZXR1cm4gYQogICAgc3R5bGUgc3RyaW5nLCBvciA8Y29kZT5udWxsPC9jb2RlPiBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgdG8KICAgIGJlIHN0eWxlZC4gRm9yIHlvdXIgc3R5bGVzLCB5b3UgY2FuIGVpdGhlciB1c2UgdGhlICdzdGFuZGFyZCcgb25lcwogICAgZGVmaW5lZCBpbiB0aGUgdGhlbWVzICh3aXRob3V0IHRoZSA8Y29kZT5jbS08L2NvZGU+IHByZWZpeCksIG9yCiAgICBkZWZpbmUgeW91ciBvd24gYW5kIGhhdmUgcGVvcGxlIGluY2x1ZGUgYSBjdXN0b20gQ1NTIGZpbGUgZm9yIHlvdXIKICAgIG1vZGUuPHA+CgogICAgPHAgaWQ9IlN0cmluZ1N0cmVhbSI+VGhlIHN0cmVhbSBvYmplY3QgZW5jYXBzdWxhdGVzIGEgbGluZSBvZiBjb2RlCiAgICAodG9rZW5zIG1heSBuZXZlciBzcGFuIGxpbmVzKSBhbmQgb3VyIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhhdAogICAgbGluZS4gSXQgaGFzIHRoZSBmb2xsb3dpbmcgQVBJOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT5lb2woKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHN0cmVhbSBpcyBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5zb2woKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHN0cmVhbSBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlCiAgICAgIGxpbmUuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5wZWVrKCkg4oaSIGNoYXJhY3RlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSB3aXRob3V0IGFkdmFuY2luZwogICAgICBpdC4gV2lsbCByZXR1cm4gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5uZXh0KCkg4oaSIGNoYXJhY3RlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSBhbmQgYWR2YW5jZXMgaXQuCiAgICAgIEFsc28gcmV0dXJucyA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IHdoZW4gbm8gbW9yZSBjaGFyYWN0ZXJzIGFyZQogICAgICBhdmFpbGFibGUuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5lYXQobWF0Y2gpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPjxjb2RlPm1hdGNoPC9jb2RlPiBjYW4gYmUgYSBjaGFyYWN0ZXIsIGEgcmVndWxhciBleHByZXNzaW9uLAogICAgICBvciBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjaGFyYWN0ZXIgYW5kIHJldHVybnMgYSBib29sZWFuLiBJZgogICAgICB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSAnbWF0Y2hlcycgdGhlIGdpdmVuIGFyZ3VtZW50LAogICAgICBpdCBpcyBjb25zdW1lZCBhbmQgcmV0dXJuZWQuIE90aGVyd2lzZSwgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPgogICAgICBpcyByZXR1cm5lZC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ZWF0V2hpbGUobWF0Y2gpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXBlYXRlZGx5IGNhbGxzIDxjb2RlPmVhdDwvY29kZT4gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnQsCiAgICAgIHVudGlsIGl0IGZhaWxzLiBSZXR1cm5zIHRydWUgaWYgYW55IGNoYXJhY3RlcnMgd2VyZSBlYXRlbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ZWF0U3BhY2UoKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+U2hvcnRjdXQgZm9yIDxjb2RlPmVhdFdoaWxlPC9jb2RlPiB3aGVuIG1hdGNoaW5nCiAgICAgIHdoaXRlLXNwYWNlLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5za2lwVG9FbmQoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+TW92ZXMgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPnNraXBUbyhjaCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlNraXBzIHRvIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIGNoYXJhY3RlciwgaWYKICAgICAgZm91bmQgb24gdGhlIGN1cnJlbnQgbGluZSAoZG9lc24ndCBhZHZhbmNlIHRoZSBzdHJlYW0gaWYgdGhlCiAgICAgIGNoYXJhY3RlciBkb2VzIG5vdCBvY2N1ciBvbiB0aGUgbGluZSkuIFJldHVybnMgdHJ1ZSBpZiB0aGUKICAgICAgY2hhcmFjdGVyIHdhcyBmb3VuZC48L2RkPgogICAgICA8ZHQ+PGNvZGU+bWF0Y2gocGF0dGVybiwgY29uc3VtZSwgY2FzZUZvbGQpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BY3QgbGlrZSBhCiAgICAgIG11bHRpLWNoYXJhY3RlciA8Y29kZT5lYXQ8L2NvZGU+4oCUaWYgPGNvZGU+Y29uc3VtZTwvY29kZT4gaXMgdHJ1ZQogICAgICBvciBub3QgZ2l2ZW7igJRvciBhIGxvb2stYWhlYWQgdGhhdCBkb2Vzbid0IHVwZGF0ZSB0aGUgc3RyZWFtCiAgICAgIHBvc2l0aW9u4oCUaWYgaXQgaXMgZmFsc2UuIDxjb2RlPnBhdHRlcm48L2NvZGU+IGNhbiBiZSBlaXRoZXIgYQogICAgICBzdHJpbmcgb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RhcnRpbmcgd2l0aCA8Y29kZT5ePC9jb2RlPi4KICAgICAgV2hlbiBpdCBpcyBhIHN0cmluZywgPGNvZGU+Y2FzZUZvbGQ8L2NvZGU+IGNhbiBiZSBzZXQgdG8gdHJ1ZSB0bwogICAgICBtYWtlIHRoZSBtYXRjaCBjYXNlLWluc2Vuc2l0aXZlLiBXaGVuIHN1Y2Nlc3NmdWxseSBtYXRjaGluZyBhCiAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgdGhlIGFycmF5CiAgICAgIHJldHVybmVkIGJ5IDxjb2RlPm1hdGNoPC9jb2RlPiwgaW4gY2FzZSB5b3UgbmVlZCB0byBleHRyYWN0CiAgICAgIG1hdGNoZWQgZ3JvdXBzLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+YmFja1VwKG4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5CYWNrcyB1cCB0aGUgc3RyZWFtIDxjb2RlPm48L2NvZGU+IGNoYXJhY3RlcnMuIEJhY2tpbmcgaXQgdXAKICAgICAgZnVydGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCB0b2tlbiB3aWxsIGNhdXNlIHRoaW5ncyB0bwogICAgICBicmVhaywgc28gYmUgY2FyZWZ1bC48L2RkPgogICAgICA8ZHQ+PGNvZGU+Y29sdW1uKCkg4oaSIGludGVnZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIGNvbHVtbiAodGFraW5nIGludG8gYWNjb3VudCB0YWJzKSBhdCB3aGljaCB0aGUKICAgICAgY3VycmVudCB0b2tlbiBzdGFydHMuIENhbiBiZSB1c2VkIHRvIGZpbmQgb3V0IHdoZXRoZXIgYSB0b2tlbgogICAgICBzdGFydHMgYSBuZXcgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+aW5kZW50YXRpb24oKSDihpIgaW50ZWdlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VGVsbHMgeW91IGhvdyBmYXIgdGhlIGN1cnJlbnQgbGluZSBoYXMgYmVlbiBpbmRlbnRlZCwgaW4KICAgICAgc3BhY2VzLiBDb3JyZWN0cyBmb3IgdGFiIGNoYXJhY3RlcnMuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5jdXJyZW50KCkg4oaSIHN0cmluZzwvY29kZT48L2R0PgogICAgICA8ZGQ+R2V0IHRoZSBzdHJpbmcgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdG9rZW4gYW5kCiAgICAgIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi48L2RkPgogICAgPC9kbD4KCiAgICA8cCBpZD0iYmxhbmtMaW5lIj5CeSBkZWZhdWx0LCBibGFuayBsaW5lcyBhcmUgc2ltcGx5IHNraXBwZWQgd2hlbgogICAgdG9rZW5pemluZyBhIGRvY3VtZW50LiBGb3IgbGFuZ3VhZ2VzIHRoYXQgaGF2ZSBzaWduaWZpY2FudCBibGFuawogICAgbGluZXMsIHlvdSBjYW4gZGVmaW5lIGEgPGNvZGU+YmxhbmtMaW5lKHN0YXRlKTwvY29kZT4gbWV0aG9kIG9uCiAgICB5b3VyIG1vZGUgdGhhdCB3aWxsIGdldCBjYWxsZWQgd2hlbmV2ZXIgYSBibGFuayBsaW5lIGlzIHBhc3NlZAogICAgb3Zlciwgc28gdGhhdCBpdCBjYW4gdXBkYXRlIHRoZSBwYXJzZXIgc3RhdGUuPC9wPgoKICAgIDxwIGlkPSJjb3B5U3RhdGUiPkJlY2F1c2Ugc3RhdGUgb2JqZWN0IGFyZSBtdXRhdGVkLCBhbmQgQ29kZU1pcnJvcgogICAgbmVlZHMgdG8ga2VlcCB2YWxpZCB2ZXJzaW9ucyBvZiBhIHN0YXRlIGFyb3VuZCBzbyB0aGF0IGl0IGNhbgogICAgcmVzdGFydCBhIHBhcnNlIGF0IGFueSBsaW5lLCBjb3BpZXMgbXVzdCBiZSBtYWRlIG9mIHN0YXRlIG9iamVjdHMuCiAgICBUaGUgZGVmYXVsdCBhbGdvcml0aG0gdXNlZCBpcyB0aGF0IGEgbmV3IHN0YXRlIG9iamVjdCBpcyBjcmVhdGVkLAogICAgd2hpY2ggZ2V0cyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9sZCBvYmplY3QuIEFueSBwcm9wZXJ0aWVzCiAgICB3aGljaCBob2xkIGFycmF5cyBnZXQgYSBjb3B5IG9mIHRoZXNlIGFycmF5cyAoc2luY2UgYXJyYXlzIHRlbmQgdG8KICAgIGJlIHVzZWQgYXMgbXV0YWJsZSBzdGFja3MpLiBXaGVuIHRoaXMgaXMgbm90IGNvcnJlY3QsIGZvciBleGFtcGxlCiAgICBiZWNhdXNlIGEgbW9kZSBtdXRhdGVzIG5vbi1hcnJheSBwcm9wZXJ0aWVzIG9mIGl0cyBzdGF0ZSBvYmplY3QsIGEKICAgIG1vZGUgb2JqZWN0IHNob3VsZCBkZWZpbmUgYSA8Y29kZT5jb3B5U3RhdGU8L2NvZGU+IG1ldGhvZCwKICAgIHdoaWNoIGlzIGdpdmVuIGEgc3RhdGUgYW5kIHNob3VsZCByZXR1cm4gYSBzYWZlIGNvcHkgb2YgdGhhdAogICAgc3RhdGUuPC9wPgoKICAgIDxwIGlkPSJjb21wYXJlU3RhdGVzIj5CeSBkZWZhdWx0LCBDb2RlTWlycm9yIHdpbGwgc3RvcCByZS1wYXJzaW5nCiAgICBhIGRvY3VtZW50IGFzIHNvb24gYXMgaXQgZW5jb3VudGVycyBhIGZldyBsaW5lcyB0aGF0IHdlcmUKICAgIGhpZ2hsaWdodGVkIHRoZSBzYW1lIGluIHRoZSBvbGQgcGFyc2UgYXMgaW4gdGhlIG5ldyBvbmUuIEl0IGlzCiAgICBwb3NzaWJsZSB0byBwcm92aWRlIGFuIGV4cGxpY2l0IHdheSB0byB0ZXN0IHdoZXRoZXIgYSBzdGF0ZSBpcwogICAgZXF1aXZhbGVudCB0byBhbm90aGVyIG9uZSwgd2hpY2ggQ29kZU1pcnJvciB3aWxsIHVzZSAoaW5zdGVhZCBvZgogICAgdGhlIHVuY2hhbmdlZC1saW5lcyBoZXVyaXN0aWMpIHRvIGRlY2lkZSB3aGVuIHRvIHN0b3AKICAgIGhpZ2hsaWdodGluZy4gWW91IGRvIHRoaXMgYnkgcHJvdmlkaW5nCiAgICBhIDxjb2RlPmNvbXBhcmVTdGF0ZXM8L2NvZGU+IG1ldGhvZCBvbiB5b3VyIG1vZGUgb2JqZWN0LCB3aGljaAogICAgdGFrZXMgdHdvIHN0YXRlIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyCiAgICB0aGV5IGFyZSBlcXVpdmFsZW50LiBTZWUgdGhlIFhNTCBtb2RlLCB3aGljaCB1c2VzIHRoaXMgdG8gcHJvdmlkZQogICAgcmVsaWFibGUgaGlnaGxpZ2h0aW5nIG9mIGJhZCBjbG9zaW5nIHRhZ3MsIGFzIGFuIGV4YW1wbGUuPC9wPgoKICAgIDxwIGlkPSJpbmRlbnQiPklmIHlvdSB3YW50IHlvdXIgbW9kZSB0byBwcm92aWRlIHNtYXJ0IGluZGVudGF0aW9uCiAgICAodGhvdWdoIHRoZSA8YSBocmVmPSIjaW5kZW50TGluZSI+PGNvZGU+aW5kZW50TGluZTwvY29kZT48L2E+CiAgICBtZXRob2QgYW5kIHRoZSA8Y29kZT5pbmRlbnRBdXRvPC9jb2RlPgogICAgYW5kIDxjb2RlPm5ld2xpbmVBbmRJbmRlbnQ8L2NvZGU+IGNvbW1hbmRzLCB3aGljaCBrZXlzIGNhbiBiZQogICAgPGEgaHJlZj0iI29wdGlvbl9leHRyYUtleXMiPmJvdW5kPC9hPiB0byksIHlvdSBtdXN0IGRlZmluZQogICAgYW4gPGNvZGU+aW5kZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpPC9jb2RlPiBtZXRob2Qgb24geW91ciBtb2RlCiAgICBvYmplY3QuPC9wPgoKICAgIDxwPlRoZSBpbmRlbnRhdGlvbiBtZXRob2Qgc2hvdWxkIGluc3BlY3QgdGhlIGdpdmVuIHN0YXRlIG9iamVjdCwKICAgIGFuZCBvcHRpb25hbGx5IHRoZSA8Y29kZT50ZXh0QWZ0ZXI8L2NvZGU+IHN0cmluZywgd2hpY2ggY29udGFpbnMKICAgIHRoZSB0ZXh0IG9uIHRoZSBsaW5lIHRoYXQgaXMgYmVpbmcgaW5kZW50ZWQsIGFuZCByZXR1cm4gYW4KICAgIGludGVnZXIsIHRoZSBhbW91bnQgb2Ygc3BhY2VzIHRvIGluZGVudC4gSXQgc2hvdWxkIHVzdWFsbHkgdGFrZQogICAgdGhlIDxhIGhyZWY9IiNvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdDwvY29kZT48L2E+CiAgICBvcHRpb24gaW50byBhY2NvdW50LjwvcD4KCiAgICA8cCBpZD0iZWxlY3RyaWNDaGFycyI+RmluYWxseSwgYSBtb2RlIG1heSBkZWZpbmUKICAgIGFuIDxjb2RlPmVsZWN0cmljQ2hhcnM8L2NvZGU+IHByb3BlcnR5LCB3aGljaCBzaG91bGQgaG9sZCBhIHN0cmluZwogICAgY29udGFpbmluZyBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgYmVoYXZpb3VyCiAgICBkZXNjcmliZWQgZm9yCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9lbGVjdHJpY0NoYXJzIj48Y29kZT5lbGVjdHJpY0NoYXJzPC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L3A+CgogICAgPHA+U28sIHRvIHN1bW1hcml6ZSwgYSBtb2RlIDxlbT5tdXN0PC9lbT4gcHJvdmlkZQogICAgYSA8Y29kZT50b2tlbjwvY29kZT4gbWV0aG9kLCBhbmQgaXQgPGVtPm1heTwvZW0+CiAgICBwcm92aWRlIDxjb2RlPnN0YXJ0U3RhdGU8L2NvZGU+LCA8Y29kZT5jb3B5U3RhdGU8L2NvZGU+LAogICAgPGNvZGU+Y29tcGFyZVN0YXRlczwvY29kZT4sIGFuZCA8Y29kZT5pbmRlbnQ8L2NvZGU+IG1ldGhvZHMuIEZvcgogICAgYW4gZXhhbXBsZSBvZiBhIHRyaXZpYWwgbW9kZSwgc2VlCiAgICB0aGUgPGEgaHJlZj0iLi4vbW9kZS9kaWZmL2RpZmYuanMiPmRpZmYgbW9kZTwvYT4sIGZvciBhIG1vcmUgaW52b2x2ZWQKICAgIGV4YW1wbGUsIHNlZSB0aGUgPGEgaHJlZj0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+Qy1saWtlCiAgICBtb2RlPC9hPi48L3A+CgogICAgPHA+U29tZXRpbWVzLCBpdCBpcyB1c2VmdWwgZm9yIG1vZGVzIHRvIDxlbT5uZXN0PC9lbT7igJR0byBoYXZlIG9uZQogICAgbW9kZSBkZWxlZ2F0ZSB3b3JrIHRvIGFub3RoZXIgbW9kZS4gQW4gZXhhbXBsZSBvZiB0aGlzIGtpbmQgb2YKICAgIG1vZGUgaXMgdGhlIDxhIGhyZWY9Ii4uL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcyI+bWl4ZWQtbW9kZSBIVE1MCiAgICBtb2RlPC9hPi4gVG8gaW1wbGVtZW50IHN1Y2ggbmVzdGluZywgaXQgaXMgdXN1YWxseSBuZWNlc3NhcnkgdG8KICAgIGNyZWF0ZSBtb2RlIG9iamVjdHMgYW5kIGNvcHkgc3RhdGVzIHlvdXJzZWxmLiBUbyBjcmVhdGUgYSBtb2RlCiAgICBvYmplY3QsIHRoZXJlIGFyZSA8Y29kZT5Db2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywKICAgIHBhcnNlckNvbmZpZyk8L2NvZGU+LCB3aGVyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgYXMgcGFzc2VkIHRvIHRoZSBtb2RlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBhbmQgdGhlIHNlY29uZAogICAgYXJndW1lbnQgaXMgYSBtb2RlIHNwZWNpZmljYXRpb24gYXMgaW4KICAgIHRoZSA8YSBocmVmPSIjb3B0aW9uX21vZGUiPjxjb2RlPm1vZGU8L2NvZGU+PC9hPiBvcHRpb24uIFRvIGNvcHkgYQogICAgc3RhdGUgb2JqZWN0LCBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuY29weVN0YXRlKG1vZGUsIHN0YXRlKTwvY29kZT4sCiAgICB3aGVyZSA8Y29kZT5tb2RlPC9jb2RlPiBpcyB0aGUgbW9kZSB0aGF0IGNyZWF0ZWQgdGhlIGdpdmVuCiAgICBzdGF0ZS48L3A+CgogICAgPHA+VG8gbWFrZSBpbmRlbnRhdGlvbiB3b3JrIHByb3Blcmx5IGluIGEgbmVzdGVkIHBhcnNlciwgaXQgaXMKICAgIGFkdmlzYWJsZSB0byBnaXZlIHRoZSA8Y29kZT5zdGFydFN0YXRlPC9jb2RlPiBtZXRob2Qgb2YgbW9kZXMgdGhhdAogICAgYXJlIGludGVuZGVkIHRvIGJlIG5lc3RlZCBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IHByb3ZpZGVzIHRoZQogICAgYmFzZSBpbmRlbnRhdGlvbiBmb3IgdGhlIGJsb2NrIG9mIGNvZGUuIFRoZSBKYXZhU2NyaXB0IGFuZCBDU1MKICAgIHBhcnNlciBkbyB0aGlzLCBmb3IgZXhhbXBsZSwgdG8gYWxsb3cgSmF2YVNjcmlwdCBhbmQgQ1NTIGNvZGUKICAgIGluc2lkZSB0aGUgbWl4ZWQtbW9kZSBIVE1MIG1vZGUgdG8gYmUgcHJvcGVybHkgaW5kZW50ZWQuPC9wPgoKICAgIDxwPkZpbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGFzc29jaWF0ZSB5b3VyIG1vZGUsIG9yIGEgY2VydGFpbgogICAgY29uZmlndXJhdGlvbiBvZiB5b3VyIG1vZGUsIHdpdGgKICAgIGEgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSU1FIj5NSU1FPC9hPiB0eXBlLiBGb3IKICAgIGV4YW1wbGUsIHRoZSBKYXZhU2NyaXB0IG1vZGUgYXNzb2NpYXRlcyBpdHNlbGYKICAgIHdpdGggPGNvZGU+dGV4dC9qYXZhc2NyaXB0PC9jb2RlPiwgYW5kIGl0cyBKU09OIHZhcmlhbnQKICAgIHdpdGggPGNvZGU+YXBwbGljYXRpb24vanNvbjwvY29kZT4uIFRvIGRvIHRoaXMsCiAgICBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lTUlNRShtaW1lLCBtb2RlU3BlYyk8L2NvZGU+LAogICAgd2hlcmUgPGNvZGU+bW9kZVNwZWM8L2NvZGU+IGNhbiBiZSBhIHN0cmluZyBvciBvYmplY3Qgc3BlY2lmeWluZyBhCiAgICBtb2RlLCBhcyBpbiB0aGUgPGEgaHJlZj0iI29wdGlvbl9tb2RlIj48Y29kZT5tb2RlPC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJyaWdodHNtYWxsIGJsayI+CgogICAgPGgyPkNvbnRlbnRzPC9oMj4KCiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSIjb3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXNhZ2UiPkJhc2ljIFVzYWdlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjY29uZmlnIj5Db25maWd1cmF0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIja2V5bWFwcyI+S2V5bWFwczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3N0eWxpbmciPkN1c3RvbWl6ZWQgU3R5bGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2FwaSI+UHJvZ3JhbW1pbmcgQVBJPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjYWRkb25zIj5BZGQtb25zPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjbW9kZWFwaSI+V3JpdGluZyBDb2RlTWlycm9yIE1vZGVzPC9hPjwvbGk+CiAgICA8L3VsPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/oldrelease.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImRvY3MuY3NzIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIE9sZCByZWxlYXNlIGhpc3RvcnkgKi8KCjwvcHJlPgoKICA8cCBjbGFzcz0icmVsIj4yNi0wOS0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjE1LnppcCI+VmVyc2lvbiAyLjE1PC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5GaXggYnVnIHRoYXQgc251Y2sgaW50byAyLjE0OiBDbGlja2luZyB0aGUKICBjaGFyYWN0ZXIgdGhhdCBjdXJyZW50bHkgaGFzIHRoZSBjdXJzb3IgZGlkbid0IHJlLWZvY3VzIHRoZQogIGVkaXRvci48L3A+CgogIDxwIGNsYXNzPSJyZWwiPjI2LTA5LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTQuemlwIj5WZXJzaW9uIDIuMTQ8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgPGEgaHJlZj0iLi4vbW9kZS9jbG9qdXJlL2luZGV4Lmh0bWwiPkNsb2p1cmU8L2E+LCA8YSBocmVmPSIuLi9tb2RlL3Bhc2NhbC9pbmRleC5odG1sIj5QYXNjYWw8L2E+LCA8YSBocmVmPSIuLi9tb2RlL250cmlwbGVzL2luZGV4Lmh0bWwiPk5UcmlwbGVzPC9hPiwgPGEgaHJlZj0iLi4vbW9kZS9qaW5qYTIvaW5kZXguaHRtbCI+SmluamEyPC9hPiwgYW5kIDxhIGhyZWY9Ii4uL21vZGUvbWFya2Rvd24vaW5kZXguaHRtbCI+TWFya2Rvd248L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Ii4uL3RoZW1lL2NvYmFsdC5jc3MiPkNvYmFsdDwvYT4gYW5kIDxhIGhyZWY9Ii4uL3RoZW1lL2VjbGlwc2UuY3NzIj5FY2xpcHNlPC9hPiB0aGVtZXMuPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtYW51YWwuaHRtbCNvcHRpb25fZml4ZWRHdXR0ZXIiPjxjb2RlPmZpeGVkR3V0dGVyPC9jb2RlPjwvYT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+Rml4IGJ1ZyB3aXRoIDxjb2RlPnNldFZhbHVlPC9jb2RlPiBicmVha2luZyBjdXJzb3IgbW92ZW1lbnQuPC9saT4KICAgIDxsaT5NYWtlIGd1dHRlciB1cGRhdGVzIG11Y2ggbW9yZSBlZmZpY2llbnQuPC9saT4KICAgIDxsaT5BbGxvdyBkcmFnZ2luZyBvZiB0ZXh0IG91dCBvZiB0aGUgZWRpdG9yIChvbiBtb2Rlcm4gYnJvd3NlcnMpLjwvbGk+CiAgPC91bD4KCgogIDxwIGNsYXNzPSJyZWwiPjIzLTA4LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTMuemlwIj5WZXJzaW9uIDIuMTM8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgPGEgaHJlZj0iLi4vbW9kZS9ydWJ5L2luZGV4Lmh0bWwiPlJ1Ynk8L2E+LCA8YSBocmVmPSIuLi9tb2RlL3IvaW5kZXguaHRtbCI+UjwvYT4sIDxhIGhyZWY9Ii4uL21vZGUvY29mZmVlc2NyaXB0L2luZGV4Lmh0bWwiPkNvZmZlZVNjcmlwdDwvYT4sIGFuZCA8YSBocmVmPSIuLi9tb2RlL3ZlbG9jaXR5L2luZGV4Lmh0bWwiPlZlbG9jaXR5PC9hPiBtb2Rlcy48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSJtYW51YWwuaHRtbCNnZXRHdXR0ZXJFbGVtZW50Ij48Y29kZT5nZXRHdXR0ZXJFbGVtZW50PC9jb2RlPjwvYT4gdG8gQVBJLjwvbGk+CiAgICA8bGk+U2V2ZXJhbCBmaXhlcyB0byBzY3JvbGxpbmcgYW5kIHBvc2l0aW9uaW5nLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9zbWFydEhvbWUiPjxjb2RlPnNtYXJ0SG9tZTwvY29kZT48L2E+IG9wdGlvbi48L2xpPgogICAgPGxpPkFkZCBhbiBleHBlcmltZW50YWwgPGEgaHJlZj0iLi4vbW9kZS94bWxwdXJlL2luZGV4Lmh0bWwiPnB1cmUgWE1MPC9hPiBtb2RlLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjUtMDctMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xMi56aXAiPlZlcnNpb24gMi4xMjwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvc3BhcnFsL2luZGV4Lmh0bWwiPlNQQVJRTDwvYT4gbW9kZS48L2xpPgogICAgPGxpPkZpeCBidWcgd2l0aCBjdXJzb3IganVtcGluZyBhcm91bmQgaW4gYW4gdW5mb2N1c2VkIGVkaXRvciBpbiBJRS48L2xpPgogICAgPGxpPkFsbG93IGtleSBhbmQgbW91c2UgZXZlbnRzIHRvIGJ1YmJsZSBvdXQgb2YgdGhlIGVkaXRvci4gSWdub3JlIHdpZGdldCBjbGlja3MuPC9saT4KICAgIDxsaT5Tb2x2ZSBjdXJzb3IgZmxha2luZXNzIGFmdGVyIHVuZG8vcmVkby48L2xpPgogICAgPGxpPkZpeCBibG9jay1yZWluZGVudCBpZ25vcmluZyB0aGUgbGFzdCBmZXcgbGluZXMuPC9saT4KICAgIDxsaT5GaXggcGFyc2luZyBvZiBtdWx0aS1saW5lIGF0dHJzIGluIFhNTCBtb2RlLjwvbGk+CiAgICA8bGk+VXNlIDxjb2RlPmlubmVySFRNTDwvY29kZT4gZm9yIEhUTUwtZXNjYXBpbmcuPC9saT4KICAgIDxsaT5Tb21lIGZpeGVzIHRvIGluZGVudGF0aW9uIGluIEMtbGlrZSBtb2RlLjwvbGk+CiAgICA8bGk+U2hyaW5rIGhvcml6IHNjcm9sbGJhcnMgd2hlbiBsb25nIGxpbmVzIHJlbW92ZWQuPC9saT4KICAgIDxsaT5GaXggd2lkdGggZmVlZGJhY2sgbG9vcCBidWcgdGhhdCBjYXVzZWQgdGhlIHdpZHRoIG9mIGFuIGlubmVyIERJViB0byBzaHJpbmsuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4wNC0wNy0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjExLnppcCI+VmVyc2lvbiAyLjExPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iLi4vbW9kZS9zY2hlbWUvaW5kZXguaHRtbCI+U2NoZW1lIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+QWRkIGEgPGNvZGU+cmVwbGFjZTwvY29kZT4gbWV0aG9kIHRvIHNlYXJjaCBjdXJzb3JzLCBmb3IgY3Vyc29yLXByZXNlcnZpbmcgcmVwbGFjZW1lbnRzLjwvbGk+CiAgICA8bGk+TWFrZSB0aGUgPGEgaHJlZj0iLi4vbW9kZS9jbGlrZS9pbmRleC5odG1sIj5DLWxpa2UgbW9kZTwvYT4gbW9kZSBtb3JlIGN1c3RvbWl6YWJsZS48L2xpPgogICAgPGxpPlVwZGF0ZSBYTUwgbW9kZSB0byBzcG90IG1pc21hdGNoZWQgdGFncy48L2xpPgogICAgPGxpPkFkZCA8Y29kZT5nZXRTdGF0ZUFmdGVyPC9jb2RlPiBBUEkgYW5kIDxjb2RlPmNvbXBhcmVTdGF0ZTwvY29kZT4gbW9kZSBBUEkgbWV0aG9kcyBmb3IgZmluZXItZ3JhaW5lZCBtb2RlIG1hZ2ljLjwvbGk+CiAgICA8bGk+QWRkIGEgPGNvZGU+Z2V0U2Nyb2xsZXJFbGVtZW50PC9jb2RlPiBBUEkgbWV0aG9kIHRvIG1hbmlwdWxhdGUgdGhlIHNjcm9sbGluZyBESVYuPC9saT4KICAgIDxsaT5GaXggZHJhZy1hbmQtZHJvcCBmb3IgRmlyZWZveC48L2xpPgogICAgPGxpPkFkZCBhIEMjIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSA8YSBocmVmPSIuLi9tb2RlL2NsaWtlL2luZGV4Lmh0bWwiPkMtbGlrZSBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSIuLi9kZW1vL2Z1bGxzY3JlZW4uaHRtbCI+ZnVsbC1zY3JlZW4gZWRpdGluZzwvYT4gYW5kIDxhIGhyZWY9Ii4uL2RlbW8vY2hhbmdlbW9kZS5odG1sIj5tb2RlLWNoYW5naW5nPC9hPiBkZW1vcy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjA3LTA2LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMS56aXAiPlZlcnNpb24gMi4xPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5BZGQKICBhIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl90aGVtZSI+dGhlbWU8L2E+IHN5c3RlbQogICg8YSBocmVmPSIuLi9kZW1vL3RoZW1lLmh0bWwiPmRlbW88L2E+KS4gTm90ZSB0aGF0IHRoaXMgaXMgbm90CiAgYmFja3dhcmRzLWNvbXBhdGlibGXigJR5b3UnbGwgaGF2ZSB0byB1cGRhdGUgeW91ciBzdHlsZXMgYW5kCiAgbW9kZXMhPC9wPgoKICA8cCBjbGFzcz0icmVsIj4wNy0wNi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjAyLnppcCI+VmVyc2lvbiAyLjAyPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iLi4vbW9kZS9sdWEvaW5kZXguaHRtbCI+THVhIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+Rml4IHJldmVyc2Utc2VhcmNoaW5nIGZvciBhIHJlZ2V4cC48L2xpPgogICAgPGxpPkVtcHR5IGxpbmVzIGNhbiBubyBsb25nZXIgYnJlYWsgaGlnaGxpZ2h0aW5nLjwvbGk+CiAgICA8bGk+UmV3b3JrIHNjcm9sbGluZyBtb2RlbCAodGhlIG91dGVyIHdyYXBwZXIgbm8gbG9uZ2VyIGRvZXMgdGhlIHNjcm9sbGluZykuPC9saT4KICAgIDxsaT5Tb2x2ZSBob3Jpem9udGFsIGppdHRlcmluZyBvbiBsb25nIGxpbmVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Ii4uL2RlbW8vcnVubW9kZS5odG1sIj5ydW5tb2RlLmpzPC9hPi48L2xpPgogICAgPGxpPkltbWVkaWF0ZWx5IHJlLWhpZ2hsaWdodCB0ZXh0IHdoZW4gdHlwaW5nLjwvbGk+CiAgICA8bGk+Rml4IHByb2JsZW0gd2l0aCAnc3RpY2tpbmcnIGhvcml6b250YWwgc2Nyb2xsYmFyLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjYtMDUtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4wMS56aXAiPlZlcnNpb24gMi4wMTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsayBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvcnN0L2luZGV4Lmh0bWwiPnJlU3RydWN0dXJlZFRleHQgbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSIuLi9tb2RlL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob24gbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSIuLi9tb2RlL3Bsc3FsL2luZGV4Lmh0bWwiPlBML1NRTCBtb2RlPC9hPi48L2xpPgogICAgPGxpPjxjb2RlPmNvb3Jkc0NoYXI8L2NvZGU+IG5vdyB3b3JrczwvbGk+CiAgICA8bGk+Rml4IGEgcHJvYmxlbSB3aGVyZSA8Y29kZT5vbkN1cnNvckFjdGl2aXR5PC9jb2RlPiBpbnRlcmZlcmVkIHdpdGggPGNvZGU+b25DaGFuZ2U8L2NvZGU+LjwvbGk+CiAgICA8bGk+Rml4IGEgbnVtYmVyIG9mIHNjcm9sbGluZyBhbmQgbW91c2UtY2xpY2stcG9zaXRpb24gZ2xpdGNoZXMuPC9saT4KICAgIDxsaT5QYXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFuZ2VkIGxpbmVzIHRvIDxjb2RlPm9uQ2hhbmdlPC9jb2RlPi48L2xpPgogICAgPGxpPlN1cHBvcnQgY21kLXVwL2Rvd24gb24gT1MgWC48L2xpPgogICAgPGxpPkFkZCB0cmlwbGUtY2xpY2sgbGluZSBzZWxlY3Rpb24uPC9saT4KICAgIDxsaT5Eb24ndCBoYW5kbGUgc2hpZnQgd2hlbiBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIHRocm91Z2ggdGhlIEFQSS48L2xpPgogICAgPGxpPlN1cHBvcnQgPGNvZGU+Im5vY3Vyc29yIjwvY29kZT4gbW9kZSBmb3IgPGNvZGU+cmVhZE9ubHk8L2NvZGU+IG9wdGlvbi48L2xpPgogICAgPGxpPkFkZCBhbiA8Y29kZT5vbkhpZ2hsaWdodENvbXBsZXRlPC9jb2RlPiBvcHRpb24uPC9saT4KICAgIDxsaT5GaXggdGhlIGNvbnRleHQgbWVudSBmb3IgRmlyZWZveC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI4LTAzLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMC56aXAiPlZlcnNpb24gMi4wPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Db2RlTWlycm9yIDIgaXMgYSBjb21wbGV0ZSByZXdyaXRlIHRoYXQncwogIGZhc3Rlciwgc21hbGxlciwgc2ltcGxlciB0byB1c2UsIGFuZCBsZXNzIGRlcGVuZGVudCBvbiBicm93c2VyCiAgcXVpcmtzLiBTZWUgPGEgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPnRoaXM8L2E+CiAgYW5kIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yL2Jyb3dzZV90aHJlYWQvdGhyZWFkLzVhOGU4OTQwMjRhOWY1ODAiPnRoaXM8L2E+CiAgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9hPgoKICA8cCBjbGFzcz0icmVsIj4yOC0wMy0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0xLjAuemlwIj5WZXJzaW9uIDEuMDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkZpeCBlcnJvciB3aGVuIGRlYnVnIGhpc3Rvcnkgb3ZlcmZsb3dzLjwvbGk+CiAgICA8bGk+UmVmaW5lIGhhbmRsaW5nIG9mIEMjIHZlcmJhdGltIHN0cmluZ3MuPC9saT4KICAgIDxsaT5GaXggc29tZSBpc3N1ZXMgd2l0aCBKYXZhU2NyaXB0IGluZGVudGF0aW9uLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjItMDItMjAxMTogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hcmlqbmgvY29kZW1pcnJvcjIvdHJlZS9iZXRhMiI+VmVyc2lvbiAyLjAgYmV0YSAyPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Tb21ld2hhdCBtb3JlIG1hdHVyZSBBUEksIGxvdHMgb2YgYnVncyBzaGFrZW4gb3V0LjwvYT4KCiAgPHAgY2xhc3M9InJlbCI+MTctMDItMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45NC56aXAiPlZlcnNpb24gMC45NDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPjxjb2RlPnRhYk1vZGU6ICJzcGFjZXMiPC9jb2RlPiB3YXMgbW9kaWZpZWQgc2xpZ2h0bHkgKG5vdyBpbmRlbnRzIHdoZW4gc29tZXRoaW5nIGlzIHNlbGVjdGVkKS48L2xpPgogICAgPGxpPkZpeGVzIGEgYnVnIHRoYXQgd291bGQgY2F1c2UgdGhlIHNlbGVjdGlvbiBjb2RlIHRvIGJyZWFrIG9uIHNvbWUgSUUgdmVyc2lvbnMuPC9saT4KICAgIDxsaT5EaXNhYmxpbmcgc3BlbGwtY2hlY2sgb24gV2ViS2l0IGJyb3dzZXJzIG5vdyB3b3Jrcy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjA4LTAyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPlZlcnNpb24gMi4wIGJldGEgMTwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+Q29kZU1pcnJvciAyIGlzIGEgY29tcGxldGUgcmV3cml0ZSBvZgogIENvZGVNaXJyb3IsIG5vIGxvbmdlciBkZXBlbmRpbmcgb24gYW4gZWRpdGFibGUgZnJhbWUuPC9wPgoKICA8cCBjbGFzcz0icmVsIj4xOS0wMS0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjkzLnppcCI+VmVyc2lvbiAwLjkzPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkZWQgYSA8YSBocmVmPSJjb250cmliL3JlZ2V4L2luZGV4Lmh0bWwiPlJlZ3VsYXIgRXhwcmVzc2lvbjwvYT4gcGFyc2VyLjwvbGk+CiAgICA8bGk+Rml4ZXMgdG8gdGhlIFBIUCBwYXJzZXIuPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciByZWd1bGFyIGV4cHJlc3Npb24gaW4gc2VhcmNoL3JlcGxhY2UuPC9saT4KICAgIDxsaT5BZGQgPGNvZGU+c2F2ZTwvY29kZT4gbWV0aG9kIHRvIGluc3RhbmNlcyBjcmVhdGVkIHdpdGggPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPi48L2xpPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciBNUyBULVNRTCBpbiB0aGUgU1FMIHBhcnNlci48L2xpPgogICAgPGxpPlN1cHBvcnQgdXNlIG9mIENTUyBjbGFzc2VzIGZvciBoaWdobGlnaHRpbmcgYnJhY2tldHMuPC9saT4KICAgIDxsaT5GaXggeWV0IGFub3RoZXIgaGFuZyB3aXRoIGxpbmUtbnVtYmVyaW5nIGluIGhpZGRlbiBlZGl0b3JzLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MTctMTItMjAxMDogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45Mi56aXAiPlZlcnNpb24gMC45MjwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPk1ha2UgQ29kZU1pcnJvciB3b3JrIGluIFhIVE1MIGRvY3VtZW50cy48L2xpPgogICAgPGxpPkZpeCBidWcgaW4gaGFuZGxpbmcgb2YgYmFja3NsYXNoZXMgaW4gUHl0aG9uIHN0cmluZ3MuPC9saT4KICAgIDxsaT5UaGUgPGNvZGU+c3R5bGVOdW1iZXJzPC9jb2RlPiBvcHRpb24gaXMgbm93IG9mZmljaWFsbHkKICAgIHN1cHBvcnRlZCBhbmQgZG9jdW1lbnRlZC48L2xpPgogICAgPGxpPjxjb2RlPm9uTGluZU51bWJlckNsaWNrPC9jb2RlPiBvcHRpb24gYWRkZWQuPC9saT4KICAgIDxsaT5Nb3JlIGNvbnNpc3RlbnQgbmFtZXMgPGNvZGU+b25Mb2FkPC9jb2RlPiBhbmQKICAgIDxjb2RlPm9uQ3Vyc29yQWN0aXZpdHk8L2NvZGU+IGNhbGxiYWNrcy4gT2xkIG5hbWVzIHN0aWxsIHdvcmssIGJ1dAogICAgYXJlIGRlcHJlY2F0ZWQuPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJjb250cmliL2ZyZWVtYXJrZXIvaW5kZXguaHRtbCI+RnJlZW1hcmtlcjwvYT4gbW9kZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjExLTExLTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45MS56aXAiPlZlcnNpb24gMC45MTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZHMgc3VwcG9ydCBmb3IgPGEgaHJlZj0iY29udHJpYi9qYXZhIj5KYXZhPC9hPi48L2xpPgogICAgPGxpPlNtYWxsIGFkZGl0aW9ucyB0byB0aGUgPGEgaHJlZj0iY29udHJpYi9waHAiPlBIUDwvYT4gYW5kIDxhIGhyZWY9ImNvbnRyaWIvc3FsIj5TUUw8L2E+IHBhcnNlcnMuPC9saT4KICAgIDxsaT5Xb3JrIGFyb3VuZCB2YXJpb3VzIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzgwNiI+V2Via2l0PC9hPiA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzQiPmlzc3VlczwvYT4uPC9saT4KICAgIDxsaT5GaXggPGNvZGU+dG9UZXh0QXJlYTwvY29kZT4gdG8gdXBkYXRlIHRoZSBjb2RlIGluIHRoZSB0ZXh0YXJlYS48L2xpPgogICAgPGxpPkFkZCBhIDxjb2RlPm5vU2NyaXB0Q2FjaGluZzwvY29kZT4gb3B0aW9uIChoYWNrIHRvIGVhc2UgZGV2ZWxvcG1lbnQpLjwvbGk+CiAgICA8bGk+TWFrZSBzdWItbW9kZXMgb2YgPGEgaHJlZj0ibWl4ZWR0ZXN0Lmh0bWwiPkhUTUwgbWl4ZWQ8L2E+IG1vZGUgY29uZmlndXJhYmxlLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MDItMTAtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjkuemlwIj5WZXJzaW9uIDAuOTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciBzZWFyY2hpbmcgYmFja3dhcmRzLjwvbGk+CiAgICA8bGk+VGhlcmUgYXJlIG5vdyBwYXJzZXJzIGZvciA8YSBocmVmPSJjb250cmliL3NjaGVtZS9pbmRleC5odG1sIj5TY2hlbWU8L2E+LCA8YSBocmVmPSJjb250cmliL3hxdWVyeS9pbmRleC5odG1sIj5YUXVlcnk8L2E+LCBhbmQgPGEgaHJlZj0iY29udHJpYi9vbWV0YS9pbmRleC5odG1sIj5PbWV0YUpTPC9hPi48L2xpPgogICAgPGxpPk1ha2VzIDxjb2RlPmhlaWdodDogImR5bmFtaWMiPC9jb2RlPiBtb3JlIHJvYnVzdC48L2xpPgogICAgPGxpPkZpeGVzIGJ1ZyB3aGVyZSBwYXN0ZSBkaWQgbm90IHdvcmsgb24gT1MgWC48L2xpPgogICAgPGxpPkFkZCBhIDxjb2RlPmVudGVyTW9kZTwvY29kZT4gYW5kIDxjb2RlPmVsZWN0cmljQ2hhcnM8L2NvZGU+IG9wdGlvbnMgdG8gbWFrZSBpbmRlbnRhdGlvbiBldmVuIG1vcmUgY3VzdG9taXphYmxlLjwvbGk+CiAgICA8bGk+QWRkIDxjb2RlPmZpcnN0TGluZU51bWJlcjwvY29kZT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+Rml4IGJhZCBoYW5kbGluZyBvZiA8Y29kZT5AbWVkaWE8L2NvZGU+IHJ1bGVzIGJ5IHRoZSBDU1MgcGFyc2VyLjwvbGk+CiAgICA8bGk+VGFrZSBhIG5ldywgbW9yZSByb2J1c3QgYXBwcm9hY2ggdG8gd29ya2luZyBhcm91bmQgdGhlIGludmlzaWJsZS1sYXN0LWxpbmUgYnVnIGluIFdlYktpdC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjIyLTA3LTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC44LnppcCI+VmVyc2lvbiAwLjg8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8Y29kZT5jdXJzb3JDb29yZHM8L2NvZGU+IG1ldGhvZCB0byBmaW5kIHRoZSBzY3JlZW4KICAgIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJzb3IuPC9saT4KICAgIDxsaT5BIG51bWJlciBvZiBmaXhlcyBhbmQgc3VwcG9ydCBmb3IgbW9yZSBzeW50YXggaW4gdGhlIFBIUCBwYXJzZXIuPC9saT4KICAgIDxsaT5GaXggaW5kZW50YXRpb24gcHJvYmxlbSB3aXRoIEpTT04tbW9kZSBKUyBwYXJzZXIgaW4gV2Via2l0LjwvbGk+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iY29tcHJlc3MuaHRtbCI+bWluaWZpY2F0aW9uPC9hPiBVSS48L2xpPgogICAgPGxpPlN1cHBvcnQgYSA8Y29kZT5oZWlnaHQ6IGR5bmFtaWM8L2NvZGU+IG1vZGUsIHdoZXJlIHRoZSBlZGl0b3IncwogICAgaGVpZ2h0IHdpbGwgYWRqdXN0IHRvIHRoZSBzaXplIG9mIGl0cyBjb250ZW50LjwvbGk+CiAgICA8bGk+QmV0dGVyIHN1cHBvcnQgZm9yIElNRSBpbnB1dCBtb2RlLjwvbGk+CiAgICA8bGk+Rml4IEphdmFTY3JpcHQgcGFyc2VyIGdldHRpbmcgY29uZnVzZWQgd2hlbiBzZWVpbmcgYSBuby1hcmd1bWVudAogICAgZnVuY3Rpb24gY2FsbC48L2xpPgogICAgPGxpPkhhdmUgQ1NTIHBhcnNlciBzZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzZWxlY3RvcnMgYW5kIG90aGVyCiAgICBpZGVudGlmaWVycy48L2xpPgogICAgPGxpPkZpeCBzY3JvbGxpbmcgYnVnIHdoZW4gcGFzdGluZyBpbiBhIGhvcml6b250YWxseS1zY3JvbGxlZAogICAgZWRpdG9yLjwvbGk+CiAgICA8bGk+U3VwcG9ydCA8Y29kZT50b1RleHRBcmVhPC9jb2RlPiBtZXRob2QgaW4gaW5zdGFuY2VzIGNyZWF0ZWQgd2l0aAogICAgPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPi48L2xpPgogICAgPGxpPldvcmsgYXJvdW5kIG5ldyBPcGVyYSBjdXJzb3IgYnVnIHRoYXQgY2F1c2VzIHRoZSBjdXJzb3IgdG8ganVtcAogICAgd2hlbiBwcmVzc2luZyBiYWNrc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGxpbmUuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNy0wNC0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjcuemlwIj5WZXJzaW9uCiAgMC42NzwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+TW9yZSBjb25zaXN0ZW50IHBhZ2UtdXAvcGFnZS1kb3duIGJlaGF2aW91cgogIGFjcm9zcyBicm93c2Vycy4gRml4IHNvbWUgaXNzdWVzIHdpdGggaGlkZGVuIGVkaXRvcnMgbG9vcGluZyBmb3JldmVyCiAgd2hlbiBsaW5lLW51bWJlcnMgd2VyZSBlbmFibGVkLiBNYWtlIFBIUCBwYXJzZXIgcGFyc2UKICA8Y29kZT4iXFwiPC9jb2RlPiBjb3JyZWN0bHkuIEhhdmUgPGNvZGU+anVtcFRvTGluZTwvY29kZT4gd29yayBvbgogIGxpbmUgaGFuZGxlcywgYW5kIGFkZCA8Y29kZT5jdXJzb3JMaW5lPC9jb2RlPiBmdW5jdGlvbiB0byBmZXRjaCB0aGUKICBsaW5lIGhhbmRsZSB3aGVyZSB0aGUgY3Vyc29yIGN1cnJlbnRseSBpcy4gQWRkIG5ldwogIDxjb2RlPnNldFN0eWxlc2hlZXQ8L2NvZGU+IGZ1bmN0aW9uIHRvIHN3aXRjaCBzdHlsZS1zaGVldHMgaW4gYQogIHJ1bm5pbmcgZWRpdG9yLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MDEtMDMtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY2LnppcCI+VmVyc2lvbgogIDAuNjY8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkFkZHMgPGNvZGU+cmVtb3ZlTGluZTwvY29kZT4gbWV0aG9kIHRvIEFQSS4KICBJbnRyb2R1Y2VzIHRoZSA8YSBocmVmPSJjb250cmliL3Bsc3FsL2luZGV4Lmh0bWwiPlBMU1FMIHBhcnNlcjwvYT4uCiAgTWFya3MgWE1MIGVycm9ycyBieSBhZGRpbmcgKHJhdGhlciB0aGFuIHJlcGxhY2luZykgYSBDU1MgY2xhc3MsIHNvCiAgdGhhdCB0aGV5IGNhbiBiZSBkaXNhYmxlZCBieSBtb2RpZnlpbmcgdGhlaXIgc3R5bGUuIEZpeGVzIHNldmVyYWwKICBzZWxlY3Rpb24gYnVncywgYW5kIGEgbnVtYmVyIG9mIHNtYWxsIGdsaXRjaGVzLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MTItMTEtMjAwOTogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY1LnppcCI+VmVyc2lvbgogIDAuNjU8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkFkZCBzdXBwb3J0IGZvciBoYXZpbmcgYm90aCBsaW5lLXdyYXBwaW5nIGFuZAogIGxpbmUtbnVtYmVycyB0dXJuZWQgb24sIG1ha2UgcGFyZW4taGlnaGxpZ2h0aW5nIHN0eWxlIGN1c3RvbWlzYWJsZQogICg8Y29kZT5tYXJrUGFyZW48L2NvZGU+IGFuZCA8Y29kZT51bm1hcmtQYXJlbjwvY29kZT4gY29uZmlnCiAgb3B0aW9ucyksIHdvcmsgYXJvdW5kIGEgc2VsZWN0aW9uIGJ1ZyB0aGF0IE9wZXJhCiAgPGVtPnJlPC9lbT5pbnRyb2R1Y2VkIGluIHZlcnNpb24gMTAuPC9wPgoKICA8cCBjbGFzcz0icmVsIj4yMy0xMC0yMDA5OiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjQuemlwIj5WZXJzaW9uCiAgMC42NDwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+U29sdmVzIHNvbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlCiAgcGFzdGUtaGFuZGxpbmcgY2hhbmdlcyBmcm9tIHRoZSBwcmV2aW91cyByZWxlYXNlLiBBZGRzCiAgPGNvZGU+c2V0U3BlbGxjaGVjazwvY29kZT4sIDxjb2RlPnNldFRleHRXcmFwcGluZzwvY29kZT4sCiAgPGNvZGU+c2V0SW5kZW50VW5pdDwvY29kZT4sIDxjb2RlPnNldFVuZG9EZXB0aDwvY29kZT4sCiAgPGNvZGU+c2V0VGFiTW9kZTwvY29kZT4sIGFuZCA8Y29kZT5zZXRMaW5lTnVtYmVyczwvY29kZT4gdG8KICBjdXN0b21pc2UgYSBydW5uaW5nIGVkaXRvci4gSW50cm9kdWNlcyBhbiA8YQogIGhyZWY9ImNvbnRyaWIvc3FsL2luZGV4Lmh0bWwiPlNRTDwvYT4gcGFyc2VyLiBGaXhlcyBhIGZldyBzbWFsbAogIHByb2JsZW1zIGluIHRoZSA8YSBocmVmPSJjb250cmliL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob248L2E+CiAgcGFyc2VyLiBBbmQsIGFzIHVzdWFsLCBhZGQgd29ya2Fyb3VuZHMgZm9yIHZhcmlvdXMgbmV3bHkgZGlzY292ZXJlZAogIGJyb3dzZXIgaW5jb21wYXRpYmlsaXRpZXMuPC9wPgoKPHAgY2xhc3M9InJlbCI+PGVtPjMxLTA4LTIwMDk8L2VtPjogPGEKaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42My56aXAiPlZlcnNpb24KMC42MzwvYT46PC9wPgo8cCBjbGFzcz0icmVsLW5vdGUiPiBPdmVyaGF1bCBvZiBwYXN0ZS1oYW5kbGluZyAobGVzcyBmcmFnaWxlKSwgZml4ZXMgZm9yIHNldmVyYWwKc2VyaW91cyBJRTggaXNzdWVzIChjdXJzb3IganVtcGluZywgZW5kLW9mLWRvY3VtZW50IGJ1Z3MpIGFuZCBhIG51bWJlcgpvZiBzbWFsbCBwcm9ibGVtcy48L3A+Cgo8cCBjbGFzcz0icmVsIj48ZW0+MzAtMDUtMjAwOTwvZW0+OiA8YQpocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjYyLnppcCI+VmVyc2lvbgowLjYyPC9hPjo8L3A+CjxwIGNsYXNzPSJyZWwtbm90ZSI+SW50cm9kdWNlcyA8YSBocmVmPSJjb250cmliL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob248L2E+CmFuZCA8YSBocmVmPSJjb250cmliL2x1YS9pbmRleC5odG1sIj5MdWE8L2E+IHBhcnNlcnMuIEFkZAo8Y29kZT5zZXRQYXJzZXI8L2NvZGU+IChvbi10aGUtZmx5IG1vZGUgY2hhbmdpbmcpIGFuZAo8Y29kZT5jbGVhckhpc3Rvcnk8L2NvZGU+IG1ldGhvZHMuIE1ha2UgcGFyc2luZyBwYXNzZXMgdGltZS1iYXNlZAppbnN0ZWFkIG9mIGxpbmVzLWJhc2VkIChzZWUgdGhlIDxjb2RlPnBhc3NUaW1lPC9jb2RlPiBvcHRpb24pLjwvcD4KCjwvYm9keT48L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/reporting.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJlcG9ydGluZyBCdWdzPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5saSB7IG1hcmdpbi10b3A6IDFlbTsgfTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImJhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBSZXBvcnRpbmcgYnVncwogICBlZmZlY3RpdmVseSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImxlZnQiPgoKPHA+U28geW91IGZvdW5kIGEgcHJvYmxlbSBpbiBDb2RlTWlycm9yLiBCeSBhbGwgbWVhbnMsIHJlcG9ydCBpdCEgQnVnCnJlcG9ydHMgZnJvbSB1c2VycyBhcmUgdGhlIG1haW4gZHJpdmUgYmVoaW5kIGltcHJvdmVtZW50cyB0bwpDb2RlTWlycm9yLiBCdXQgZmlyc3QsIHBsZWFzZSByZWFkIG92ZXIgdGhlc2UgcG9pbnRzOjwvcD4KCjxvbD4KICA8bGk+Q29kZU1pcnJvciBpcyBtYWludGFpbmVkIGJ5IHZvbHVudGVlcnMuIFRoZXkgZG9uJ3Qgb3dlIHlvdQogIGFueXRoaW5nLCBzbyBiZSBwb2xpdGUuIFJlcG9ydHMgd2l0aCBhbiBpbmRpZ25hbnQgb3IgYmVsbGlnZXJlbnQKICB0b25lIHRlbmQgdG8gYmUgbW92ZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGlsZS48L2xpPgoKICA8bGk+SW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCA8c3Ryb25nPnRoZSBicm93c2VyIGluIHdoaWNoIHRoZQogIHByb2JsZW0gb2NjdXJyZWQ8L3N0cm9uZz4uIEV2ZW4gaWYgeW91IHRlc3RlZCBzZXZlcmFsIGJyb3dzZXJzLCBhbmQKICB0aGUgcHJvYmxlbSBvY2N1cnJlZCBpbiBhbGwgb2YgdGhlbSwgbWVudGlvbiB0aGlzIGZhY3QgaW4gdGhlIGJ1ZwogIHJlcG9ydC4gQWxzbyBpbmNsdWRlIGJyb3dzZXIgdmVyc2lvbiBudW1iZXJzIGFuZCB0aGUgb3BlcmF0aW5nCiAgc3lzdGVtIHRoYXQgeW91J3JlIG9uLjwvbGk+CgogIDxsaT5NZW50aW9uIHdoaWNoIHJlbGVhc2Ugb2YgQ29kZU1pcnJvciB5b3UncmUgdXNpbmcuIFByZWZlcmFibHksCiAgdHJ5IGFsc28gd2l0aCB0aGUgY3VycmVudCBkZXZlbG9wbWVudCBzbmFwc2hvdCwgdG8gZW5zdXJlIHRoZQogIHByb2JsZW0gaGFzIG5vdCBhbHJlYWR5IGJlZW4gZml4ZWQuPC9saT4KCiAgPGxpPk1lbnRpb24gdmVyeSBwcmVjaXNlbHkgd2hhdCB3ZW50IHdyb25nLiAiWCBpcyBicm9rZW4iIGlzIG5vdCBhCiAgZ29vZCBidWcgcmVwb3J0LiBXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj8gV2hhdCBoYXBwZW5lZAogIGluc3RlYWQ/IERlc2NyaWJlIHRoZSBleGFjdCBzdGVwcyBhIG1haW50YWluZXIgaGFzIHRvIHRha2UgdG8gbWFrZQogIHRoZSBwcm9ibGVtIG9jY3VyLiBXZSBjYW4gbm90IGZpeCBzb21ldGhpbmcgdGhhdCB3ZSBjYW4gbm90CiAgb2JzZXJ2ZS48L2xpPgoKICA8bGk+SWYgdGhlIHByb2JsZW0gY2FuIG5vdCBiZSByZXByb2R1Y2VkIGluIGFueSBvZiB0aGUgZGVtb3MKICBpbmNsdWRlZCBpbiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24sIHBsZWFzZSBwcm92aWRlIGFuIEhUTUwKICBkb2N1bWVudCB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgcHJvYmxlbS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMKICB0byBnbyB0byA8YSBocmVmPSJodHRwOi8vanNiaW4uY29tL2lodW5pbi9lZGl0Ij5qc2Jpbi5jb208L2E+LCBlbnRlcgogIGl0IHRoZXJlLCBwcmVzcyBzYXZlLCBhbmQgaW5jbHVkZSB0aGUgcmVzdWx0aW5nIGxpbmsgaW4geW91ciBidWcKICByZXBvcnQuPC9saT4KPC9vbD4KCjwvZGl2PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/upgrade_v2.2.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVwZ3JhZGluZyB0byB2Mi4yPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIFVwZ3JhZGluZyB0byB2Mi4yCiAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImxlZnQiPgoKPHA+VGhlcmUgYXJlIGEgZmV3IHRoaW5ncyBpbiB0aGUgMi4yIHJlbGVhc2UgdGhhdCByZXF1aXJlIHNvbWUgY2FyZQp3aGVuIHVwZ3JhZGluZy48L3A+Cgo8aDI+Tm8gbW9yZSBkZWZhdWx0LmNzczwvaDI+Cgo8cD5UaGUgZGVmYXVsdCB0aGVtZSBpcyBub3cgaW5jbHVkZWQKaW4gPGEgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj48Y29kZT5jb2RlbWlycm9yLmNzczwvY29kZT48L2E+LCBzbwp5b3UgZG8gbm90IGhhdmUgdG8gaW5jbHVkZWQgaXQgc2VwYXJhdGVseSBhbnltb3JlLiAoSXQgd2FzIHRpbnksIHNvCmV2ZW4gaWYgeW91J3JlIG5vdCB1c2luZyBpdCwgdGhlIGV4dHJhIGRhdGEgb3ZlcmhlYWQgaXMgbmVnbGlnaWJsZS4pCgo8aDI+RGlmZmVyZW50IGtleSBjdXN0b21pemF0aW9uPC9oMj4KCjxwPkNvZGVNaXJyb3IgaGFzIG1vdmVkIHRvIGEgc3lzdGVtCndoZXJlIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9rZXlNYXAiPmtleW1hcHM8L2E+IGFyZSB1c2VkIHRvCmJpbmQgYmVoYXZpb3IgdG8ga2V5cy4gVGhpcyBtZWFucyA8YSBocmVmPSIuLi9kZW1vL2VtYWNzLmh0bWwiPmN1c3RvbQpiaW5kaW5nczwvYT4gYXJlIG5vdyBwb3NzaWJsZS48L3A+Cgo8cD5UaHJlZSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlZCBrZXkKYmVoYXZpb3IsIDxjb2RlPnRhYk1vZGU8L2NvZGU+LCA8Y29kZT5lbnRlck1vZGU8L2NvZGU+LAphbmQgPGNvZGU+c21hcnRIb21lPC9jb2RlPiwgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEluc3RlYWQsIHlvdSBjYW4KcHJvdmlkZSBjdXN0b20gYmluZGluZ3MgdG8gaW5mbHVlbmNlIHRoZSB3YXkgdGhlc2Uga2V5cyBhY3QuIFRoaXMgaXMKZG9uZSB0aHJvdWdoIHRoZQpuZXcgPGEgaHJlZj0ibWFudWFsLmh0bWwjb3B0aW9uX2V4dHJhS2V5cyI+PGNvZGU+ZXh0cmFLZXlzPC9jb2RlPjwvYT4Kb3B0aW9uLCB3aGljaCBjYW4gaG9sZCBhbiBvYmplY3QgbWFwcGluZyBrZXkgbmFtZXMgdG8gZnVuY3Rpb25hbGl0eS4gQQpzaW1wbGUgZXhhbXBsZSB3b3VsZCBiZTo8L3A+Cgo8cHJlPiAgZXh0cmFLZXlzOiB7CiAgICAiQ3RybC1TIjogZnVuY3Rpb24oaW5zdGFuY2UpIHsgc2F2ZVRleHQoaW5zdGFuY2UuZ2V0VmFsdWUoKSk7IH0sCiAgICAiQ3RybC0vIjogInVuZG8iCiAgfTwvcHJlPgoKPHA+S2V5cyBjYW4gYmUgbWFwcGVkIGVpdGhlciB0byBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgYmUgZ2l2ZW4gdGhlCmVkaXRvciBpbnN0YW5jZSBhcyBhcmd1bWVudCwgb3IgdG8gc3RyaW5ncywgd2hpY2ggYXJlIG1hcHBlZCB0aHJvdWdoCmZ1bmN0aW9ucyB0aHJvdWdoIHRoZSA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiB0YWJsZSwgd2hpY2gKY29udGFpbnMgYWxsIHRoZSBidWlsdC1pbiBlZGl0aW5nIGNvbW1hbmRzLCBhbmQgY2FuIGJlIGluc3BlY3RlZCBhbmQKZXh0ZW5kZWQgYnkgZXh0ZXJuYWwgY29kZS48L3A+Cgo8cD5CeSBkZWZhdWx0LCB0aGUgPGNvZGU+SG9tZTwvY29kZT4ga2V5IGlzIGJvdW5kIHRvCnRoZSA8Y29kZT4iZ29MaW5lU3RhcnRTbWFydCI8L2NvZGU+IGNvbW1hbmQsIHdoaWNoIG1vdmVzIHRoZSBjdXJzb3IgdG8KdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBvbiB0aGUgbGluZS4gWW91IGNhbiBzZXQgZG8gdGhpcyB0bwptYWtlIGl0IGFsd2F5cyBnbyB0byB0aGUgdmVyeSBzdGFydCBpbnN0ZWFkOjwvcD4KCjxwcmU+ICBleHRyYUtleXM6IHsiSG9tZSI6ICJnb0xpbmVTdGFydCJ9PC9wcmU+Cgo8cD5TaW1pbGFybHksIDxjb2RlPkVudGVyPC9jb2RlPiBpcyBib3VuZAp0byA8Y29kZT4ibmV3bGluZUFuZEluZGVudCI8L2NvZGU+IGJ5IGRlZmF1bHQuIFlvdSBjYW4gYmluZCBpdCB0bwpzb21ldGhpbmcgZWxzZSB0byBnZXQgZGlmZmVyZW50IGJlaGF2aW9yLiBUbyBkaXNhYmxlIHNwZWNpYWwgaGFuZGxpbmcKY29tcGxldGVseSBhbmQgb25seSBnZXQgYSBuZXdsaW5lIGNoYXJhY3RlciBpbnNlcnRlZCwgeW91IGNhbiBiaW5kIGl0CnRvIDxjb2RlPmZhbHNlPC9jb2RlPjo8L3A+Cgo8cHJlPiAgZXh0cmFLZXlzOiB7IkVudGVyIjogZmFsc2V9PC9wcmU+Cgo8cD5UaGUgc2FtZSB3b3JrcyBmb3IgPGNvZGU+VGFiPC9jb2RlPi4gSWYgeW91IGRvbid0IHdhbnQgQ29kZU1pcnJvcgp0byBoYW5kbGUgaXQsIGJpbmQgaXQgdG8gPGNvZGU+ZmFsc2U8L2NvZGU+LiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMKdG8gaW5kZW50IHRoZSBjdXJyZW50IGxpbmUgbW9yZSAoPGNvZGU+ImluZGVudE1vcmUiPC9jb2RlPiBjb21tYW5kKSwKYW5kIGluZGVudCBpdCBsZXNzIHdoZW4gc2hpZnQgaXMgaGVsZCAoPGNvZGU+ImluZGVudExlc3MiPC9jb2RlPikuClRoZXJlIGFyZSBhbHNvIDxjb2RlPiJpbmRlbnRBdXRvIjwvY29kZT4gKHNtYXJ0IGluZGVudCkKYW5kIDxjb2RlPiJpbnNlcnRUYWIiPC9jb2RlPiBjb21tYW5kcyBwcm92aWRlZCBmb3IgYWx0ZXJuYXRlCmJlaGF2aW9ycy4gT3IgeW91IGNhbiB3cml0ZSB5b3VyIG93biBoYW5kbGVyIGZ1bmN0aW9uIHRvIGRvIHNvbWV0aGluZwpkaWZmZXJlbnQgYWx0b2dldGhlci48L3A+Cgo8aDI+VGFiczwvaDI+Cgo8cD5IYW5kbGluZyBvZiB0YWJzIGNoYW5nZWQgY29tcGxldGVseS4gVGhlIGRpc3BsYXkgd2lkdGggb2YgdGFicyBjYW4Kbm93IGJlIHNldCB3aXRoIHRoZSA8Y29kZT50YWJTaXplPC9jb2RlPiBvcHRpb24sIGFuZCB0YWJzIGNhbgpiZSA8YSBocmVmPSIuLi9kZW1vL3Zpc2libGV0YWJzLmh0bWwiPnN0eWxlZDwvYT4gYnkgc2V0dGluZyBDU1MgcnVsZXMKZm9yIHRoZSA8Y29kZT5jbS10YWI8L2NvZGU+IGNsYXNzLjwvcD4KCjxwPlRoZSBkZWZhdWx0IHdpZHRoIGZvciB0YWJzIGlzIG5vdyA0LCBhcyBvcHBvc2VkIHRvIHRoZSA4IHRoYXQgaXMKaGFyZC13aXJlZCBpbnRvIGJyb3dzZXJzLiBJZiB5b3UgYXJlIHJlbHlpbmcgb24gOC1zcGFjZSB0YWJzLCBtYWtlCnN1cmUgeW91IGV4cGxpY2l0bHkgc2V0IDxjb2RlPnRhYlNpemU6IDg8L2NvZGU+IGluIHlvdXIgb3B0aW9ucy48L3A+Cgo8L2Rpdj4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImRvYy9kb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvdXNlcl90aW1lbGluZS8yNDIyODMyODgucnNzIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIi8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImRvYy9iYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogSW4tYnJvd3NlciBjb2RlIGVkaXRpbmcKICAgbWFkZSBiZWFyYWJsZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0IGJsayI+CgogIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwIj5Db2RlTWlycm9yIGlzIGEgSmF2YVNjcmlwdCBjb21wb25lbnQgdGhhdAogIHByb3ZpZGVzIGEgY29kZSBlZGl0b3IgaW4gdGhlIGJyb3dzZXIuIFdoZW4gYSBtb2RlIGlzIGF2YWlsYWJsZSBmb3IKICB0aGUgbGFuZ3VhZ2UgeW91IGFyZSBjb2RpbmcgaW4sIGl0IHdpbGwgY29sb3IgeW91ciBjb2RlLCBhbmQKICBvcHRpb25hbGx5IGhlbHAgd2l0aCBpbmRlbnRhdGlvbi48L3A+CgogIDxwPkEgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sIj5yaWNoIHByb2dyYW1taW5nIEFQSTwvYT4gYW5kIGEgQ1NTCiAgdGhlbWluZyBzeXN0ZW0gYXJlIGF2YWlsYWJsZSBmb3IgY3VzdG9taXppbmcgQ29kZU1pcnJvciB0byBmaXQgeW91cgogIGFwcGxpY2F0aW9uLCBhbmQgZXh0ZW5kaW5nIGl0IHdpdGggbmV3IGZ1bmN0aW9uYWxpdHkuPC9wPgoKICA8ZGl2IGNsYXNzPSJjbGVhciI+PGRpdiBjbGFzcz0ibGVmdDEgYmxrIj4KCiAgICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6IDAiPlN1cHBvcnRlZCBtb2Rlczo8L2gyPgoKICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY2xpa2UvaW5kZXguaHRtbCI+QywgQysrLCBDIzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jbG9qdXJlL2luZGV4Lmh0bWwiPkNsb2p1cmU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY29mZmVlc2NyaXB0L2luZGV4Lmh0bWwiPkNvZmZlZVNjcmlwdDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jc3MvaW5kZXguaHRtbCI+Q1NTPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2RpZmYvaW5kZXguaHRtbCI+ZGlmZjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9lY2wvaW5kZXguaHRtbCI+RUNMPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2VybGFuZy9pbmRleC5odG1sIj5Fcmxhbmc8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvZ28vaW5kZXguaHRtbCI+R288L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvZ3Jvb3Z5L2luZGV4Lmh0bWwiPkdyb292eTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9oYXNrZWxsL2luZGV4Lmh0bWwiPkhhc2tlbGw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvaHRtbGVtYmVkZGVkL2luZGV4Lmh0bWwiPkhUTUwgZW1iZWRkZWQgc2NyaXB0czwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9odG1sbWl4ZWQvaW5kZXguaHRtbCI+SFRNTCBtaXhlZC1tb2RlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2NsaWtlL2luZGV4Lmh0bWwiPkphdmE8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvamF2YXNjcmlwdC9pbmRleC5odG1sIj5KYXZhU2NyaXB0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2ppbmphMi9pbmRleC5odG1sIj5KaW5qYTI8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbGVzcy9pbmRleC5odG1sIj5MRVNTPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2x1YS9pbmRleC5odG1sIj5MdWE8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbWFya2Rvd24vaW5kZXguaHRtbCI+TWFya2Rvd248L2E+ICg8YSBocmVmPSJtb2RlL2dmbS9pbmRleC5odG1sIj5HaXRodWItZmxhdm91cjwvYT4pPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbXlzcWwvaW5kZXguaHRtbCI+TXlTUUw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbnRyaXBsZXMvaW5kZXguaHRtbCI+TlRyaXBsZXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcGFzY2FsL2luZGV4Lmh0bWwiPlBhc2NhbDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wZXJsL2luZGV4Lmh0bWwiPlBlcmw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcGhwL2luZGV4Lmh0bWwiPlBIUDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9waWcvaW5kZXguaHRtbCI+UGlnIExhdGluPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3Bsc3FsL2luZGV4Lmh0bWwiPlBML1NRTDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wcm9wZXJ0aWVzL2luZGV4Lmh0bWwiPlByb3BlcnRpZXMgZmlsZXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcHl0aG9uL2luZGV4Lmh0bWwiPlB5dGhvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9yL2luZGV4Lmh0bWwiPlI8L2E+PC9saT4KICAgICAgPGxpPlJQTSA8YSBocmVmPSJtb2RlL3JwbS9zcGVjL2luZGV4Lmh0bWwiPnNwZWM8L2E+IGFuZCA8YSBocmVmPSJtb2RlL3JwbS9jaGFuZ2VzL2luZGV4Lmh0bWwiPmNoYW5nZWxvZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9yc3QvaW5kZXguaHRtbCI+cmVTdHJ1Y3R1cmVkVGV4dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9ydWJ5L2luZGV4Lmh0bWwiPlJ1Ynk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcnVzdC9pbmRleC5odG1sIj5SdXN0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2NsaWtlL3NjYWxhLmh0bWwiPlNjYWxhPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3NjaGVtZS9pbmRleC5odG1sIj5TY2hlbWU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc2hlbGwvaW5kZXguaHRtbCI+U2hlbGw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsazwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9zbWFydHkvaW5kZXguaHRtbCI+U21hcnR5PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3NwYXJxbC9pbmRleC5odG1sIj5TUEFSUUw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc3RleC9pbmRleC5odG1sIj5zVGVYLCBMYVRlWDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS90aWRkbHl3aWtpL2luZGV4Lmh0bWwiPlRpZGRseXdpa2k8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdGlraS9pbmRleC5odG1sIj5UaWtpIHdpa2k8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdmJzY3JpcHQvaW5kZXguaHRtbCI+VkJTY3JpcHQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdmVsb2NpdHkvaW5kZXguaHRtbCI+VmVsb2NpdHk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdmVyaWxvZy9pbmRleC5odG1sIj5WZXJpbG9nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3htbC9pbmRleC5odG1sIj5YTUwvSFRNTDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS94cXVlcnkvaW5kZXguaHRtbCI+WFF1ZXJ5PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3lhbWwvaW5kZXguaHRtbCI+WUFNTDwvYT48L2xpPgogICAgPC91bD4KCiAgPC9kaXY+PGRpdiBjbGFzcz0ibGVmdDIgYmxrIj4KCiAgICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6IDAiPlVzYWdlIGRlbW9zOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jb21wbGV0ZS5odG1sIj5BdXRvY29tcGxldGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9tdXN0YWNoZS5odG1sIj5Nb2RlIG92ZXJsYXlzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3NlYXJjaC5odG1sIj5TZWFyY2gvcmVwbGFjZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9mb2xkaW5nLmh0bWwiPkNvZGUgZm9sZGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9wcmV2aWV3Lmh0bWwiPkhUTUwgZWRpdG9yIHdpdGggcHJldmlldzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9yZXNpemUuaHRtbCI+QXV0by1yZXNpemluZyBlZGl0b3I8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vbWFya2VyLmh0bWwiPlNldHRpbmcgYnJlYWtwb2ludHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vYWN0aXZlbGluZS5odG1sIj5IaWdobGlnaHRpbmcgdGhlIGN1cnJlbnQgbGluZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9tYXRjaGhpZ2hsaWdodGVyLmh0bWwiPkhpZ2hsaWdodGluZyBzZWxlY3Rpb24gbWF0Y2hlczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby90aGVtZS5odG1sIj5UaGVtaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3J1bm1vZGUuaHRtbCI+U3RhbmQtYWxvbmUgaGlnaGxpZ2h0aW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2Z1bGxzY3JlZW4uaHRtbCI+RnVsbC1zY3JlZW4gZWRpdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jaGFuZ2Vtb2RlLmh0bWwiPk1vZGUgYXV0by1jaGFuZ2luZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby92aXNpYmxldGFicy5odG1sIj5WaXNpYmxlIHRhYnM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vZm9ybWF0dGluZy5odG1sIj5BdXRvZm9ybWF0dGluZyBvZiBjb2RlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2VtYWNzLmh0bWwiPkVtYWNzIGtleWJpbmRpbmdzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3ZpbS5odG1sIj5WaW0ga2V5YmluZGluZ3M8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vY2xvc2V0YWcuaHRtbCI+QXV0b21hdGljIHhtbCB0YWcgY2xvc2luZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9sb2FkbW9kZS5odG1sIj5MYXp5IG1vZGUgbG9hZGluZzwvYT48L2xpPgogICAgPC91bD4KCiAgICA8aDI+UmVhbC13b3JsZCB1c2VzOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2pzYmluLmNvbSI+anNiaW4uY29tPC9hPiAoSlMgcGxheWdyb3VuZCk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2J1enphcmQudXBzLmVkdS8iPlNhZ2UgZGVtbzwvYT4gKG1hdGggc3lzdGVtKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnNvdXJjZWxhaXIuY29tLyI+c291cmNlTGFpcjwvYT4gKG9ubGluZSBJREUpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9lbG9xdWVudGphdmFzY3JpcHQubmV0L2NoYXB0ZXIxLmh0bWwiPkVsb3F1ZW50IEphdmFTY3JpcHQ8L2E+IChib29rKTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5tZXJnZWx5LmNvbS8iPk1lcmdlbHk8L2E+IChpbnRlcmFjdGl2ZSBkaWZmaW5nKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcGFwZXJqcy5vcmcvIj5QYXBlci5qczwvYT4gKGdyYXBoaWNzIHNjcmlwdGluZyk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy53ZXNjaGVtZS5vcmcvIj5XZVNjaGVtZTwvYT4gKGxlYXJuaW5nIHRvb2wpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93ZWJnbHBsYXlncm91bmQubmV0LyI+V2ViR0wgcGxheWdyb3VuZDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3FsLmlvLyI+cWwuaW88L2E+IChodHRwIEFQSSBxdWVyeSBoZWxwZXIpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9lbG0tbGFuZy5vcmcvRXhhbXBsZXMuZWxtIj5FbG0gbGFuZ3VhZ2UgZXhhbXBsZXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9ibHVlZ3JpZmZvbi5vcmcvIj5CbHVlR3JpZmZvbjwvYT4gKEhUTUwgZWRpdG9yKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpzaGludC5jb20vIj5KU0hpbnQ8L2E+IChKUyBsaW50ZXIpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9rbDFwLmNvbS9jbXRlc3QvMSI+a2wxcDwvYT4gKHBhc3RlIHNlcnZpY2UpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zcWxmaWRkbGUuY29tIj5TUUxGaWRkbGU8L2E+IChTUUwgcGxheWdyb3VuZCk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3RvdXIuZ29sYW5nLm9yZyI+R28gbGFuZ3VhZ2UgdG91cjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2Nzc2RlY2suY29tLyI+Q1NTRGVjazwvYT4gKENTUyBzaG93Y2FzZSk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5ja3duYy5jb20vIj5DS1dOQzwvYT4gKFVNTCBlZGl0b3IpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2tldGNocGF0Y2gubmV0L2xhYnMvbGl2ZWNvZGVsYWJJbnRyby5odG1sIj5za2V0Y2hQYXRjaCBMaXZlY29kZWxhYjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly90aGVmaWxldHJlZS5jb20iPlRoZSBGaWxlIFRyZWU8L2E+IChjb2xsYWIgZWRpdG9yKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZW5qYWxvdC5jb20vdHJpYnV0YXJ5LzI2MzYyOTYvc2lud2F2ZXMuanMiPlRyaWJ1dGFyeTwvYT4gKGF1Z21lbnRlZCBlZGl0aW5nKTwvbGk+CiAgICA8L3VsPgoKICA8L2Rpdj48L2Rpdj4KCiAgPGgyIGlkPSJjb2RlIj5HZXR0aW5nIHRoZSBjb2RlPC9oMj4KCiAgPHA+QWxsIG9mIENvZGVNaXJyb3IgaXMgcmVsZWFzZWQgdW5kZXIgYSA8YQogIGhyZWY9IkxJQ0VOU0UiPk1JVC1zdHlsZTwvYT4gbGljZW5zZS4gVG8gZ2V0IGl0LCB5b3UgY2FuIGRvd25sb2FkCiAgdGhlIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLnppcCI+bGF0ZXN0CiAgcmVsZWFzZTwvYT4gb3IgdGhlIGN1cnJlbnQgPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvcjItbGF0ZXN0LnppcCI+ZGV2ZWxvcG1lbnQKICBzbmFwc2hvdDwvYT4gYXMgemlwIGZpbGVzLiBUbyBjcmVhdGUgYSBjdXN0b20gbWluaWZpZWQgc2NyaXB0IGZpbGUsCiAgeW91IGNhbiB1c2UgdGhlIDxhIGhyZWY9ImRvYy9jb21wcmVzcy5odG1sIj5jb21wcmVzc2lvbiBBUEk8L2E+LjwvcD4KCiAgPHA+V2UgdXNlIDxhIGhyZWY9Imh0dHA6Ly9naXQtc2NtLmNvbS8iPmdpdDwvYT4gZm9yIHZlcnNpb24gY29udHJvbC4KICBUaGUgbWFpbiByZXBvc2l0b3J5IGNhbiBiZSBmZXRjaGVkIGluIHRoaXMgd2F5OjwvcD4KCiAgPHByZSBjbGFzcz0iY29kZSI+Z2l0IGNsb25lIGh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyPC9wcmU+CgogIDxwPkNvZGVNaXJyb3IgY2FuIGFsc28gYmUgZm91bmQgb24gR2l0SHViIGF0IDxhCiAgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yMiI+bWFyaWpuaC9Db2RlTWlycm9yMjwvYT4uCiAgSWYgeW91IHBsYW4gdG8gaGFjayBvbiB0aGUgY29kZSBhbmQgY29udHJpYnV0ZSBwYXRjaGVzLCB0aGUgYmVzdCB3YXkKICB0byBkbyBpdCBpcyB0byBjcmVhdGUgYSBHaXRIdWIgZm9yaywgYW5kIHNlbmQgcHVsbCByZXF1ZXN0cy48L3A+CgogIDxoMiBpZD0iZG9jdW1lbnRpb24iPkRvY3VtZW50YXRpb248L2gyPgoKICA8cD5UaGUgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sIj5tYW51YWw8L2E+IGlzIHlvdXIgZmlyc3Qgc3RvcCBmb3IKICBsZWFybmluZyBob3cgdG8gdXNlIHRoaXMgbGlicmFyeS4gSXQgc3RhcnRzIHdpdGggYSBxdWljayBleHBsYW5hdGlvbgogIG9mIGhvdyB0byB1c2UgdGhlIGVkaXRvciwgYW5kIHRoZW4gZGVzY3JpYmVzIHRoZSBBUEkgaW4gZGV0YWlsLjwvcD4KCiAgPHA+Rm9yIHRob3NlIHdobyB3YW50IHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIGNvZGUsIHRoZXJlIGlzCiAgYW4gPGEgaHJlZj0iZG9jL2ludGVybmFscy5odG1sIj5vdmVydmlldyBvZiB0aGUgaW50ZXJuYWxzPC9hPiBhdmFpbGFibGUuCiAgVGhlIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIiPnNvdXJjZSBjb2RlPC9hPgogIGl0c2VsZiBpcywgZm9yIHRoZSBtb3N0IHBhcnQsIGFsc28gd2VsbCBjb21tZW50ZWQuPC9wPgoKICA8aDIgaWQ9InN1cHBvcnQiPlN1cHBvcnQgYW5kIGJ1ZyByZXBvcnRzPC9oMj4KCiAgPHA+VGhlcmUgaXMKICBhIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yIj5Hb29nbGUKICBncm91cDwvYT4gKGEgc29ydCBvZiBtYWlsaW5nIGxpc3QvbmV3c2dyb3VwIHRoaW5nKSBmb3IgZGlzY3Vzc2lvbgogIGFuZCBuZXdzIHJlbGF0ZWQgdG8gQ29kZU1pcnJvci4gV2hlbiByZXBvcnRpbmcgYSBidWcsCiAgPGEgaHJlZj0iZG9jL3JlcG9ydGluZy5odG1sIj5yZWFkIHRoaXMgZmlyc3Q8L2E+LiBJZiB5b3UgaGF2ZQogIGEgPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20iPmdpdGh1YjwvYT4gYWNjb3VudCwKICBzaW1wbHkgPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yMi9pc3N1ZXMiPm9wZW4KICBhbiBpc3N1ZSB0aGVyZTwvYT4uIE90aGVyd2lzZSwgcG9zdCBzb21ldGhpbmcgdG8KICB0aGUgPGEgaHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2NvZGVtaXJyb3IiPmdyb3VwPC9hPiwKICBvciBlLW1haWwgbWUgZGlyZWN0bHk6IDxhIGhyZWY9Im1haWx0bzptYXJpam5oQGdtYWlsLmNvbSI+TWFyaWpuCiAgSGF2ZXJiZWtlPC9hPi48L3A+CgogIDxoMiBpZD0ic3VwcG9ydGVkIj5TdXBwb3J0ZWQgYnJvd3NlcnM8L2gyPgoKICA8cD5UaGUgZm9sbG93aW5nIGJyb3dzZXJzIGFyZSBhYmxlIHRvIHJ1biBDb2RlTWlycm9yOjwvcD4KCiAgPHVsPgogICAgPGxpPkZpcmVmb3ggMiBvciBoaWdoZXI8L2xpPgogICAgPGxpPkNocm9tZSwgYW55IHZlcnNpb248L2xpPgogICAgPGxpPlNhZmFyaSAzIG9yIGhpZ2hlcjwvbGk+CiAgICA8bGk+SW50ZXJuZXQgRXhwbG9yZXIgNyBvciBoaWdoZXIgaW4gc3RhbmRhcmRzICg8c3Ryb25nPm5vbi1xdWlya3M8L3N0cm9uZz4pIG1vZGU8L2xpPgogICAgPGxpPk9wZXJhIDkgb3IgaGlnaGVyICh3aXRoIHNvbWUga2V5LWhhbmRsaW5nIHByb2JsZW1zIG9uIE9TIFgpPC9saT4KICA8L3VsPgoKICA8cD5JIGFtIG5vdCBhY3RpdmVseSB0ZXN0aW5nIGFnYWluc3QgZXZlcnkgbmV3IGJyb3dzZXIgcmVsZWFzZSwgYW5kCiAgdmVuZG9ycyBoYXZlIGEgaGFiaXQgb2YgaW50cm9kdWNpbmcgYnVncyBhbGwgdGhlIHRpbWUsIHNvIEkgYW0KICByZWx5aW5nIG9uIHRoZSBjb21tdW5pdHkgdG8gdGVsbCBtZSB3aGVuIHNvbWV0aGluZyBicmVha3MuCiAgU2VlIDxhIGhyZWY9IiNzdXBwb3J0Ij5oZXJlPC9hPiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QKICBtZS48L3A+CgogIDxoMiBpZD0iY29tbWVyY2lhbCI+Q29tbWVyY2lhbCBzdXBwb3J0PC9oMj4KCiAgPHA+Q29kZU1pcnJvciBpcyBkZXZlbG9wZWQgYW5kIG1haW50YWluZWQgYnkgbWUsIE1hcmlqbiBIYXZlcmJla2UsCiAgaW4gbXkgb3duIHRpbWUuIElmIHlvdXIgY29tcGFueSBpcyBnZXR0aW5nIHZhbHVlIG91dCBvZiBDb2RlTWlycm9yLAogIHBsZWFzZSBjb25zaWRlciBwdXJjaGFzaW5nIGEgc3VwcG9ydCBjb250cmFjdC48L3A+CgogIDx1bD4KICAgIDxsaT5Zb3UnbGwgYmUgZnVuZGluZyBmdXJ0aGVyIHdvcmsgb24gQ29kZU1pcnJvci48L2xpPgogICAgPGxpPllvdSBlbnN1cmUgdGhhdCB5b3UgZ2V0IGEgcXVpY2sgcmVzcG9uc2Ugd2hlbiB5b3UgaGF2ZSBhCiAgICBwcm9ibGVtLCBldmVuIHdoZW4gSSBhbSBvdGhlcndpc2UgYnVzeS48L2xpPgogIDwvdWw+CgogIDxwPkNvZGVNaXJyb3Igc3VwcG9ydCBjb250cmFjdHMgZXhpc3QgaW4gdHdvCiAgZm9ybXPigJQ8c3Ryb25nPmJhc2ljPC9zdHJvbmc+IGF0IOKCrDEwMCBwZXIgbW9udGgsCiAgYW5kIDxzdHJvbmc+cHJlbWl1bTwvc3Ryb25nPiBhdCDigqw1MDAgcGVyCiAgbW9udGguIDxhIGhyZWY9Im1haWx0bzptYXJpam5oQGdtYWlsLmNvbSI+Q29udGFjdCBtZTwvYT4gZm9yIGZ1cnRoZXIKICBpbmZvcm1hdGlvbi48L3A+Cgo8L2Rpdj4KCjxkaXYgY2xhc3M9InJpZ2h0IGJsayI+CgogIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLnppcCIgY2xhc3M9ImRvd25sb2FkIj5Eb3dubG9hZCB0aGUgbGF0ZXN0IHJlbGVhc2U8L2E+CgogIDxoMj5TdXBwb3J0IENvZGVNaXJyb3I8L2gyPgoKICA8dWw+CiAgICA8bGk+RG9uYXRlCiAgICAoPHNwYW4gb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BheXBhbCcpLnN1Ym1pdCgpOyIKICAgIGNsYXNzPSJxdWFzaWxpbmsiPlBheXBhbDwvc3Bhbj4KICAgIG9yIDxzcGFuIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYW5raW5mbycpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyIKICAgICAgICAgICAgIGNsYXNzPSJxdWFzaWxpbmsiPmJhbms8L3NwYW4+KTwvbGk+CiAgICA8bGk+UHVyY2hhc2UgPGEgaHJlZj0iI2NvbW1lcmNpYWwiPmNvbW1lcmNpYWwgc3VwcG9ydDwvYT48L2xpPgogIDwvdWw+CgogIDxwIGlkPSJiYW5raW5mbyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgIEJhbms6IDxpPlJhYm9iYW5rPC9pPjxici8+CiAgICBDb3VudHJ5OiA8aT5OZXRoZXJsYW5kczwvaT48YnIvPgogICAgU1dJRlQ6IDxpPlJBQk9OTDJVPC9pPjxici8+CiAgICBBY2NvdW50OiA8aT4xNDc4NTA3NzA8L2k+PGJyLz4KICAgIE5hbWU6IDxpPk1hcmlqbiBIYXZlcmJla2U8L2k+PGJyLz4KICAgIElCQU46IDxpPk5MMjYgUkFCTyAwMTQ3IDg1MDcgNzA8L2k+CiAgPC9wPgoKICA8aDI+UmVhZGluZyBtYXRlcmlhbDwvaDI+CgogIDx1bD4KICAgIDxsaT48YSBocmVmPSJkb2MvbWFudWFsLmh0bWwiPlVzZXIgbWFudWFsPC9hPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yMiI+QnJvd3NlIHRoZSBjb2RlPC9hPjwvbGk+CiAgPC91bD4KCiAgPGgyPlJlbGVhc2VzPC9oMj4KCiAgPHAgY2xhc3M9InJlbCI+MjItMDYtMjAxMjogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4zLnppcCI+VmVyc2lvbiAyLjM8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+PHN0cm9uZz5OZXcgc2Nyb2xsYmFyIGltcGxlbWVudGF0aW9uPC9zdHJvbmc+LiBTaG91bGQgZmxpY2tlciBsZXNzLiBDaGFuZ2VzIERPTSBzdHJ1Y3R1cmUgb2YgdGhlIGVkaXRvci48L2xpPgogICAgPGxpPk5ldyB0aGVtZTogPGEgaHJlZj0iZGVtby90aGVtZS5odG1sP3ZpYnJhbnQtaW5rIj52aWJyYW50LWluazwvYT4uPC9saT4KICAgIDxsaT5NYW55IGV4dGVuc2lvbnMgdG8gdGhlIFZJTSBrZXltYXAgKGluY2x1ZGluZyB0ZXh0IG9iamVjdHMpLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRlbW8vbXVsdGlwbGV4Lmh0bWwiPm1vZGUtbXVsdGlwbGV4aW5nPC9hPiB1dGlsaXR5IHNjcmlwdC48L2xpPgogICAgPGxpPkZpeCBidWcgd2hlcmUgcmlnaHQtY2xpY2sgcGFzdGUgd29ya3MgaW4gcmVhZC1vbmx5IG1vZGUuPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjZ2V0U2Nyb2xsSW5mbyI+PGNvZGU+Z2V0U2Nyb2xsSW5mbzwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPkxvdHMgb2Ygb3RoZXIgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIvY29tcGFyZS92Mi4yNS4uLnYyLjMiPmZpeGVzPC9hPi48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjIzLTA1LTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjUuemlwIj5WZXJzaW9uIDIuMjU8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+TmV3IG1vZGU6IDxhIGhyZWY9Im1vZGUvZXJsYW5nL2luZGV4Lmh0bWwiPkVybGFuZzwvYT4uPC9saT4KICAgIDxsaT48c3Ryb25nPlJlbW92ZSB4bWxwdXJlIG1vZGU8L3N0cm9uZz4gKHVzZSA8YSBocmVmPSJtb2RlL3htbC9pbmRleC5odG1sIj54bWwuanM8L2E+KS48L2xpPgogICAgPGxpPkZpeCBsaW5lLXdyYXBwaW5nIGluIE9wZXJhLjwvbGk+CiAgICA8bGk+Rml4IFggV2luZG93cyBtaWRkbGUtY2xpY2sgcGFzdGUgaW4gQ2hyb21lLjwvbGk+CiAgICA8bGk+Rml4IGJ1ZyB0aGF0IGJyb2tlIHBhc3Rpbmcgb2YgaHVnZSBkb2N1bWVudHMuPC9saT4KICAgIDxsaT5GaXggYmFja3NwYWNlIGFuZCB0YWIga2V5IHJlcGVhdCBpbiBPcGVyYS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjIzLTA0LTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjQuemlwIj5WZXJzaW9uIDIuMjQ8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+PHN0cm9uZz5Ecm9wIHN1cHBvcnQgZm9yIEludGVybmV0IEV4cGxvcmVyIDY8L3N0cm9uZz4uPC9saT4KICAgIDxsaT5OZXcKICAgIG1vZGVzOiA8YSBocmVmPSJtb2RlL3NoZWxsL2luZGV4Lmh0bWwiPlNoZWxsPC9hPiwgPGEgaHJlZj0ibW9kZS90aWtpL2luZGV4Lmh0bWwiPlRpa2kKICAgIHdpa2k8L2E+LCA8YSBocmVmPSJtb2RlL3BpZy9pbmRleC5odG1sIj5QaWcgTGF0aW48L2E+LjwvbGk+CiAgICA8bGk+TmV3IHRoZW1lczogPGEgaHJlZj0iZGVtby90aGVtZS5odG1sP2FtYmlhbmNlIj5BbWJpYW5jZTwvYT4sIDxhIGhyZWY9ImRlbW8vdGhlbWUuaHRtbD9ibGFja2JvYXJkIj5CbGFja2JvYXJkPC9hPi48L2xpPgogICAgPGxpPk1vcmUgY29udHJvbCBvdmVyIGRyYWcvZHJvcAogICAgd2l0aCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2RyYWdEcm9wIj48Y29kZT5kcmFnRHJvcDwvY29kZT48L2E+CiAgICBhbmQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI29wdGlvbl9vbkRyYWdFdmVudCI+PGNvZGU+b25EcmFnRXZlbnQ8L2NvZGU+PC9hPgogICAgb3B0aW9ucy48L2xpPgogICAgPGxpPk1ha2UgSFRNTCBtb2RlIGEgYml0IGxlc3MgcGVkYW50aWMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI2NvbXBvdW5kQ2hhbmdlIj48Y29kZT5jb21wb3VuZENoYW5nZTwvY29kZT48L2E+IEFQSSBtZXRob2QuPC9saT4KICAgIDxsaT5TZXZlcmFsIGZpeGVzIGluIHVuZG8gaGlzdG9yeSBhbmQgbGluZSBoaWRpbmcuPC9saT4KICAgIDxsaT5SZW1vdmUgKGJyb2tlbikgc3VwcG9ydCBmb3IgPGNvZGU+Y2F0Y2hhbGw8L2NvZGU+IGluIGtleSBtYXBzLAogICAgYWRkIDxjb2RlPm5vZmFsbHRocm91Z2g8L2NvZGU+IGJvb2xlYW4gZmllbGQgaW5zdGVhZC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI2LTAzLTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjMuemlwIj5WZXJzaW9uIDIuMjM8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+Q2hhbmdlIDxzdHJvbmc+ZGVmYXVsdCBiaW5kaW5nIGZvciB0YWI8L3N0cm9uZz4gPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJiaW5kaW5nJykuc3R5bGUuZGlzcGxheT0nJykiPlttb3JlXTwvYT4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogbm9uZSIgaWQ9dGFiYmluZGluZz4KICAgICAgICBTdGFydGluZyBpbiAyLjIzLCB0aGVzZSBiaW5kaW5ncyBhcmUgZGVmYXVsdDoKICAgICAgICA8dWw+PGxpPlRhYjogSW5zZXJ0IHRhYiBjaGFyYWN0ZXI8L2xpPgogICAgICAgICAgPGxpPlNoaWZ0LXRhYjogUmVzZXQgbGluZSBpbmRlbnRhdGlvbiB0byBkZWZhdWx0PC9saT4KICAgICAgICAgIDxsaT5DdHJsL0NtZC1bOiBSZWR1Y2UgbGluZSBpbmRlbnRhdGlvbiAob2xkIHRhYiBiZWhhdmlvdXIpPC9saT4KICAgICAgICAgIDxsaT5DdHJsL0NtZC1dOiBJbmNyZWFzZSBsaW5lIGluZGVudGF0aW9uIChvbGQgc2hpZnQtdGFiIGJlaGF2aW91cik8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgPC9saT4KICAgIDxsaT5OZXcgbW9kZXM6IDxhIGhyZWY9Im1vZGUveHF1ZXJ5L2luZGV4Lmh0bWwiPlhRdWVyeTwvYT4gYW5kIDxhIGhyZWY9Im1vZGUvdmJzY3JpcHQvaW5kZXguaHRtbCI+VkJTY3JpcHQ8L2E+LjwvbGk+CiAgICA8bGk+VHdvIG5ldyB0aGVtZXM6IDxhIGhyZWY9Im1vZGUvbGVzcy9pbmRleC5odG1sIj5sZXNzZXItZGFyazwvYT4gYW5kIDxhIGhyZWY9Im1vZGUveHF1ZXJ5L2luZGV4Lmh0bWwiPnhxLWRhcms8L2E+LjwvbGk+CiAgICA8bGk+RGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGJhY2tncm91bmQgYW5kIHRleHQgc3R5bGVzIGluIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNzZXRMaW5lQ2xhc3MiPjxjb2RlPnNldExpbmVDbGFzczwvY29kZT48L2E+LjwvbGk+CiAgICA8bGk+Rml4IGRyYWctYW5kLWRyb3AgaW4gSUU5Ky48L2xpPgogICAgPGxpPkV4dGVuZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjY2hhckNvb3JkcyI+PGNvZGU+Y2hhckNvb3JkczwvY29kZT48L2E+CiAgICBhbmQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI2N1cnNvckNvb3JkcyI+PGNvZGU+Y3Vyc29yQ29vcmRzPC9jb2RlPjwvYT4gd2l0aCBhIDxjb2RlPm1vZGU8L2NvZGU+IGFyZ3VtZW50LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fYXV0b2ZvY3VzIj48Y29kZT5hdXRvZm9jdXM8L2NvZGU+PC9hPiBvcHRpb24uPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI2ZpbmRNYXJrc0F0Ij48Y29kZT5maW5kTWFya3NBdDwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI3LTAyLTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjIuemlwIj5WZXJzaW9uIDIuMjI8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWxsb3cgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI2tleW1hcHMiPmtleSBoYW5kbGVyczwvYT4gdG8gcGFzcyB1cCBldmVudHMsIGFsbG93IGJpbmRpbmcgY2hhcmFjdGVycy48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2F1dG9DbGVhckVtcHR5TGluZXMiPjxjb2RlPmF1dG9DbGVhckVtcHR5TGluZXM8L2NvZGU+PC9hPiBvcHRpb24uPC9saT4KICAgIDxsaT5Qcm9wZXJseSB1c2UgdGFiIHN0b3BzIHdoZW4gcmVuZGVyaW5nIHRhYnMuPC9saT4KICAgIDxsaT5NYWtlIFBIUCBtb2RlIG1vcmUgcm9idXN0LjwvbGk+CiAgICA8bGk+U3VwcG9ydCBpbmRlbnRhdGlvbiBibG9ja3MgaW4gPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI3V0aWxfZm9sZGNvZGUiPmNvZGUgZm9sZGVyPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIHNjcmlwdCBmb3IgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI3V0aWxfbWF0Y2gtaGlnaGxpZ2h0ZXIiPmhpZ2hsaWdodGluZyBpbnN0YW5jZXMgb2YgdGhlIHNlbGVjdGlvbjwvYT4uPC9saT4KICAgIDxsaT5OZXcgPGEgaHJlZj0ibW9kZS9wcm9wZXJ0aWVzL2luZGV4Lmh0bWwiPi5wcm9wZXJ0aWVzPC9hPiBtb2RlLjwvbGk+CiAgICA8bGk+Rml4IG1hbnkgYnVncy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI3LTAxLTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjEuemlwIj5WZXJzaW9uIDIuMjE8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkZWQgPGEgaHJlZj0ibW9kZS9sZXNzL2luZGV4Lmh0bWwiPkxFU1M8L2E+LCA8YSBocmVmPSJtb2RlL215c3FsL2luZGV4Lmh0bWwiPk15U1FMPC9hPiwKICAgIDxhIGhyZWY9Im1vZGUvZ28vaW5kZXguaHRtbCI+R288L2E+LCBhbmQgPGEgaHJlZj0ibW9kZS92ZXJpbG9nL2luZGV4Lmh0bWwiPlZlcmlsb2c8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fc21hcnRJbmRlbnQiPjxjb2RlPnNtYXJ0SW5kZW50PC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L2xpPgogICAgPGxpPlN1cHBvcnQgYSBjdXJzb3IgaW4gPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI29wdGlvbl9yZWFkT25seSI+PGNvZGU+cmVhZE9ubHk8L2NvZGU+PC9hPi1tb2RlLjwvbGk+CiAgICA8bGk+U3VwcG9ydCBhc3NpZ25pbmcgbXVsdGlwbGUgc3R5bGVzIHRvIGEgdG9rZW4uPC9saT4KICAgIDxsaT5Vc2UgYSBuZXcgYXBwcm9hY2ggdG8gZHJhd2luZyB0aGUgc2VsZWN0aW9uLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNzY3JvbGxUbyI+PGNvZGU+c2Nyb2xsVG88L2NvZGU+PC9hPiBtZXRob2QuPC9saT4KICAgIDxsaT5BbGxvdyB1bmRvL3JlZG8gZXZlbnRzIHRvIHNwYW4gbm9uLWFkamFjZW50IGxpbmVzLjwvbGk+CiAgICA8bGk+TG90cyBhbmQgbG90cyBvZiBidWdmaXhlcy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjIwLTEyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMi56aXAiPlZlcnNpb24gMi4yPC9hPjo8L3A+CgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPlNsaWdodGx5IGluY29tcGF0aWJsZSBBUEkgY2hhbmdlcy4gUmVhZCA8YSBocmVmPSJkb2MvdXBncmFkZV92Mi4yLmh0bWwiPnRoaXM8L2E+LjwvbGk+CiAgICA8bGk+TmV3IGFwcHJvYWNoCiAgICB0byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2V4dHJhS2V5cyI+YmluZGluZzwvYT4ga2V5cywKICAgIHN1cHBvcnQgZm9yIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fa2V5TWFwIj5jdXN0b20KICAgIGJpbmRpbmdzPC9hPi48L2xpPgogICAgPGxpPlN1cHBvcnQgZm9yIG92ZXJ3cml0ZSAoaW5zZXJ0KS48L2xpPgogICAgPGxpPjxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fdGFiU2l6ZSI+Q3VzdG9tLXdpZHRoPC9hPgogICAgYW5kIDxhIGhyZWY9ImRlbW8vdmlzaWJsZXRhYnMuaHRtbCI+c3R5bGFibGU8L2E+IHRhYnMuPC9saT4KICAgIDxsaT5Nb3ZlZCBtb3JlIGNvZGUgaW50byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjYWRkb25zIj5hZGQtb24gc2NyaXB0czwvYT4uPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciBzYW5lIHZlcnRpY2FsIGN1cnNvciBtb3ZlbWVudCBpbiB3cmFwcGVkIGxpbmVzLjwvbGk+CiAgICA8bGk+TW9yZSByZWxpYWJsZSBoYW5kbGluZyBvZgogICAgZWRpdGluZyA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtlZCB0ZXh0PC9hPi48L2xpPgogICAgPGxpPkFkZCBtaW5pbWFsIDxhIGhyZWY9ImRlbW8vZW1hY3MuaHRtbCI+ZW1hY3M8L2E+CiAgICBhbmQgPGEgaHJlZj0iZGVtby92aW0uaHRtbCI+dmltPC9hPiBiaW5kaW5ncy48L2xpPgogICAgPGxpPlJlbmFtZSA8Y29kZT5jb29yZHNGcm9tSW5kZXg8L2NvZGU+CiAgICB0byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjcG9zRnJvbUluZGV4Ij48Y29kZT5wb3NGcm9tSW5kZXg8L2NvZGU+PC9hPiwKICAgIGFkZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjaW5kZXhGcm9tUG9zIj48Y29kZT5pbmRleEZyb21Qb3M8L2NvZGU+PC9hPgogICAgbWV0aG9kLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjEtMTEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xOC56aXAiPlZlcnNpb24gMi4xODwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+Rml4ZXMgPGNvZGU+VGV4dE1hcmtlci5jbGVhcjwvY29kZT4sIHdoaWNoIGlzIGJyb2tlbiBpbiAyLjE3LjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjEtMTEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xNy56aXAiPlZlcnNpb24gMi4xNzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2xpbmVXcmFwcGluZyI+bGluZQogICAgd3JhcHBpbmc8L2E+IGFuZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjaGlkZUxpbmUiPmNvZGUKICAgIGZvbGRpbmc8L2E+LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1vZGUvZ2ZtL2luZGV4Lmh0bWwiPkdpdGh1Yi1zdHlsZSBNYXJrZG93bjwvYT4gbW9kZS48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSJ0aGVtZS9tb25va2FpLmNzcyI+TW9ub2thaTwvYT4KICAgIGFuZCA8YSBocmVmPSJ0aGVtZS9ydWJ5Ymx1ZS5jc3MiPlJ1YnlibHVlPC9hPiB0aGVtZXMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI3NldEJvb2ttYXJrIj48Y29kZT5zZXRCb29rbWFyazwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPk1vdmUgc29tZSBvZiB0aGUgZGVtbyBjb2RlIGludG8gcmV1c2FibGUgY29tcG9uZW50cwogICAgdW5kZXIgPGEgaHJlZj0ibGliL3V0aWwvIj48Y29kZT5saWIvdXRpbDwvY29kZT48L2E+LjwvbGk+CiAgICA8bGk+TWFrZSBzY3JlZW4tY29vcmQtZmluZGluZyBjb2RlIGZhc3RlciBhbmQgbW9yZSByZWxpYWJsZS48L2xpPgogICAgPGxpPkZpeCBkcmFnLWFuZC1kcm9wIGluIEZpcmVmb3guPC9saT4KICAgIDxsaT5JbXByb3ZlIHN1cHBvcnQgZm9yIElNRS48L2xpPgogICAgPGxpPlNwZWVkIHVwIGNvbnRlbnQgcmVuZGVyaW5nLjwvbGk+CiAgICA8bGk+Rml4IGJyb3dzZXIncyBidWlsdC1pbiBzZWFyY2ggaW4gV2Via2l0LjwvbGk+CiAgICA8bGk+TWFrZSBkb3VibGUtIGFuZCB0cmlwbGUtY2xpY2sgd29yayBpbiBJRS48L2xpPgogICAgPGxpPlZhcmlvdXMgZml4ZXMgdG8gbW9kZXMuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNy0xMC0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjE2LnppcCI+VmVyc2lvbiAyLjE2PC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1vZGUvcGVybC9pbmRleC5odG1sIj5QZXJsPC9hPiwgPGEgaHJlZj0ibW9kZS9ydXN0L2luZGV4Lmh0bWwiPlJ1c3Q8L2E+LCA8YSBocmVmPSJtb2RlL3RpZGRseXdpa2kvaW5kZXguaHRtbCI+VGlkZGx5V2lraTwvYT4sIGFuZCA8YSBocmVmPSJtb2RlL2dyb292eS9pbmRleC5odG1sIj5Hcm9vdnk8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+RHJhZ2dpbmcgdGV4dCBpbnNpZGUgdGhlIGVkaXRvciBub3cgbW92ZXMsIHJhdGhlciB0aGFuIGNvcGllcy48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNjb29yZHNGcm9tSW5kZXgiPjxjb2RlPmNvb3Jkc0Zyb21JbmRleDwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPjxzdHJvbmc+QVBJIGNoYW5nZTwvc3Ryb25nPjogPGNvZGU+c2V0VmFsdWU8L2NvZGU+IG5vdyBubyBsb25nZXIgY2xlYXJzIGhpc3RvcnkuIFVzZSA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjY2xlYXJIaXN0b3J5Ij48Y29kZT5jbGVhckhpc3Rvcnk8L2NvZGU+PC9hPiBmb3IgdGhhdC48L2xpPgogICAgPGxpPjxzdHJvbmc+QVBJIGNoYW5nZTwvc3Ryb25nPjogPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI21hcmtUZXh0Ij48Y29kZT5tYXJrVGV4dDwvY29kZT48L2E+IG5vdwogICAgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCA8Y29kZT5jbGVhcjwvY29kZT4gYW5kIDxjb2RlPmZpbmQ8L2NvZGU+CiAgICBtZXRob2RzLiBNYXJrZWQgdGV4dCBpcyBub3cgbW9yZSByb2J1c3Qgd2hlbiBlZGl0ZWQuPC9saT4KICAgIDxsaT5GaXggZWRpdGluZyBjb2RlIHdpdGggdGFicyBpbiBJbnRlcm5ldCBFeHBsb3Jlci48L2xpPgogIDwvdWw+CgogIDxwPjxhIGhyZWY9ImRvYy9vbGRyZWxlYXNlLmh0bWwiPk9sZGVyIHJlbGVhc2VzLi4uPC9hPjwvcD4KCjwvZGl2PjwvZGl2PgoKPGRpdiBzdHlsZT0iaGVpZ2h0OiAyZW0iPiZuYnNwOzwvZGl2PgoKICA8Zm9ybSBhY3Rpb249Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3IiIG1ldGhvZD0icG9zdCIgaWQ9InBheXBhbCI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjbWQiIHZhbHVlPSJfcy14Y2xpY2siLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Imhvc3RlZF9idXR0b25faWQiIHZhbHVlPSIzRlZIUzVGR1VZN0NDIi8+CiAgPC9mb3JtPgoKICA8L2JvZHk+CjwvaHRtbD4KCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/keymap/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/keymap/emacs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVE9ETyBudW1iZXIgcHJlZml4ZXMKKGZ1bmN0aW9uKCkgewogIC8vIFJlYWxseSBwcmltaXRpdmUga2lsbC1yaW5nIGltcGxlbWVudGF0aW9uLgogIHZhciBraWxsUmluZyA9IFtdOwogIGZ1bmN0aW9uIGFkZFRvUmluZyhzdHIpIHsKICAgIGtpbGxSaW5nLnB1c2goc3RyKTsKICAgIGlmIChraWxsUmluZy5sZW5ndGggPiA1MCkga2lsbFJpbmcuc2hpZnQoKTsKICB9CiAgZnVuY3Rpb24gZ2V0RnJvbVJpbmcoKSB7IHJldHVybiBraWxsUmluZ1traWxsUmluZy5sZW5ndGggLSAxXSB8fCAiIjsgfQogIGZ1bmN0aW9uIHBvcEZyb21SaW5nKCkgeyBpZiAoa2lsbFJpbmcubGVuZ3RoID4gMSkga2lsbFJpbmcucG9wKCk7IHJldHVybiBnZXRGcm9tUmluZygpOyB9CgogIENvZGVNaXJyb3Iua2V5TWFwLmVtYWNzID0gewogICAgIkN0cmwtWCI6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0T3B0aW9uKCJrZXlNYXAiLCAiZW1hY3MtQ3RybC1YIik7fSwKICAgICJDdHJsLVciOiBmdW5jdGlvbihjbSkge2FkZFRvUmluZyhjbS5nZXRTZWxlY3Rpb24oKSk7IGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIpO30sCiAgICAiQ3RybC1BbHQtVyI6IGZ1bmN0aW9uKGNtKSB7YWRkVG9SaW5nKGNtLmdldFNlbGVjdGlvbigpKTsgY20ucmVwbGFjZVNlbGVjdGlvbigiIik7fSwKICAgICJBbHQtVyI6IGZ1bmN0aW9uKGNtKSB7YWRkVG9SaW5nKGNtLmdldFNlbGVjdGlvbigpKTt9LAogICAgIkN0cmwtWSI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbihnZXRGcm9tUmluZygpKTt9LAogICAgIkFsdC1ZIjogZnVuY3Rpb24oY20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKHBvcEZyb21SaW5nKCkpO30sCiAgICAiQ3RybC0vIjogInVuZG8iLCAiU2hpZnQtQ3RybC0tIjogInVuZG8iLCAiU2hpZnQtQWx0LSwiOiAiZ29Eb2NTdGFydCIsICJTaGlmdC1BbHQtLiI6ICJnb0RvY0VuZCIsCiAgICAiQ3RybC1TIjogImZpbmROZXh0IiwgIkN0cmwtUiI6ICJmaW5kUHJldiIsICJDdHJsLUciOiAiY2xlYXJTZWFyY2giLCAiU2hpZnQtQWx0LTUiOiAicmVwbGFjZSIsCiAgICAiQ3RybC1aIjogInVuZG8iLCAiQ21kLVoiOiAidW5kbyIsICJBbHQtLyI6ICJhdXRvY29tcGxldGUiLAogICAgZmFsbHRocm91Z2g6IFsiYmFzaWMiLCAiZW1hY3N5Il0KICB9OwoKICBDb2RlTWlycm9yLmtleU1hcFsiZW1hY3MtQ3RybC1YIl0gPSB7CiAgICAiQ3RybC1TIjogInNhdmUiLCAiQ3RybC1XIjogInNhdmUiLCAiUyI6ICJzYXZlQWxsIiwgIkYiOiAib3BlbiIsICJVIjogInVuZG8iLCAiSyI6ICJjbG9zZSIsCiAgICBhdXRvOiAiZW1hY3MiLCBub2ZhbGx0aHJvdWdoOiB0cnVlCiAgfTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/keymap/vim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gU3VwcG9ydGVkIGtleWJpbmRpbmdzOgovLwovLyBDdXJzb3IgbW92ZW1lbnQ6Ci8vIGgsIGosIGssIGwKLy8gZSwgRSwgdywgVywgYiwgQgovLyBDdHJsLWYsIEN0cmwtYgovLyBDdHJsLW4sIEN0cmwtcAovLyAkLCBeLCAwCi8vIEcKLy8gZ2UsIGdFCi8vIGdnCi8vIGY8Y2hhcj4sIEY8Y2hhcj4sIHQ8Y2hhcj4sIFQ8Y2hhcj4KLy8gQ3RybC1vLCBDdHJsLWkgVE9ETyAoRklYTUUgLSBDdHJsLU8gd29udCB3b3JrIGluIENocm9tZSkKLy8gLywgPywgbiwgTiBUT0RPIChkb2VzIG5vdCB3b3JrKQovLyAjLCAqIFRPRE8KLy8KLy8gRW50ZXJpbmcgaW5zZXJ0IG1vZGU6Ci8vIGksIEksIGEsIEEsIG8sIE8KLy8gcwovLyBjZSwgY2IgKHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9mIGFjdGlvbnMgbGlrZSBjM2UgLSBUT0RPKQovLyBjYwovLyBTLCBDIFRPRE8KLy8gY2Y8Y2hhcj4sIGNGPGNoYXI+LCBjdDxjaGFyPiwgY1Q8Y2hhcj4KLy8KLy8gRGVsZXRpbmcgdGV4dDoKLy8geCwgWAovLyBKCi8vIGRkLCBECi8vIGRlLCBkYiAod2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2YgYWN0aW9ucyBsaWtlIGQzZSAtIFRPRE8pCi8vIGRmPGNoYXI+LCBkRjxjaGFyPiwgZHQ8Y2hhcj4sIGRUPGNoYXI+Ci8vCi8vIFlhbmtpbmcgYW5kIHBhc3Rpbmc6Ci8vIHl5LCBZCi8vIHAsIFAKLy8gcCc8Y2hhcj4gVE9ETyAtIHRlc3QKLy8geSc8Y2hhcj4gVE9ETyAtIHRlc3QKLy8gbTxjaGFyPiBUT0RPIC0gdGVzdAovLwovLyBDaGFuZ2luZyB0ZXh0IGluIHBsYWNlOgovLyB+Ci8vIHI8Y2hhcj4KLy8KLy8gVmlzdWFsIG1vZGU6Ci8vIHYsIFYgVE9ETwovLwovLyBNaXNjOgovLyAuIFRPRE8KLy8KCihmdW5jdGlvbigpIHsKICB2YXIgY291bnQgPSAiIjsKICB2YXIgc2RpciA9ICJmIjsKICB2YXIgYnVmID0gIiI7CiAgdmFyIHlhbmsgPSAwOwogIHZhciBtYXJrID0gW107CiAgdmFyIHJlcHRUaW1lcyA9IDA7CiAgZnVuY3Rpb24gZW1wdHlCdWZmZXIoKSB7IGJ1ZiA9ICIiOyB9CiAgZnVuY3Rpb24gcHVzaEluQnVmZmVyKHN0cikgeyBidWYgKz0gc3RyOyB9CiAgZnVuY3Rpb24gcHVzaENvdW50RGlnaXQoZGlnaXQpIHsgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7Y291bnQgKz0gZGlnaXQ7fTsgfQogIGZ1bmN0aW9uIHBvcENvdW50KCkgeyB2YXIgaSA9IHBhcnNlSW50KGNvdW50LCAxMCk7IGNvdW50ID0gIiI7IHJldHVybiBpIHx8IDE7IH0KICBmdW5jdGlvbiBpdGVyVGltZXMoZnVuYykgewogICAgZm9yICh2YXIgaSA9IDAsIGMgPSBwb3BDb3VudCgpOyBpIDwgYzsgKytpKSBmdW5jKGksIGkgPT0gYyAtIDEpOwogIH0KICBmdW5jdGlvbiBjb3VudFRpbWVzKGZ1bmMpIHsKICAgIGlmICh0eXBlb2YgZnVuYyA9PSAic3RyaW5nIikgZnVuYyA9IENvZGVNaXJyb3IuY29tbWFuZHNbZnVuY107CiAgICByZXR1cm4gZnVuY3Rpb24oY20pIHsgaXRlclRpbWVzKGZ1bmN0aW9uICgpIHsgZnVuYyhjbSk7IH0pOyB9OwogIH0KCiAgZnVuY3Rpb24gaXRlck9iaihvLCBmKSB7CiAgICBmb3IgKHZhciBwcm9wIGluIG8pIGlmIChvLmhhc093blByb3BlcnR5KHByb3ApKSBmKHByb3AsIG9bcHJvcF0pOwogIH0KICBmdW5jdGlvbiBpdGVyTGlzdChsLCBmKSB7CiAgICBmb3IgKHZhciBpIGluIGwpIGYobFtpXSk7CiAgfQogIGZ1bmN0aW9uIHRvTGV0dGVyKGNoKSB7CiAgICAvLyBUIC0+IHQsIFNoaWZ0LVQgLT4gVCwgJyonIC0+ICosICJTcGFjZSIgLT4gIiAiCiAgICBpZiAoY2guc2xpY2UoMCwgNikgPT0gIlNoaWZ0LSIpIHsKICAgICAgcmV0dXJuIGNoLnNsaWNlKDAsIDEpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGNoID09ICJTcGFjZSIpIHJldHVybiAiICI7CiAgICAgIGlmIChjaC5sZW5ndGggPT0gMyAmJiBjaFswXSA9PSAiJyIgJiYgY2hbMl0gPT0gIiciKSByZXR1cm4gY2hbMV07CiAgICAgIHJldHVybiBjaC50b0xvd2VyQ2FzZSgpOwogICAgfQogIH0KICB2YXIgU1BFQ0lBTF9TWU1CT0xTID0gIn5gIUAjJCVeJiooKV8tKz1be31dXFx8Lz8uLDw+OjtcIlwnMTIzNDU2Nzg5MCI7CiAgZnVuY3Rpb24gdG9Db21ibyhjaCkgewogICAgLy8gdCAtPiBULCBUIC0+IFNoaWZ0LVQsICogLT4gJyonLCAiICIgLT4gIlNwYWNlIgogICAgaWYgKGNoID09ICIgIikgcmV0dXJuICJTcGFjZSI7CiAgICB2YXIgc3BlY2lhbElkeCA9IFNQRUNJQUxfU1lNQk9MUy5pbmRleE9mKGNoKTsKICAgIGlmIChzcGVjaWFsSWR4ICE9IC0xKSByZXR1cm4gIiciICsgY2ggKyAiJyI7CiAgICBpZiAoY2gudG9Mb3dlckNhc2UoKSA9PSBjaCkgcmV0dXJuIGNoLnRvVXBwZXJDYXNlKCk7CiAgICByZXR1cm4gIlNoaWZ0LSIgKyBjaC50b1VwcGVyQ2FzZSgpOwogIH0KCiAgdmFyIHdvcmQgPSBbL1x3LywgL1teXHdcc10vXSwgYmlnV29yZCA9IFsvXFMvXTsKICBmdW5jdGlvbiBmaW5kV29yZChsaW5lLCBwb3MsIGRpciwgcmVnZXhwcykgewogICAgdmFyIHN0b3AgPSAwLCBuZXh0ID0gLTE7CiAgICBpZiAoZGlyID4gMCkgeyBzdG9wID0gbGluZS5sZW5ndGg7IG5leHQgPSAwOyB9CiAgICB2YXIgc3RhcnQgPSBzdG9wLCBlbmQgPSBzdG9wOwogICAgLy8gRmluZCBib3VuZHMgb2YgbmV4dCBvbmUuCiAgICBvdXRlcjogZm9yICg7IHBvcyAhPSBzdG9wOyBwb3MgKz0gZGlyKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVnZXhwcy5sZW5ndGg7ICsraSkgewogICAgICAgIGlmIChyZWdleHBzW2ldLnRlc3QobGluZS5jaGFyQXQocG9zICsgbmV4dCkpKSB7CiAgICAgICAgICBzdGFydCA9IHBvczsKICAgICAgICAgIGZvciAoOyBwb3MgIT0gc3RvcDsgcG9zICs9IGRpcikgewogICAgICAgICAgICBpZiAoIXJlZ2V4cHNbaV0udGVzdChsaW5lLmNoYXJBdChwb3MgKyBuZXh0KSkpIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgZW5kID0gcG9zOwogICAgICAgICAgYnJlYWsgb3V0ZXI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4ge2Zyb206IE1hdGgubWluKHN0YXJ0LCBlbmQpLCB0bzogTWF0aC5tYXgoc3RhcnQsIGVuZCl9OwogIH0KICBmdW5jdGlvbiBtb3ZlVG9Xb3JkKGNtLCByZWdleHBzLCBkaXIsIHRpbWVzLCB3aGVyZSkgewogICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGltZXM7IGkrKykgewogICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUoY3VyLmxpbmUpLCBzdGFydENoID0gY3VyLmNoLCB3b3JkOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIC8vIElmIHdlJ3JlIGF0IHN0YXJ0L2VuZCBvZiBsaW5lLCBzdGFydCBvbiBwcmV2L25leHQgcmVzcGVjdGl2bHkKICAgICAgICBpZiAoY3VyLmNoID09IGxpbmUubGVuZ3RoICYmIGRpciA+IDApIHsKICAgICAgICAgIGN1ci5saW5lKys7CiAgICAgICAgICBjdXIuY2ggPSAwOwogICAgICAgICAgbGluZSA9IGNtLmdldExpbmUoY3VyLmxpbmUpOwogICAgICAgIH0gZWxzZSBpZiAoY3VyLmNoID09IDAgJiYgZGlyIDwgMCkgewogICAgICAgICAgY3VyLmxpbmUtLTsKICAgICAgICAgIGN1ci5jaCA9IGxpbmUubGVuZ3RoOwogICAgICAgICAgbGluZSA9IGNtLmdldExpbmUoY3VyLmxpbmUpOwogICAgICAgIH0KICAgICAgICBpZiAoIWxpbmUpIGJyZWFrOwoKICAgICAgICAvLyBPbiB0byB0aGUgYWN0dWFsIHNlYXJjaGluZwogICAgICAgIHdvcmQgPSBmaW5kV29yZChsaW5lLCBjdXIuY2gsIGRpciwgcmVnZXhwcyk7CiAgICAgICAgY3VyLmNoID0gd29yZFt3aGVyZSA9PSAiZW5kIiA/ICJ0byIgOiAiZnJvbSJdOwogICAgICAgIGlmIChzdGFydENoID09IGN1ci5jaCAmJiB3b3JkLmZyb20gIT0gd29yZC50bykgY3VyLmNoID0gd29yZFtkaXIgPCAwID8gImZyb20iIDogInRvIl07CiAgICAgICAgZWxzZSBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGN1cjsKICB9CiAgZnVuY3Rpb24gam9pbkxpbmVOZXh0KGNtKSB7CiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGNoID0gY3VyLmNoLCBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7CiAgICBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7CiAgICBpZiAoY3VyLmxpbmUgIT0gY20ubGluZUNvdW50KCkpIHsKICAgICAgQ29kZU1pcnJvci5jb21tYW5kcy5nb0xpbmVFbmQoY20pOwogICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKCIgIiwgImVuZCIpOwogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLmRlbENoYXJSaWdodChjbSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGRlbFRpbGxNYXJrKGNtLCBjSGFyKSB7CiAgICB2YXIgaSA9IG1hcmtbY0hhcl07CiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIC8vIGNvbnNvbGUubG9nKCJNYXJrIG5vdCBzZXQiKTsgLy8gVE9ETyAtIHNob3cgaW4gc3RhdHVzIGJhcgogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgbCA9IGNtLmdldEN1cnNvcigpLmxpbmUsIHN0YXJ0ID0gaSA+IGwgPyBsIDogaSwgZW5kID0gaSA+IGwgPyBpIDogbDsKICAgIGNtLnNldEN1cnNvcihzdGFydCk7CiAgICBmb3IgKHZhciBjID0gc3RhcnQ7IGMgPD0gZW5kOyBjKyspIHsKICAgICAgcHVzaEluQnVmZmVyKCJcbiIrY20uZ2V0TGluZShzdGFydCkpOwogICAgICBjbS5yZW1vdmVMaW5lKHN0YXJ0KTsKICAgIH0KICB9CiAgZnVuY3Rpb24geWFua1RpbGxNYXJrKGNtLCBjSGFyKSB7CiAgICB2YXIgaSA9IG1hcmtbY0hhcl07CiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIC8vIGNvbnNvbGUubG9nKCJNYXJrIG5vdCBzZXQiKTsgLy8gVE9ETyAtIHNob3cgaW4gc3RhdHVzIGJhcgogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgbCA9IGNtLmdldEN1cnNvcigpLmxpbmUsIHN0YXJ0ID0gaSA+IGwgPyBsIDogaSwgZW5kID0gaSA+IGwgPyBpIDogbDsKICAgIGZvciAodmFyIGMgPSBzdGFydDsgYyA8PSBlbmQ7IGMrKykgewogICAgICBwdXNoSW5CdWZmZXIoIlxuIitjbS5nZXRMaW5lKGMpKTsKICAgIH0KICAgIGNtLnNldEN1cnNvcihzdGFydCk7CiAgfQogIGZ1bmN0aW9uIGdvTGluZVN0YXJ0VGV4dChjbSkgewogICAgLy8gR28gdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdoZXJlIHRoZSB0ZXh0IGJlZ2lucywgb3IgdGhlIGVuZCBmb3Igd2hpdGVzcGFjZS1vbmx5IGxpbmVzCiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGZpcnN0Tm9uV1MgPSBjbS5nZXRMaW5lKGN1ci5saW5lKS5zZWFyY2goL1xTLyk7CiAgICBjbS5zZXRDdXJzb3IoY3VyLmxpbmUsIGZpcnN0Tm9uV1MgPT0gLTEgPyBsaW5lLmxlbmd0aCA6IGZpcnN0Tm9uV1MsIHRydWUpOwogIH0KCiAgZnVuY3Rpb24gY2hhcklkeEluTGluZShjbSwgY0hhciwgbW90aW9uX29wdGlvbnMpIHsKICAgIC8vIFNlYXJjaCBmb3IgY0hhciBpbiBsaW5lLgogICAgLy8gbW90aW9uX29wdGlvbnM6IHtmb3J3YXJkLCBpbmNsdXNpdmV9CiAgICAvLyBJZiBpbmNsdXNpdmUgPSB0cnVlLCBpbmNsdWRlIGl0IHRvby4KICAgIC8vIElmIGZvcndhcmQgPSB0cnVlLCBzZWFyY2ggZm9yd2FyZCwgZWxzZSBzZWFyY2ggYmFja3dhcmRzLgogICAgLy8gSWYgY2hhciBpcyBub3QgZm91bmQgb24gdGhpcyBsaW5lLCBkbyBub3RoaW5nCiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKSwgaWR4OwogICAgdmFyIGNoID0gdG9MZXR0ZXIoY0hhciksIG1vID0gbW90aW9uX29wdGlvbnM7CiAgICBpZiAobW8uZm9yd2FyZCkgewogICAgICBpZHggPSBsaW5lLmluZGV4T2YoY2gsIGN1ci5jaCArIDEpOwogICAgICBpZiAoaWR4ICE9IC0xICYmIG1vLmluY2x1c2l2ZSkgaWR4ICs9IDE7CiAgICB9IGVsc2UgewogICAgICBpZHggPSBsaW5lLmxhc3RJbmRleE9mKGNoLCBjdXIuY2gpOwogICAgICBpZiAoaWR4ICE9IC0xICYmICFtby5pbmNsdXNpdmUpIGlkeCArPSAxOwogICAgfQogICAgcmV0dXJuIGlkeDsKICB9CgogIGZ1bmN0aW9uIG1vdmVUaWxsQ2hhcihjbSwgY0hhciwgbW90aW9uX29wdGlvbnMpIHsKICAgIC8vIE1vdmUgdG8gY0hhciBpbiBsaW5lLCBhcyBmb3VuZCBieSBjaGFySWR4SW5MaW5lLgogICAgdmFyIGlkeCA9IGNoYXJJZHhJbkxpbmUoY20sIGNIYXIsIG1vdGlvbl9vcHRpb25zKSwgY3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICBpZiAoaWR4ICE9IC0xKSBjbS5zZXRDdXJzb3Ioe2xpbmU6IGN1ci5saW5lLCBjaDogaWR4fSk7CiAgfQoKICBmdW5jdGlvbiBkZWxUaWxsQ2hhcihjbSwgY0hhciwgbW90aW9uX29wdGlvbnMpIHsKICAgIC8vIGRlbGV0ZSB0ZXh0IGluIHRoaXMgbGluZSwgdW50aWxsIGNIYXIgaXMgbWV0LAogICAgLy8gYXMgZm91bmQgYnkgY2hhcklkeEluTGluZS4KICAgIC8vIElmIGNoYXIgaXMgbm90IGZvdW5kIG9uIHRoaXMgbGluZSwgZG8gbm90aGluZwogICAgdmFyIGlkeCA9IGNoYXJJZHhJbkxpbmUoY20sIGNIYXIsIG1vdGlvbl9vcHRpb25zKTsKICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKICAgIGlmIChpZHggIT09IC0xKSB7CiAgICAgIGlmIChtb3Rpb25fb3B0aW9ucy5mb3J3YXJkKSB7CiAgICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2h9LCB7bGluZTogY3VyLmxpbmUsIGNoOiBpZHh9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIHtsaW5lOiBjdXIubGluZSwgY2g6IGlkeH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaH0pOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBlbnRlckluc2VydE1vZGUoY20pIHsKICAgIC8vIGVudGVyIGluc2VydCBtb2RlOiBzd2l0Y2ggbW9kZSBhbmQgY3Vyc29yCiAgICBwb3BDb3VudCgpOwogICAgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLWluc2VydCIpOwogIH0KCiAgLy8gbWFpbiBrZXltYXAKICB2YXIgbWFwID0gQ29kZU1pcnJvci5rZXlNYXAudmltID0gewogICAgLy8gUGlwZSAofCk7IFRPRE86IHNob3VsZCBiZSAqc2NyZWVuKiBjaGFycywgc28gbmVlZCBhIHV0aWwgZnVuY3Rpb24gdG8gdHVybiB0YWJzIGludG8gc3BhY2VzPwogICAgIid8JyI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIGNtLnNldEN1cnNvcihjbS5nZXRDdXJzb3IoKS5saW5lLCBwb3BDb3VudCgpIC0gMSwgdHJ1ZSk7CiAgICB9LAogICAgIkEiOiBmdW5jdGlvbihjbSkgewogICAgICBjbS5zZXRDdXJzb3IoY20uZ2V0Q3Vyc29yKCkubGluZSwgY20uZ2V0Q3Vyc29yKCkuY2grMSwgdHJ1ZSk7CiAgICAgIGVudGVySW5zZXJ0TW9kZShjbSk7CiAgICB9LAogICAgIlNoaWZ0LUEiOiBmdW5jdGlvbihjbSkgeyBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7IGVudGVySW5zZXJ0TW9kZShjbSk7fSwKICAgICJJIjogZnVuY3Rpb24oY20pIHsgZW50ZXJJbnNlcnRNb2RlKGNtKTt9LAogICAgIlNoaWZ0LUkiOiBmdW5jdGlvbihjbSkgeyBnb0xpbmVTdGFydFRleHQoY20pOyBlbnRlckluc2VydE1vZGUoY20pO30sCiAgICAiTyI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lRW5kKGNtKTsKICAgICAgQ29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50KGNtKTsKICAgICAgZW50ZXJJbnNlcnRNb2RlKGNtKTsKICAgIH0sCiAgICAiU2hpZnQtTyI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lU3RhcnQoY20pOwogICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsICJzdGFydCIpOwogICAgICBjbS5pbmRlbnRMaW5lKGNtLmdldEN1cnNvcigpLmxpbmUpOwogICAgICBlbnRlckluc2VydE1vZGUoY20pOwogICAgfSwKICAgICJHIjogZnVuY3Rpb24oY20pIHsgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLXByZWZpeC1nIik7fSwKICAgICJTaGlmdC1EIjogZnVuY3Rpb24oY20pIHsKICAgICAgLy8gY29tbWVudGVkIG91dCB2ZXJpb25zIHdvcmtzLCBidXQgSSBsZWZ0IG9yaWdpbmFsLCBjYXVzZSBtYXliZQogICAgICAvLyBJIGRvbid0IGtub3cgdmltIGVub3V0aCB0byBzZWUgd2hhdCBpdCBkb2VzCiAgICAgIC8qIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgdmFyIGYgPSB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2h9LCB0ID0ge2xpbmU6IGN1ci5saW5lfTsKICAgICAgcHVzaEluQnVmZmVyKGNtLmdldFJhbmdlKGYsIHQpKTsKICAgICAgKi8KICAgICAgZW1wdHlCdWZmZXIoKTsKICAgICAgbWFya1siU2hpZnQtRCJdID0gY20uZ2V0Q3Vyc29yKGZhbHNlKS5saW5lOwogICAgICBjbS5zZXRDdXJzb3IoY20uZ2V0Q3Vyc29yKHRydWUpLmxpbmUpOwogICAgICBkZWxUaWxsTWFyayhjbSwiU2hpZnQtRCIpOyBtYXJrID0gW107CiAgICB9LAoKICAgICJTIjogZnVuY3Rpb24gKGNtKSB7CiAgICAgIGNvdW50VGltZXMoZnVuY3Rpb24gKF9jbSkgewogICAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMuZGVsQ2hhclJpZ2h0KF9jbSk7CiAgICAgIH0pKGNtKTsKICAgICAgZW50ZXJJbnNlcnRNb2RlKGNtKTsKICAgIH0sCiAgICAiTSI6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLXByZWZpeC1tIik7IG1hcmsgPSBbXTt9LAogICAgIlkiOiBmdW5jdGlvbihjbSkge2NtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1wcmVmaXgteSIpOyBlbXB0eUJ1ZmZlcigpOyB5YW5rID0gMDt9LAogICAgIlNoaWZ0LVkiOiBmdW5jdGlvbihjbSkgewogICAgICBlbXB0eUJ1ZmZlcigpOwogICAgICBtYXJrWyJTaGlmdC1EIl0gPSBjbS5nZXRDdXJzb3IoZmFsc2UpLmxpbmU7CiAgICAgIGNtLnNldEN1cnNvcihjbS5nZXRDdXJzb3IodHJ1ZSkubGluZSk7CiAgICAgIHlhbmtUaWxsTWFyayhjbSwiU2hpZnQtRCIpOyBtYXJrID0gW107CiAgICB9LAogICAgIi8iOiBmdW5jdGlvbihjbSkge3ZhciBmID0gQ29kZU1pcnJvci5jb21tYW5kcy5maW5kOyBmICYmIGYoY20pOyBzZGlyID0gImYiO30sCiAgICAiJz8nIjogZnVuY3Rpb24oY20pIHsKICAgICAgdmFyIGYgPSBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmQ7CiAgICAgIGlmIChmKSB7IGYoY20pOyBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmRQcmV2KGNtKTsgc2RpciA9ICJyIjsgfQogICAgfSwKICAgICJOIjogZnVuY3Rpb24oY20pIHsKICAgICAgdmFyIGZuID0gQ29kZU1pcnJvci5jb21tYW5kcy5maW5kTmV4dDsKICAgICAgaWYgKGZuKSBzZGlyICE9ICJyIiA/IGZuKGNtKSA6IENvZGVNaXJyb3IuY29tbWFuZHMuZmluZFByZXYoY20pOwogICAgfSwKICAgICJTaGlmdC1OIjogZnVuY3Rpb24oY20pIHsKICAgICAgdmFyIGZuID0gQ29kZU1pcnJvci5jb21tYW5kcy5maW5kTmV4dDsKICAgICAgaWYgKGZuKSBzZGlyICE9ICJyIiA/IENvZGVNaXJyb3IuY29tbWFuZHMuZmluZFByZXYoY20pIDogZm4uZmluZE5leHQoY20pOwogICAgfSwKICAgICJTaGlmdC1HIjogZnVuY3Rpb24oY20pIHsKICAgICAgY291bnQgPT0gIiIgPyBjbS5zZXRDdXJzb3IoY20ubGluZUNvdW50KCkpIDogY20uc2V0Q3Vyc29yKHBhcnNlSW50KGNvdW50LCAxMCktMSk7CiAgICAgIHBvcENvdW50KCk7CiAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lU3RhcnQoY20pOwogICAgfSwKICAgIG5vZmFsbHRocm91Z2g6IHRydWUsIHN0eWxlOiAiZmF0LWN1cnNvciIKICB9OwoKICAvLyBzdGFuZGFyZCBtb2RlIHN3aXRjaGluZwogIGl0ZXJMaXN0KFsiZCIsICJ0IiwgIlQiLCAiZiIsICJGIiwgImMiLCAiciJdLAogICAgICBmdW5jdGlvbiAoY2gpIHsKICAgICAgICBDb2RlTWlycm9yLmtleU1hcC52aW1bdG9Db21ibyhjaCldID0gZnVuY3Rpb24gKGNtKSB7CiAgICAgICAgICBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0tcHJlZml4LSIgKyBjaCk7CiAgICAgICAgICBlbXB0eUJ1ZmZlcigpOwogICAgICAgIH07CiAgICAgIH0pOwoKICBmdW5jdGlvbiBhZGRDb3VudEJpbmRpbmdzKGtleU1hcCkgewogICAgLy8gQWRkIGJpbmRpbmdzIGZvciBudW1iZXIga2V5cwogICAga2V5TWFwWyIwIl0gPSBmdW5jdGlvbihjbSkgewogICAgICBjb3VudC5sZW5ndGggPiAwID8gcHVzaENvdW50RGlnaXQoIjAiKShjbSkgOiBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZVN0YXJ0KGNtKTsKICAgIH07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IDEwOyArK2kpIGtleU1hcFtpXSA9IHB1c2hDb3VudERpZ2l0KGkpOwogIH0KICBhZGRDb3VudEJpbmRpbmdzKENvZGVNaXJyb3Iua2V5TWFwLnZpbSk7CgogIC8vIG1haW4gbnVtIGtleW1hcAogIC8vIEFkZCBiaW5kaW5ncyB0aGF0IGFyZSBpbmZsdWVuY2VkIGJ5IG51bWJlciBrZXlzCiAgaXRlck9iaih7CiAgICAiTGVmdCI6ICJnb0NvbHVtbkxlZnQiLCAiUmlnaHQiOiAiZ29Db2x1bW5SaWdodCIsCiAgICAiRG93biI6ICJnb0xpbmVEb3duIiwgIlVwIjogImdvTGluZVVwIiwgIkJhY2tzcGFjZSI6ICJnb0NoYXJMZWZ0IiwKICAgICJTcGFjZSI6ICJnb0NoYXJSaWdodCIsCiAgICAiWCI6IGZ1bmN0aW9uKGNtKSB7Q29kZU1pcnJvci5jb21tYW5kcy5kZWxDaGFyUmlnaHQoY20pO30sCiAgICAiUCI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKS5saW5lOwogICAgICBpZiAoYnVmIT0gIiIpIHsKICAgICAgICBpZiAoYnVmWzBdID09ICJcbiIpIENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lRW5kKGNtKTsKICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoYnVmLCBjbS5nZXRDdXJzb3IoKSk7CiAgICAgIH0KICAgIH0sCiAgICAiU2hpZnQtWCI6IGZ1bmN0aW9uKGNtKSB7Q29kZU1pcnJvci5jb21tYW5kcy5kZWxDaGFyTGVmdChjbSk7fSwKICAgICJTaGlmdC1KIjogZnVuY3Rpb24oY20pIHtqb2luTGluZU5leHQoY20pO30sCiAgICAiU2hpZnQtUCI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKS5saW5lOwogICAgICBpZiAoYnVmIT0gIiIpIHsKICAgICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZVVwKGNtKTsKICAgICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7CiAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihidWYsICJlbmQiKTsKICAgICAgfQogICAgICBjbS5zZXRDdXJzb3IoY3VyKzEpOwogICAgfSwKICAgICInficiOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGNIYXIgPSBjbS5nZXRSYW5nZSh7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2h9LCB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2grMX0pOwogICAgICBjSGFyID0gY0hhciAhPSBjSGFyLnRvTG93ZXJDYXNlKCkgPyBjSGFyLnRvTG93ZXJDYXNlKCkgOiBjSGFyLnRvVXBwZXJDYXNlKCk7CiAgICAgIGNtLnJlcGxhY2VSYW5nZShjSGFyLCB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2h9LCB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2grMX0pOwogICAgICBjbS5zZXRDdXJzb3IoY3VyLmxpbmUsIGN1ci5jaCsxKTsKICAgIH0sCiAgICAiQ3RybC1CIjogZnVuY3Rpb24oY20pIHtDb2RlTWlycm9yLmNvbW1hbmRzLmdvUGFnZVVwKGNtKTt9LAogICAgIkN0cmwtRiI6IGZ1bmN0aW9uKGNtKSB7Q29kZU1pcnJvci5jb21tYW5kcy5nb1BhZ2VEb3duKGNtKTt9LAogICAgIkN0cmwtUCI6ICJnb0xpbmVVcCIsICJDdHJsLU4iOiAiZ29MaW5lRG93biIsCiAgICAiVSI6ICJ1bmRvIiwgIkN0cmwtUiI6ICJyZWRvIgogIH0sIGZ1bmN0aW9uKGtleSwgY21kKSB7IG1hcFtrZXldID0gY291bnRUaW1lcyhjbWQpOyB9KTsKCiAgLy8gZW1wdHkga2V5IG1hcHMKICBpdGVyTGlzdChbCiAgICAgICJ2aW0tcHJlZml4LWQnIiwKICAgICAgInZpbS1wcmVmaXgteSciLAogICAgICAidmltLXByZWZpeC1kZiIsCiAgICAgICJ2aW0tcHJlZml4LWRGIiwKICAgICAgInZpbS1wcmVmaXgtZHQiLAogICAgICAidmltLXByZWZpeC1kVCIsCiAgICAgICJ2aW0tcHJlZml4LWMiLAogICAgICAidmltLXByZWZpeC1jZiIsCiAgICAgICJ2aW0tcHJlZml4LWNGIiwKICAgICAgInZpbS1wcmVmaXgtY3QiLAogICAgICAidmltLXByZWZpeC1jVCIsCiAgICAgICJ2aW0tcHJlZml4LSIsCiAgICAgICJ2aW0tcHJlZml4LWYiLAogICAgICAidmltLXByZWZpeC1GIiwKICAgICAgInZpbS1wcmVmaXgtdCIsCiAgICAgICJ2aW0tcHJlZml4LVQiLAogICAgICAidmltLXByZWZpeC1yIiwKICAgICAgInZpbS1wcmVmaXgtbSIKICAgICAgXSwKICAgICAgZnVuY3Rpb24gKHByZWZpeCkgewogICAgICAgIENvZGVNaXJyb3Iua2V5TWFwW3ByZWZpeF0gPSB7CiAgICAgICAgICBhdXRvOiAidmltIiwKICAgICAgICAgIG5vZmFsbHRocm91Z2g6IHRydWUsCiAgICAgICAgICBzdHlsZTogImZhdC1jdXJzb3IiCiAgICAgICAgfTsKICAgICAgfSk7CgogIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LWciXSA9IHsKICAgICJFIjogY291bnRUaW1lcyhmdW5jdGlvbihjbSkgeyBjbS5zZXRDdXJzb3IobW92ZVRvV29yZChjbSwgd29yZCwgLTEsIDEsICJzdGFydCIpKTt9KSwKICAgICJTaGlmdC1FIjogY291bnRUaW1lcyhmdW5jdGlvbihjbSkgeyBjbS5zZXRDdXJzb3IobW92ZVRvV29yZChjbSwgYmlnV29yZCwgLTEsIDEsICJzdGFydCIpKTt9KSwKICAgICJHIjogZnVuY3Rpb24gKGNtKSB7IGNtLnNldEN1cnNvcih7bGluZTogMCwgY2g6IGNtLmdldEN1cnNvcigpLmNofSk7fSwKICAgIGF1dG86ICJ2aW0iLCBub2ZhbGx0aHJvdWdoOiB0cnVlLCBzdHlsZTogImZhdC1jdXJzb3IiCiAgfTsKCiAgQ29kZU1pcnJvci5rZXlNYXBbInZpbS1wcmVmaXgtZCJdID0gewogICAgIkQiOiBjb3VudFRpbWVzKGZ1bmN0aW9uKGNtKSB7CiAgICAgIHB1c2hJbkJ1ZmZlcigiXG4iK2NtLmdldExpbmUoY20uZ2V0Q3Vyc29yKCkubGluZSkpOwogICAgICBjbS5yZW1vdmVMaW5lKGNtLmdldEN1cnNvcigpLmxpbmUpOwogICAgICBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0iKTsKICAgIH0pLAogICAgIiciOiBmdW5jdGlvbihjbSkgewogICAgICBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0tcHJlZml4LWQnIik7CiAgICAgIGVtcHR5QnVmZmVyKCk7CiAgICB9LAogICAgIkIiOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7CiAgICAgIHZhciBpbmRleCA9IGxpbmUubGFzdEluZGV4T2YoIiAiLCBjdXIuY2gpOwoKICAgICAgcHVzaEluQnVmZmVyKGxpbmUuc3Vic3RyaW5nKGluZGV4LCBjdXIuY2gpKTsKICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCB7bGluZTogY3VyLmxpbmUsIGNoOiBpbmRleH0sIGN1cik7CiAgICAgIGNtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbSIpOwogICAgfSwKICAgIG5vZmFsbHRocm91Z2g6IHRydWUsIHN0eWxlOiAiZmF0LWN1cnNvciIKICB9OwogIC8vIEZJWE1FIC0gZG9lcyBub3Qgd29yayBmb3IgYmluZGluZ3MgbGlrZSAiZDNlIgogIGFkZENvdW50QmluZGluZ3MoQ29kZU1pcnJvci5rZXlNYXBbInZpbS1wcmVmaXgtZCJdKTsKCiAgQ29kZU1pcnJvci5rZXlNYXBbInZpbS1wcmVmaXgtYyJdID0gewogICAgIkIiOiBmdW5jdGlvbiAoY20pIHsKICAgICAgY291bnRUaW1lcygiZGVsV29yZExlZnQiKShjbSk7CiAgICAgIGVudGVySW5zZXJ0TW9kZShjbSk7CiAgICB9LAogICAgIkMiOiBmdW5jdGlvbiAoY20pIHsKICAgICAgaXRlclRpbWVzKGZ1bmN0aW9uIChpLCBsYXN0KSB7CiAgICAgICAgQ29kZU1pcnJvci5jb21tYW5kcy5kZWxldGVMaW5lKGNtKTsKICAgICAgICBpZiAoaSkgewogICAgICAgICAgQ29kZU1pcnJvci5jb21tYW5kcy5kZWxDaGFyUmlnaHQoY20pOwogICAgICAgICAgaWYgKGxhc3QpIENvZGVNaXJyb3IuY29tbWFuZHMuZGVsZXRlTGluZShjbSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgZW50ZXJJbnNlcnRNb2RlKGNtKTsKICAgIH0sCiAgICBub2ZhbGx0aHJvdWdoOiB0cnVlLCBzdHlsZTogImZhdC1jdXJzb3IiCiAgfTsKCiAgaXRlckxpc3QoWyJ2aW0tcHJlZml4LWQiLCAidmltLXByZWZpeC1jIiwgInZpbS1wcmVmaXgtIl0sIGZ1bmN0aW9uIChwcmVmaXgpIHsKICAgIGl0ZXJMaXN0KFsiZiIsICJGIiwgIlQiLCAidCJdLAogICAgICBmdW5jdGlvbiAoY2gpIHsKICAgICAgICBDb2RlTWlycm9yLmtleU1hcFtwcmVmaXhdW3RvQ29tYm8oY2gpXSA9IGZ1bmN0aW9uIChjbSkgewogICAgICAgICAgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCBwcmVmaXggKyBjaCk7CiAgICAgICAgICBlbXB0eUJ1ZmZlcigpOwogICAgICAgIH07CiAgICAgIH0pOwogIH0pOwoKICB2YXIgTU9USU9OX09QVElPTlMgPSB7CiAgICAidCI6IHtpbmNsdXNpdmU6IGZhbHNlLCBmb3J3YXJkOiB0cnVlfSwKICAgICJmIjoge2luY2x1c2l2ZTogdHJ1ZSwgIGZvcndhcmQ6IHRydWV9LAogICAgIlQiOiB7aW5jbHVzaXZlOiBmYWxzZSwgZm9yd2FyZDogZmFsc2V9LAogICAgIkYiOiB7aW5jbHVzaXZlOiB0cnVlLCAgZm9yd2FyZDogZmFsc2V9CiAgfTsKCiAgZnVuY3Rpb24gc2V0dXBQcmVmaXhCaW5kaW5nRm9yS2V5KG0pIHsKICAgIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LW0iXVttXSA9IGZ1bmN0aW9uKGNtKSB7CiAgICAgIG1hcmtbbV0gPSBjbS5nZXRDdXJzb3IoKS5saW5lOwogICAgfTsKICAgIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LWQnIl1bbV0gPSBmdW5jdGlvbihjbSkgewogICAgICBkZWxUaWxsTWFyayhjbSxtKTsKICAgIH07CiAgICBDb2RlTWlycm9yLmtleU1hcFsidmltLXByZWZpeC15JyJdW21dID0gZnVuY3Rpb24oY20pIHsKICAgICAgeWFua1RpbGxNYXJrKGNtLG0pOwogICAgfTsKICAgIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LXIiXVttXSA9IGZ1bmN0aW9uIChjbSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgIGNtLnJlcGxhY2VSYW5nZSh0b0xldHRlcihtKSwKICAgICAgICAgIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaH0sCiAgICAgICAgICB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2ggKyAxfSk7CiAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMuZ29Db2x1bW5MZWZ0KGNtKTsKICAgIH07CiAgICAvLyBhbGwgY29tbWFuZHMsIHJlbGF0ZWQgdG8gbW90aW9ucyB0aWxsIGNoYXIgaW4gbGluZQogICAgaXRlck9iaihNT1RJT05fT1BUSU9OUywgZnVuY3Rpb24gKGNoLCBvcHRpb25zKSB7CiAgICAgIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LSIgKyBjaF1bbV0gPSBmdW5jdGlvbihjbSkgewogICAgICAgIG1vdmVUaWxsQ2hhcihjbSwgbSwgb3B0aW9ucyk7CiAgICAgIH07CiAgICAgIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LWQiICsgY2hdW21dID0gZnVuY3Rpb24oY20pIHsKICAgICAgICBkZWxUaWxsQ2hhcihjbSwgbSwgb3B0aW9ucyk7CiAgICAgIH07CiAgICAgIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LWMiICsgY2hdW21dID0gZnVuY3Rpb24oY20pIHsKICAgICAgICBkZWxUaWxsQ2hhcihjbSwgbSwgb3B0aW9ucyk7CiAgICAgICAgZW50ZXJJbnNlcnRNb2RlKGNtKTsKICAgICAgfTsKICAgIH0pOwogIH0KICBmb3IgKHZhciBpID0gNjU7IGkgPCA2NSArIDI2OyBpKyspIHsgLy8gdXBwZXJjYXNlIGFscGhhYmV0IGNoYXIgY29kZXMKICAgIHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7CiAgICBzZXR1cFByZWZpeEJpbmRpbmdGb3JLZXkodG9Db21ibyhjaCkpOwogICAgc2V0dXBQcmVmaXhCaW5kaW5nRm9yS2V5KHRvQ29tYm8oY2gudG9Mb3dlckNhc2UoKSkpOwogIH0KICBpdGVyTGlzdChTUEVDSUFMX1NZTUJPTFMsIGZ1bmN0aW9uIChjaCkgewogICAgc2V0dXBQcmVmaXhCaW5kaW5nRm9yS2V5KHRvQ29tYm8oY2gpKTsKICB9KTsKICBzZXR1cFByZWZpeEJpbmRpbmdGb3JLZXkoIlNwYWNlIik7CgogIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LXkiXSA9IHsKICAgICJZIjogY291bnRUaW1lcyhmdW5jdGlvbihjbSkgeyBwdXNoSW5CdWZmZXIoIlxuIitjbS5nZXRMaW5lKGNtLmdldEN1cnNvcigpLmxpbmUreWFuaykpOyB5YW5rKys7IH0pLAogICAgIiciOiBmdW5jdGlvbihjbSkge2NtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1wcmVmaXgteSciKTsgZW1wdHlCdWZmZXIoKTt9LAogICAgbm9mYWxsdGhyb3VnaDogdHJ1ZSwgc3R5bGU6ICJmYXQtY3Vyc29yIgogIH07CgogIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0taW5zZXJ0Il0gPSB7CiAgICAvLyBUT0RPOiBvdmVycmlkZSBuYXZpZ2F0aW9uIGtleXMgc28gdGhhdCBFc2Mgd2lsbCBjYW5jZWwgYXV0b21hdGljIGluZGVudGF0aW9uIGZyb20gbywgTywgaV88Q1I+CiAgICAiRXNjIjogZnVuY3Rpb24oY20pIHsKICAgICAgY20uc2V0Q3Vyc29yKGNtLmdldEN1cnNvcigpLmxpbmUsIGNtLmdldEN1cnNvcigpLmNoLTEsIHRydWUpOwogICAgICBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0iKTsKICAgIH0sCiAgICAiQ3RybC1OIjogImF1dG9jb21wbGV0ZSIsCiAgICAiQ3RybC1QIjogImF1dG9jb21wbGV0ZSIsCiAgICBmYWxsdGhyb3VnaDogWyJkZWZhdWx0Il0KICB9OwoKICBmdW5jdGlvbiBmaW5kTWF0Y2hlZFN5bWJvbChjbSwgY3VyLCBzeW1iKSB7CiAgICB2YXIgbGluZSA9IGN1ci5saW5lOwogICAgdmFyIHN5bWIgPSBzeW1iID8gc3ltYiA6IGNtLmdldExpbmUobGluZSlbY3VyLmNoXTsKCiAgICAvLyBBcmUgd2UgYXQgdGhlIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyCiAgICB2YXIgZm9yd2FyZHMgPSBbJygnLCAnWycsICd7J10uaW5kZXhPZihzeW1iKSAhPSAtMTsKCiAgICB2YXIgcmV2ZXJzZVN5bWIgPSAoZnVuY3Rpb24oc3ltKSB7CiAgICAgIHN3aXRjaCAoc3ltKSB7CiAgICAgICAgY2FzZSAnKCcgOiByZXR1cm4gJyknOwogICAgICAgIGNhc2UgJ1snIDogcmV0dXJuICddJzsKICAgICAgICBjYXNlICd7JyA6IHJldHVybiAnfSc7CiAgICAgICAgY2FzZSAnKScgOiByZXR1cm4gJygnOwogICAgICAgIGNhc2UgJ10nIDogcmV0dXJuICdbJzsKICAgICAgICBjYXNlICd9JyA6IHJldHVybiAneyc7CiAgICAgICAgZGVmYXVsdCA6IHJldHVybiBudWxsOwogICAgICB9CiAgICB9KShzeW1iKTsKCiAgICAvLyBDb3VsZG4ndCBmaW5kIGEgbWF0Y2hpbmcgc3ltYm9sLCBhYm9ydAogICAgaWYgKHJldmVyc2VTeW1iID09IG51bGwpIHJldHVybiBjdXI7CgogICAgLy8gVHJhY2tpbmcgb3VyIGltYmFsYW5jZSBpbiBvcGVuL2Nsb3Npbmcgc3ltYm9scy4gQW4gb3BlbmluZyBzeW1ib2wgd2lpIGJlCiAgICAvLyB0aGUgZmlyc3QgdGhpbmcgd2UgcGljayB1cCBpZiBtb3ZpbmcgZm9yd2FyZCwgdGhpcyBpc24ndCB0cnVlIG1vdmluZyBiYWNrd2FyZHMKICAgIHZhciBkaXNCYWwgPSBmb3J3YXJkcyA/IDAgOiAxOwoKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChsaW5lID09IGN1ci5saW5lKSB7CiAgICAgICAgLy8gRmlyc3QgcGFzcywgZG8gc29tZSBzcGVjaWFsIHN0dWZmCiAgICAgICAgdmFyIGN1cnJMaW5lID0gIGZvcndhcmRzID8gY20uZ2V0TGluZShsaW5lKS5zdWJzdHIoY3VyLmNoKS5zcGxpdCgnJykgOiBjbS5nZXRMaW5lKGxpbmUpLnN1YnN0cigwLGN1ci5jaCkuc3BsaXQoJycpLnJldmVyc2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgY3VyckxpbmUgPSAgZm9yd2FyZHMgPyBjbS5nZXRMaW5lKGxpbmUpLnNwbGl0KCcnKSA6IGNtLmdldExpbmUobGluZSkuc3BsaXQoJycpLnJldmVyc2UoKTsKICAgICAgfQoKICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyAgaW5kZXggPCBjdXJyTGluZS5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICBpZiAoY3VyckxpbmVbaW5kZXhdID09IHN5bWIpIGRpc0JhbCsrOwogICAgICAgIGVsc2UgaWYgKGN1cnJMaW5lW2luZGV4XSA9PSByZXZlcnNlU3ltYikgZGlzQmFsLS07CgogICAgICAgIGlmIChkaXNCYWwgPT0gMCkgewogICAgICAgICAgaWYgKGZvcndhcmRzICYmIGN1ci5saW5lID09IGxpbmUpIHJldHVybiB7bGluZTogbGluZSwgY2g6IGluZGV4ICsgY3VyLmNofTsKICAgICAgICAgIGVsc2UgaWYgKGZvcndhcmRzKSByZXR1cm4ge2xpbmU6IGxpbmUsIGNoOiBpbmRleH07CiAgICAgICAgICBlbHNlIHJldHVybiB7bGluZTogbGluZSwgY2g6IGN1cnJMaW5lLmxlbmd0aCAtIGluZGV4IC0gMSB9OwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGZvcndhcmRzKSBsaW5lKys7CiAgICAgIGVsc2UgbGluZS0tOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2VsZWN0Q29tcGFuaW9uT2JqZWN0KGNtLCByZXZTeW1iLCBpbmNsdXNpdmUpIHsKICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKCiAgICB2YXIgZW5kID0gZmluZE1hdGNoZWRTeW1ib2woY20sIGN1ciwgcmV2U3ltYik7CiAgICB2YXIgc3RhcnQgPSBmaW5kTWF0Y2hlZFN5bWJvbChjbSwgZW5kKTsKICAgIHN0YXJ0LmNoICs9IGluY2x1c2l2ZSA/IDEgOiAwOwogICAgZW5kLmNoICs9IGluY2x1c2l2ZSA/IDAgOiAxOwoKICAgIHJldHVybiB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH07CiAgfQoKICAvLyBUaGVzZSBhcmUgb3VyIG1vdGlvbiBjb21tYW5kcyB0byBiZSB1c2VkIGZvciBuYXZpZ2F0aW9uIGFuZCBzZWxlY3Rpb24gd2l0aAogIC8vIGNlcnRpYW4gb3RoZXIgY29tbWFuZHMuIEFsbCBzaG91bGQgcmV0dXJuIGEgY3Vyc29yIG9iamVjdC4KICB2YXIgbW90aW9uTGlzdCA9IFsnQicsICdFJywgJ0onLCAnSycsICdIJywgJ0wnLCAnVycsICdTaGlmdC1XJywgIideJyIsICInJCciLCAiJyUnIiwgJ0VzYyddOwoKICBtb3Rpb25zID0gewogICAgJ0InOiBmdW5jdGlvbihjbSwgdGltZXMpIHsgcmV0dXJuIG1vdmVUb1dvcmQoY20sIHdvcmQsIC0xLCB0aW1lcyk7IH0sCiAgICAnU2hpZnQtQic6IGZ1bmN0aW9uKGNtLCB0aW1lcykgeyByZXR1cm4gbW92ZVRvV29yZChjbSwgYmlnV29yZCwgLTEsIHRpbWVzKTsgfSwKICAgICdFJzogZnVuY3Rpb24oY20sIHRpbWVzKSB7IHJldHVybiBtb3ZlVG9Xb3JkKGNtLCB3b3JkLCAxLCB0aW1lcywgJ2VuZCcpOyB9LAogICAgJ1NoaWZ0LUUnOiBmdW5jdGlvbihjbSwgdGltZXMpIHsgcmV0dXJuIG1vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIDEsIHRpbWVzLCAnZW5kJyk7IH0sCiAgICAnSic6IGZ1bmN0aW9uKGNtLCB0aW1lcykgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgIHJldHVybiB7bGluZTogY3VyLmxpbmUrdGltZXMsIGNoIDogY3VyLmNofTsKICAgIH0sCgogICAgJ0snOiBmdW5jdGlvbihjbSwgdGltZXMpIHsKICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpOwogICAgICByZXR1cm4ge2xpbmU6IGN1ci5saW5lLXRpbWVzLCBjaDogY3VyLmNofTsKICAgIH0sCgogICAgJ0gnOiBmdW5jdGlvbihjbSwgdGltZXMpIHsKICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpOwogICAgICByZXR1cm4ge2xpbmU6IGN1ci5saW5lLCBjaDogY3VyLmNoLXRpbWVzfTsKICAgIH0sCgogICAgJ0wnOiBmdW5jdGlvbihjbSwgdGltZXMpIHsKICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpOwogICAgICByZXR1cm4ge2xpbmU6IGN1ci5saW5lLCBjaDogY3VyLmNoK3RpbWVzfTsKICAgIH0sCiAgICAnVyc6IGZ1bmN0aW9uKGNtLCB0aW1lcykgeyByZXR1cm4gbW92ZVRvV29yZChjbSwgd29yZCwgMSwgdGltZXMpOyB9LAogICAgJ1NoaWZ0LVcnOiBmdW5jdGlvbihjbSwgdGltZXMpIHsgcmV0dXJuIG1vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIDEsIHRpbWVzKTsgfSwKICAgICInXiciOiBmdW5jdGlvbihjbSwgdGltZXMpIHsKICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpOwogICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUoY3VyLmxpbmUpLnNwbGl0KCcnKTsKCiAgICAgIC8vIEVtcHR5IGxpbmUgOm8KICAgICAgaWYgKGxpbmUubGVuZ3RoID09IDApIHJldHVybiBjdXI7CgogICAgICBmb3IgKHZhciBpbmRleCA9IDA7ICBpbmRleCA8IGxpbmUubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgaWYgKGxpbmVbaW5kZXhdLm1hdGNoKC9bXlxzXS8pKSByZXR1cm4ge2xpbmU6IGN1ci5saW5lLCBjaDogaW5kZXh9OwogICAgICB9CiAgICB9LAogICAgIickJyI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKTsKICAgICAgcmV0dXJuIHtsaW5lOiBjdXIubGluZSwgY2g6IGxpbmUubGVuZ3RofTsKICAgIH0sCiAgICAiJyUnIjogZnVuY3Rpb24oY20pIHsgcmV0dXJuIGZpbmRNYXRjaGVkU3ltYm9sKGNtLCBjbS5nZXRDdXJzb3IoKSk7IH0sCiAgICAiRXNjIiA6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIGNtLnNldE9wdGlvbigndmltJyk7CiAgICAgIHJlcHRUaW1lcyA9IDA7CgogICAgICByZXR1cm4gY20uZ2V0Q3Vyc29yKCk7CiAgICB9CiAgfTsKCiAgLy8gTWFwIG91ciBtb3ZlbWVudCBhY3Rpb25zIGVhY2ggb3BlcmF0b3IgYW5kIG5vbi1vcGVyYXRpb25hbCBtb3ZlbWVudAogIG1vdGlvbkxpc3QuZm9yRWFjaChmdW5jdGlvbihrZXksIGluZGV4LCBhcnJheSkgewogICAgQ29kZU1pcnJvci5rZXlNYXBbJ3ZpbS1wcmVmaXgtZCddW2tleV0gPSBmdW5jdGlvbihjbSkgewogICAgICAvLyBHZXQgb3VyIHNlbGVjdGVkIHJhbmdlCiAgICAgIHZhciBzdGFydCA9IGNtLmdldEN1cnNvcigpOwogICAgICB2YXIgZW5kID0gbW90aW9uc1trZXldKGNtLCByZXB0VGltZXMgPyByZXB0VGltZXMgOiAxKTsKCiAgICAgIC8vIFNldCBzd2FwIHZhciBpZiByYW5nZSBpcyBvZiBuZWdhdGl2ZSBsZW5ndGgKICAgICAgaWYgKChzdGFydC5saW5lID4gZW5kLmxpbmUpIHx8IChzdGFydC5saW5lID09IGVuZC5saW5lICYmIHN0YXJ0LmNoID4gZW5kLmNoKSkgdmFyIHN3YXAgPSB0cnVlOwoKICAgICAgLy8gVGFrZSBhY3Rpb24sIHN3aXRjaGluZyBzdGFydCBhbmQgZW5kIGlmIHN3YXAgdmFyIGlzIHNldAogICAgICBwdXNoSW5CdWZmZXIoY20uZ2V0UmFuZ2Uoc3dhcCA/IGVuZCA6IHN0YXJ0LCBzd2FwID8gc3RhcnQgOiBlbmQpKTsKICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBzd2FwID8gZW5kIDogc3RhcnQsIHN3YXAgPyBzdGFydCA6IGVuZCk7CgogICAgICAvLyBBbmQgY2xlYW4gdXAKICAgICAgcmVwdFRpbWVzID0gMDsKICAgICAgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltIik7CiAgICB9OwoKICAgIENvZGVNaXJyb3Iua2V5TWFwWyd2aW0tcHJlZml4LWMnXVtrZXldID0gZnVuY3Rpb24oY20pIHsKICAgICAgdmFyIHN0YXJ0ID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgIHZhciBlbmQgPSBtb3Rpb25zW2tleV0oY20sIHJlcHRUaW1lcyA/IHJlcHRUaW1lcyA6IDEpOwoKICAgICAgaWYgKChzdGFydC5saW5lID4gZW5kLmxpbmUpIHx8IChzdGFydC5saW5lID09IGVuZC5saW5lICYmIHN0YXJ0LmNoID4gZW5kLmNoKSkgdmFyIHN3YXAgPSB0cnVlOwogICAgICBwdXNoSW5CdWZmZXIoY20uZ2V0UmFuZ2Uoc3dhcCA/IGVuZCA6IHN0YXJ0LCBzd2FwID8gc3RhcnQgOiBlbmQpKTsKICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBzd2FwID8gZW5kIDogc3RhcnQsIHN3YXAgPyBzdGFydCA6IGVuZCk7CgogICAgICByZXB0VGltZXMgPSAwOwogICAgICBjbS5zZXRPcHRpb24oJ2tleU1hcCcsICd2aW0taW5zZXJ0Jyk7CiAgICB9OwoKICAgIENvZGVNaXJyb3Iua2V5TWFwWyd2aW0tcHJlZml4LXknXVtrZXldID0gZnVuY3Rpb24oY20pIHsKICAgICAgdmFyIHN0YXJ0ID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgIHZhciBlbmQgPSBtb3Rpb25zW2tleV0oY20sIHJlcHRUaW1lcyA/IHJlcHRUaW1lcyA6IDEpOwoKICAgICAgaWYgKChzdGFydC5saW5lID4gZW5kLmxpbmUpIHx8IChzdGFydC5saW5lID09IGVuZC5saW5lICYmIHN0YXJ0LmNoID4gZW5kLmNoKSkgdmFyIHN3YXAgPSB0cnVlOwogICAgICBwdXNoSW5CdWZmZXIoY20uZ2V0UmFuZ2Uoc3dhcCA/IGVuZCA6IHN0YXJ0LCBzd2FwID8gc3RhcnQgOiBlbmQpKTsKCiAgICAgIHJlcHRUaW1lcyA9IDA7CiAgICAgIGNtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbSIpOwogICAgfTsKCiAgICBDb2RlTWlycm9yLmtleU1hcFsndmltJ11ba2V5XSA9IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBjdXIgPSBtb3Rpb25zW2tleV0oY20sIHJlcHRUaW1lcyA/IHJlcHRUaW1lcyA6IDEpOwogICAgICBjbS5zZXRDdXJzb3IoY3VyLmxpbmUsIGN1ci5jaCk7CgogICAgICByZXB0VGltZXMgPSAwOwogICAgfTsKICB9KTsKCiAgdmFyIG51bXMgPSBbMSwyLDMsNCw1LDYsNyw4LDldOwogIG51bXMuZm9yRWFjaChmdW5jdGlvbihrZXksIGluZGV4LCBhcnJheSkgewogICAgQ29kZU1pcnJvci5rZXlNYXBbJ3ZpbSddW2tleV0gPSBmdW5jdGlvbiAoY20pIHsKICAgICAgcmVwdFRpbWVzID0gKHJlcHRUaW1lcyAqIDEwKSArIGtleTsKICAgIH07CiAgICBDb2RlTWlycm9yLmtleU1hcFsndmltLXByZWZpeC1kJ11ba2V5XSA9IGZ1bmN0aW9uIChjbSkgewogICAgICByZXB0VGltZXMgPSAocmVwdFRpbWVzICogMTApICsga2V5OwogICAgfTsKICAgIENvZGVNaXJyb3Iua2V5TWFwWyd2aW0tcHJlZml4LXknXVtrZXldID0gZnVuY3Rpb24gKGNtKSB7CiAgICAgIHJlcHRUaW1lcyA9IChyZXB0VGltZXMgKiAxMCkgKyBrZXk7CiAgICB9OwogICAgQ29kZU1pcnJvci5rZXlNYXBbJ3ZpbS1wcmVmaXgtYyddW2tleV0gPSBmdW5jdGlvbiAoY20pIHsKICAgICAgcmVwdFRpbWVzID0gKHJlcHRUaW1lcyAqIDEwKSArIGtleTsKICAgIH07CiAgfSk7CgogIC8vIENyZWF0ZSBvdXIga2V5bWFwcyBmb3IgZWFjaCBvcGVyYXRvciBhbmQgbWFrZSB4YSBhbmQgeGkgd2hlcmUgeCBpcyBhbiBvcGVyYXRvcgogIC8vIGNoYW5nZSB0byB0aGUgY29ycm9zcG9uZGluZyBrZXltYXAKICB2YXIgb3BlcmF0b3JzID0gWydkJywgJ3knLCAnYyddOwogIG9wZXJhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaW5kZXgsIGFycmF5KSB7CiAgICBDb2RlTWlycm9yLmtleU1hcFsndmltLXByZWZpeC0nK2tleSsnYSddID0gewogICAgICBhdXRvOiAndmltJywgbm9mYWxsdGhyb3VnaDogdHJ1ZSwgc3R5bGU6ICJmYXQtY3Vyc29yIgogICAgfTsKICAgIENvZGVNaXJyb3Iua2V5TWFwWyd2aW0tcHJlZml4LScra2V5KydpJ10gPSB7CiAgICAgIGF1dG86ICd2aW0nLCBub2ZhbGx0aHJvdWdoOiB0cnVlLCBzdHlsZTogImZhdC1jdXJzb3IiCiAgICB9OwoKICAgIENvZGVNaXJyb3Iua2V5TWFwWyd2aW0tcHJlZml4LScra2V5XVsnQSddID0gZnVuY3Rpb24oY20pIHsKICAgICAgcmVwdFRpbWVzID0gMDsKICAgICAgY20uc2V0T3B0aW9uKCdrZXlNYXAnLCAndmltLXByZWZpeC0nICsga2V5ICsgJ2EnKTsKICAgIH07CgogICAgQ29kZU1pcnJvci5rZXlNYXBbJ3ZpbS1wcmVmaXgtJytrZXldWydJJ10gPSBmdW5jdGlvbihjbSkgewogICAgICByZXB0VGltZXMgPSAwOwogICAgICBjbS5zZXRPcHRpb24oJ2tleU1hcCcsICd2aW0tcHJlZml4LScgKyBrZXkgKyAnaScpOwogICAgfTsKICB9KTsKCiAgZnVuY3Rpb24gcmVnZXhMYXN0SW5kZXhPZihzdHJpbmcsIHBhdHRlcm4sIHN0YXJ0SW5kZXgpIHsKICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4ID09IG51bGwgPyBzdHJpbmcubGVuZ3RoIDogc3RhcnRJbmRleDsgaSA+PSAwOyAtLWkpCiAgICAgIGlmIChwYXR0ZXJuLnRlc3Qoc3RyaW5nLmNoYXJBdChpKSkpIHJldHVybiBpOwogICAgcmV0dXJuIC0xOwogIH0KCiAgLy8gQ3JlYXRlIG91ciB0ZXh0IG9iamVjdCBmdW5jdGlvbnMuIFRoZXkgd29yayBzaW1pbGFyIHRvIG1vdGlvbnMgYnV0IHRoZXkKICAvLyByZXR1cm4gYSBzdGFydCBjdXJzb3IgYXMgd2VsbAogIHZhciB0ZXh0T2JqZWN0TGlzdCA9IFsnVycsICdTaGlmdC1bJywgJ1NoaWZ0LTknLCAnWyddOwogIHZhciB0ZXh0T2JqZWN0cyA9IHsKICAgICdXJzogZnVuY3Rpb24oY20sIGluY2x1c2l2ZSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7CgogICAgICB2YXIgbGluZV90b19jaGFyID0gbmV3IFN0cmluZyhsaW5lLnN1YnN0cmluZygwLCBjdXIuY2gpKTsKICAgICAgdmFyIHN0YXJ0ID0gcmVnZXhMYXN0SW5kZXhPZihsaW5lX3RvX2NoYXIsIC9bXmEtekEtWjAtOV0vKSArIDE7CiAgICAgIHZhciBlbmQgPSBtb3Rpb25zWyJFIl0oY20sIDEpIDsKCiAgICAgIGVuZC5jaCArPSBpbmNsdXNpdmUgPyAxIDogMCA7CiAgICAgIHJldHVybiB7c3RhcnQ6IHtsaW5lOiBjdXIubGluZSwgY2g6IHN0YXJ0fSwgZW5kOiBlbmQgfTsKICAgIH0sCiAgICAnU2hpZnQtWyc6IGZ1bmN0aW9uKGNtLCBpbmNsdXNpdmUpIHsgcmV0dXJuIHNlbGVjdENvbXBhbmlvbk9iamVjdChjbSwgJ30nLCBpbmNsdXNpdmUpOyB9LAogICAgJ1NoaWZ0LTknOiBmdW5jdGlvbihjbSwgaW5jbHVzaXZlKSB7IHJldHVybiBzZWxlY3RDb21wYW5pb25PYmplY3QoY20sICcpJywgaW5jbHVzaXZlKTsgfSwKICAgICdbJzogZnVuY3Rpb24oY20sIGluY2x1c2l2ZSkgeyByZXR1cm4gc2VsZWN0Q29tcGFuaW9uT2JqZWN0KGNtLCAnXScsIGluY2x1c2l2ZSk7IH0KICB9OwoKICAvLyBPbmUgZnVuY3Rpb24gdG8gaGFuZGxlIGFsbCBvcGVyYXRpb24gdXBvbiB0ZXh0IG9iamVjdHMuIEtpbmRhIGZ1bmt5IGJ1dCBpdCB3b3JrcwogIC8vIGJldHRlciB0aGFuIHJld3JpdGluZyB0aGlzIGNvZGUgc2l4IHRpbWVzCiAgZnVuY3Rpb24gdGV4dE9iamVjdE1hbmlwdWxhdGlvbihjbSwgb2JqZWN0LCByZW1vdmUsIGluc2VydCwgaW5jbHVzaXZlKSB7CiAgICAvLyBPYmplY3QgaXMgdGhlIHRleHQgb2JqZWN0LCBkZWxldGUgb2JqZWN0IGlmIHJlbW92ZSBpcyB0cnVlLCBlbnRlciBpbnNlcnQKICAgIC8vIG1vZGUgaWYgaW5zZXJ0IGlzIHRydWUsIGluY2x1c2l2ZSBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGkKICAgIHZhciB0bXAgPSB0ZXh0T2JqZWN0c1tvYmplY3RdKGNtLCBpbmNsdXNpdmUpOwogICAgdmFyIHN0YXJ0ID0gdG1wLnN0YXJ0OwogICAgdmFyIGVuZCA9IHRtcC5lbmQ7CgogICAgaWYgKChzdGFydC5saW5lID4gZW5kLmxpbmUpIHx8IChzdGFydC5saW5lID09IGVuZC5saW5lICYmIHN0YXJ0LmNoID4gZW5kLmNoKSkgdmFyIHN3YXAgPSB0cnVlIDsKCiAgICBwdXNoSW5CdWZmZXIoY20uZ2V0UmFuZ2Uoc3dhcCA/IGVuZCA6IHN0YXJ0LCBzd2FwID8gc3RhcnQgOiBlbmQpKTsKICAgIGlmIChyZW1vdmUpIGNtLnJlcGxhY2VSYW5nZSgiIiwgc3dhcCA/IGVuZCA6IHN0YXJ0LCBzd2FwID8gc3RhcnQgOiBlbmQpOwogICAgaWYgKGluc2VydCkgY20uc2V0T3B0aW9uKCdrZXlNYXAnLCAndmltLWluc2VydCcpOwogIH0KCiAgLy8gQW5kIGZpbmFsbHkgYnVpbGQgdGhlIGtleW1hcHMgdXAgZnJvbSB0aGUgdGV4dCBvYmplY3RzCiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0T2JqZWN0TGlzdC5sZW5ndGg7ICsraSkgewogICAgdmFyIG9iamVjdCA9IHRleHRPYmplY3RMaXN0W2ldOwogICAgKGZ1bmN0aW9uKG9iamVjdCkgewogICAgICBDb2RlTWlycm9yLmtleU1hcFsndmltLXByZWZpeC1kaSddW29iamVjdF0gPSBmdW5jdGlvbihjbSkgeyB0ZXh0T2JqZWN0TWFuaXB1bGF0aW9uKGNtLCBvYmplY3QsIHRydWUsIGZhbHNlLCBmYWxzZSk7IH07CiAgICAgIENvZGVNaXJyb3Iua2V5TWFwWyd2aW0tcHJlZml4LWRhJ11bb2JqZWN0XSA9IGZ1bmN0aW9uKGNtKSB7IHRleHRPYmplY3RNYW5pcHVsYXRpb24oY20sIG9iamVjdCwgdHJ1ZSwgZmFsc2UsIHRydWUpOyB9OwogICAgICBDb2RlTWlycm9yLmtleU1hcFsndmltLXByZWZpeC15aSddW29iamVjdF0gPSBmdW5jdGlvbihjbSkgeyB0ZXh0T2JqZWN0TWFuaXB1bGF0aW9uKGNtLCBvYmplY3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOyB9OwogICAgICBDb2RlTWlycm9yLmtleU1hcFsndmltLXByZWZpeC15YSddW29iamVjdF0gPSBmdW5jdGlvbihjbSkgeyB0ZXh0T2JqZWN0TWFuaXB1bGF0aW9uKGNtLCBvYmplY3QsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7IH07CiAgICAgIENvZGVNaXJyb3Iua2V5TWFwWyd2aW0tcHJlZml4LWNpJ11bb2JqZWN0XSA9IGZ1bmN0aW9uKGNtKSB7IHRleHRPYmplY3RNYW5pcHVsYXRpb24oY20sIG9iamVjdCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOyB9OwogICAgICBDb2RlTWlycm9yLmtleU1hcFsndmltLXByZWZpeC1jYSddW29iamVjdF0gPSBmdW5jdGlvbihjbSkgeyB0ZXh0T2JqZWN0TWFuaXB1bGF0aW9uKGNtLCBvYmplY3QsIHRydWUsIHRydWUsIHRydWUpOyB9OwogICAgfSkob2JqZWN0KQogIH0KfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3IgewogIGxpbmUtaGVpZ2h0OiAxZW07CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKCiAgLyogTmVjZXNzYXJ5IHNvIHRoZSBzY3JvbGxiYXIgY2FuIGJlIGFic29sdXRlbHkgcG9zaXRpb25lZCB3aXRoaW4gdGhlIHdyYXBwZXIgb24gTGlvbi4gKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgLyogVGhpcyBwcmV2ZW50cyB1bndhbnRlZCBzY3JvbGxiYXJzIGZyb20gc2hvd2luZyB1cCBvbiB0aGUgYm9keSBhbmQgd3JhcHBlciBpbiBJRS4gKi8KICBvdmVyZmxvdzogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogIG92ZXJmbG93LXg6IGF1dG87CiAgb3ZlcmZsb3cteTogaGlkZGVuOwogIGhlaWdodDogMzAwcHg7CiAgLyogVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBhbiBJRVs2N10gYnVnIHdoZXJlIHRoZSBzY3JvbGxlZCBjb250ZW50CiAgICAgaXMgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBzY3JvbGxpbmcgYm94LiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBvdXRsaW5lOiBub25lOwp9CgovKiBWZXJ0aWNhbCBzY3JvbGxiYXIgKi8KLkNvZGVNaXJyb3Itc2Nyb2xsYmFyIHsKICBmbG9hdDogcmlnaHQ7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIG92ZXJmbG93LXk6IHNjcm9sbDsKCiAgLyogVGhpcyBjb3JyZWN0cyBmb3IgdGhlIDFweCBnYXAgaW50cm9kdWNlZCB0byB0aGUgbGVmdCBvZiB0aGUgc2Nyb2xsYmFyCiAgICAgYnkgdGhlIHJ1bGUgZm9yIC5Db2RlTWlycm9yLXNjcm9sbGJhci1pbm5lci4gKi8KICBtYXJnaW4tbGVmdDogLTFweDsKfQouQ29kZU1pcnJvci1zY3JvbGxiYXItaW5uZXIgewogIC8qIFRoaXMgbmVlZHMgdG8gaGF2ZSBhIG5vbnplcm8gd2lkdGggaW4gb3JkZXIgZm9yIHRoZSBzY3JvbGxiYXIgdG8gYXBwZWFyCiAgICAgaW4gRmlyZWZveCBhbmQgSUU5LiAqLwogIHdpZHRoOiAxcHg7Cn0KLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLmNtLXNiLW92ZXJsYXAgewogIC8qIEVuc3VyZSB0aGF0IHRoZSBzY3JvbGxiYXIgYXBwZWFycyBpbiBMaW9uLCBhbmQgdGhhdCBpdCBvdmVybGFwcyB0aGUgY29udGVudAogICAgIHJhdGhlciB0aGFuIHNpdHRpbmcgdG8gdGhlIHJpZ2h0IG9mIGl0LiAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxOwogIGZsb2F0OiBub25lOwogIHJpZ2h0OiAwOwogIG1pbi13aWR0aDogMTJweDsKfQouQ29kZU1pcnJvci1zY3JvbGxiYXIuY20tc2Itbm9ub3ZlcmxhcCB7CiAgbWluLXdpZHRoOiAxMnB4Owp9Ci5Db2RlTWlycm9yLXNjcm9sbGJhci5jbS1zYi1pZTcgewogIG1pbi13aWR0aDogMThweDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogMDsKICB6LWluZGV4OiAxMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZWU7CiAgbWluLXdpZHRoOiAyZW07CiAgaGVpZ2h0OiAxMDAlOwp9Ci5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsKICBjb2xvcjogI2FhYTsKICB0ZXh0LWFsaWduOiByaWdodDsKICBwYWRkaW5nOiAuNGVtIC4yZW0gLjRlbSAuNGVtOwogIHdoaXRlLXNwYWNlOiBwcmUgIWltcG9ydGFudDsKfQouQ29kZU1pcnJvci1saW5lcyB7CiAgcGFkZGluZzogLjRlbTsKICB3aGl0ZS1zcGFjZTogcHJlOwogIGN1cnNvcjogdGV4dDsKfQouQ29kZU1pcnJvci1saW5lcyAqIHsKICAvKiBOZWNlc3NhcnkgZm9yIHRocm93LXNjcm9sbGluZyB0byBkZWNlbGVyYXRlIHByb3Blcmx5IG9uIFNhZmFyaS4gKi8KICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogIC1vLWJvcmRlci1yYWRpdXM6IDA7CiAgYm9yZGVyLXJhZGl1czogMDsKICBib3JkZXItd2lkdGg6IDA7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgZm9udC1zaXplOiBpbmhlcml0OwogIHBhZGRpbmc6IDA7IG1hcmdpbjogMDsKICB3aGl0ZS1zcGFjZTogcHJlOwogIHdvcmQtd3JhcDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogIGNvbG9yOiBpbmhlcml0Owp9CgouQ29kZU1pcnJvci13cmFwIHByZSB7CiAgd29yZC13cmFwOiBicmVhay13b3JkOwogIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICB3b3JkLWJyZWFrOiBub3JtYWw7Cn0KLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3IgdGV4dGFyZWEgewogIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKfQoKLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29yIHsKICB6LWluZGV4OiAxMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgYm9yZGVyLXJpZ2h0OiBub25lOwogIHdpZHRoOiAwOwp9Ci5jbS1rZXltYXAtZmF0LWN1cnNvciBwcmUuQ29kZU1pcnJvci1jdXJzb3IgewogIHdpZHRoOiBhdXRvOwogIGJvcmRlcjogMDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDIwMCwgMCwgLjQpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9IzY2MDBjODAwLCBlbmRDb2xvcnN0cj0jNGMwMGM4MDApOwp9Ci8qIEtsdWRnZSB0byB0dXJuIG9mZiBmaWx0ZXIgaW4gaWU5Kywgd2hpY2ggYWxzbyBhY2NlcHRzIHJnYmEgKi8KLmNtLWtleW1hcC1mYXQtY3Vyc29yIHByZS5Db2RlTWlycm9yLWN1cnNvcjpub3QoI25vbnNlbnNlX2lkKSB7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7Cn0KLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHt9Ci5Db2RlTWlycm9yLWZvY3VzZWQgcHJlLkNvZGVNaXJyb3ItY3Vyc29yIHsKICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgpkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkN2Q0ZjA7IH0KCi5Db2RlTWlycm9yLXNlYXJjaGluZyB7CiAgYmFja2dyb3VuZDogI2ZmYTsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIERlZmF1bHQgdGhlbWUgKi8KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1rZXl3b3JkIHtjb2xvcjogIzcwODt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1hdG9tIHtjb2xvcjogIzIxOTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1udW1iZXIge2NvbG9yOiAjMTY0O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRlZiB7Y29sb3I6ICMwMGY7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tdmFyaWFibGUge2NvbG9yOiBibGFjazt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogIzA1YTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12YXJpYWJsZS0zIHtjb2xvcjogIzA4NTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1wcm9wZXJ0eSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW9wZXJhdG9yIHtjb2xvcjogYmxhY2s7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tY29tbWVudCB7Y29sb3I6ICNhNTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc3RyaW5nIHtjb2xvcjogI2ExMTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1zdHJpbmctMiB7Y29sb3I6ICNmNTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbWV0YSB7Y29sb3I6ICM1NTU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tZXJyb3Ige2NvbG9yOiAjZjAwO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tYnVpbHRpbiB7Y29sb3I6ICMzMGE7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tYnJhY2tldCB7Y29sb3I6ICNjYzc7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tdGFnIHtjb2xvcjogIzE3MDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1hdHRyaWJ1dGUge2NvbG9yOiAjMDBjO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWhlYWRlciB7Y29sb3I6IGJsdWU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tcXVvdGUge2NvbG9yOiAjMDkwO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWhyIHtjb2xvcjogIzk5OTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1saW5rIHtjb2xvcjogIzAwYzt9CgpzcGFuLmNtLWhlYWRlciwgc3Bhbi5jbS1zdHJvbmcge2ZvbnQtd2VpZ2h0OiBib2xkO30Kc3Bhbi5jbS1lbSB7Zm9udC1zdHlsZTogaXRhbGljO30Kc3Bhbi5jbS1lbXN0cm9uZyB7Zm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDt9CnNwYW4uY20tbGluayB7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQoKZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICMwZjA7fQpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciB2ZXJzaW9uIDIuMwovLwovLyBBbGwgZnVuY3Rpb25zIHRoYXQgbmVlZCBhY2Nlc3MgdG8gdGhlIGVkaXRvcidzIHN0YXRlIGxpdmUgaW5zaWRlCi8vIHRoZSBDb2RlTWlycm9yIGZ1bmN0aW9uLiBCZWxvdyB0aGF0LCBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlLAovLyBzb21lIHV0aWxpdGllcyBhcmUgZGVmaW5lZC4KCi8vIENvZGVNaXJyb3IgaXMgdGhlIG9ubHkgZ2xvYmFsIHZhciB3ZSBjbGFpbQp2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAvLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGFuIGVkaXRvciBpbnN0YW5jZS4gSXRzCiAgLy8gY2xvc3VyZSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBlZGl0b3Igc3RhdGUuCiAgZnVuY3Rpb24gQ29kZU1pcnJvcihwbGFjZSwgZ2l2ZW5PcHRpb25zKSB7CiAgICAvLyBEZXRlcm1pbmUgZWZmZWN0aXZlIG9wdGlvbnMgYmFzZWQgb24gZ2l2ZW4gdmFsdWVzIGFuZCBkZWZhdWx0cy4KICAgIHZhciBvcHRpb25zID0ge30sIGRlZmF1bHRzID0gQ29kZU1pcnJvci5kZWZhdWx0czsKICAgIGZvciAodmFyIG9wdCBpbiBkZWZhdWx0cykKICAgICAgaWYgKGRlZmF1bHRzLmhhc093blByb3BlcnR5KG9wdCkpCiAgICAgICAgb3B0aW9uc1tvcHRdID0gKGdpdmVuT3B0aW9ucyAmJiBnaXZlbk9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0KSA/IGdpdmVuT3B0aW9ucyA6IGRlZmF1bHRzKVtvcHRdOwoKICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMuCiAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgd3JhcHBlci5jbGFzc05hbWUgPSAiQ29kZU1pcnJvciIgKyAob3B0aW9ucy5saW5lV3JhcHBpbmcgPyAiIENvZGVNaXJyb3Itd3JhcCIgOiAiIik7CiAgICAvLyBUaGlzIG1lc3MgY3JlYXRlcyB0aGUgYmFzZSBET00gc3RydWN0dXJlIGZvciB0aGUgZWRpdG9yLgogICAgd3JhcHBlci5pbm5lckhUTUwgPQogICAgICAnPGRpdiBzdHlsZT0ib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDsiPicgKyAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKICAgICAgICAnPHRleHRhcmVhIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtIiB3cmFwPSJvZmYiICcgKwogICAgICAgICAgJ2F1dG9jb3JyZWN0PSJvZmYiIGF1dG9jYXBpdGFsaXplPSJvZmYiPjwvdGV4dGFyZWE+PC9kaXY+JyArCiAgICAgICc8ZGl2IGNsYXNzPSJDb2RlTWlycm9yLXNjcm9sbGJhciI+JyArIC8vIFRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXIuIEhvcml6b250YWwgc2Nyb2xsaW5nIGlzIGhhbmRsZWQgYnkgdGhlIHNjcm9sbGVyIGl0c2VsZi4KICAgICAgICAnPGRpdiBjbGFzcz0iQ29kZU1pcnJvci1zY3JvbGxiYXItaW5uZXIiPicgKyAvLyBUaGUgZW1wdHkgc2Nyb2xsYmFyIGNvbnRlbnQsIHVzZWQgc29sZWx5IGZvciBtYW5hZ2luZyB0aGUgc2Nyb2xsYmFyIHRodW1iLgogICAgICAnPC9kaXY+PC9kaXY+JyArIC8vIFRoaXMgbXVzdCBiZSBiZWZvcmUgdGhlIHNjcm9sbCBhcmVhIGJlY2F1c2UgaXQncyBmbG9hdC1yaWdodC4KICAgICAgJzxkaXYgY2xhc3M9IkNvZGVNaXJyb3Itc2Nyb2xsIiB0YWJpbmRleD0iLTEiPicgKwogICAgICAgICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPicgKyAvLyBTZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgdGV4dCwgY2F1c2VzIHNjcm9sbGluZwogICAgICAgICAgJzxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+JyArIC8vIE1vdmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iQ29kZU1pcnJvci1ndXR0ZXIiPjxkaXYgY2xhc3M9IkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQiPjwvZGl2PjwvZGl2PicgKwogICAgICAgICAgICAvLyBQcm92aWRlcyBwb3NpdGlvbmluZyByZWxhdGl2ZSB0byAodmlzaWJsZSkgdGV4dCBvcmlnaW4KICAgICAgICAgICAgJzxkaXYgY2xhc3M9IkNvZGVNaXJyb3ItbGluZXMiPjxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMCI+JyArCiAgICAgICAgICAgICAgLy8gVXNlZCB0byBtZWFzdXJlIHRleHQgc2l6ZQogICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDA7IG92ZXJmbG93OiBoaWRkZW47IHZpc2liaWxpdHk6IGhpZGRlbjsiPjwvZGl2PicgKwogICAgICAgICAgICAgICc8cHJlIGNsYXNzPSJDb2RlTWlycm9yLWN1cnNvciI+JiMxNjA7PC9wcmU+JyArIC8vIEFic29sdXRlbHkgcG9zaXRpb25lZCBibGlua3kgY3Vyc29yCiAgICAgICAgICAgICAgJzxwcmUgY2xhc3M9IkNvZGVNaXJyb3ItY3Vyc29yIiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuIj4mIzE2MDs8L3ByZT4nICsgLy8gVXNlZCB0byBmb3JjZSBhIHdpZHRoCiAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogLTEiPjwvZGl2PjxkaXY+PC9kaXY+JyArIC8vIERJVnMgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGFuZCB0aGUgYWN0dWFsIGNvZGUKICAgICAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKHdyYXBwZXIpOyBlbHNlIHBsYWNlKHdyYXBwZXIpOwogICAgLy8gSSd2ZSBuZXZlciBzZWVuIG1vcmUgZWxlZ2FudCBjb2RlIGluIG15IGxpZmUuCiAgICB2YXIgaW5wdXREaXYgPSB3cmFwcGVyLmZpcnN0Q2hpbGQsIGlucHV0ID0gaW5wdXREaXYuZmlyc3RDaGlsZCwKICAgICAgICBzY3JvbGxlciA9IHdyYXBwZXIubGFzdENoaWxkLCBjb2RlID0gc2Nyb2xsZXIuZmlyc3RDaGlsZCwKICAgICAgICBtb3ZlciA9IGNvZGUuZmlyc3RDaGlsZCwgZ3V0dGVyID0gbW92ZXIuZmlyc3RDaGlsZCwgZ3V0dGVyVGV4dCA9IGd1dHRlci5maXJzdENoaWxkLAogICAgICAgIGxpbmVTcGFjZSA9IGd1dHRlci5uZXh0U2libGluZy5maXJzdENoaWxkLCBtZWFzdXJlID0gbGluZVNwYWNlLmZpcnN0Q2hpbGQsCiAgICAgICAgY3Vyc29yID0gbWVhc3VyZS5uZXh0U2libGluZywgd2lkdGhGb3JjZXIgPSBjdXJzb3IubmV4dFNpYmxpbmcsCiAgICAgICAgc2VsZWN0aW9uRGl2ID0gd2lkdGhGb3JjZXIubmV4dFNpYmxpbmcsIGxpbmVEaXYgPSBzZWxlY3Rpb25EaXYubmV4dFNpYmxpbmcsCiAgICAgICAgc2Nyb2xsYmFyID0gaW5wdXREaXYubmV4dFNpYmxpbmcsIHNjcm9sbGJhcklubmVyID0gc2Nyb2xsYmFyLmZpcnN0Q2hpbGQ7CiAgICB0aGVtZUNoYW5nZWQoKTsga2V5TWFwQ2hhbmdlZCgpOwogICAgLy8gTmVlZGVkIHRvIGhpZGUgYmlnIGJsdWUgYmxpbmtpbmcgY3Vyc29yIG9uIE1vYmlsZSBTYWZhcmkKICAgIGlmIChpb3MpIGlucHV0LnN0eWxlLndpZHRoID0gIjBweCI7CiAgICBpZiAoIXdlYmtpdCkgc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgIGxpbmVTcGFjZS5zdHlsZS5vdXRsaW5lID0gIm5vbmUiOwogICAgaWYgKG9wdGlvbnMudGFiaW5kZXggIT0gbnVsbCkgaW5wdXQudGFiSW5kZXggPSBvcHRpb25zLnRhYmluZGV4OwogICAgaWYgKG9wdGlvbnMuYXV0b2ZvY3VzKSBmb2N1c0lucHV0KCk7CiAgICBpZiAoIW9wdGlvbnMuZ3V0dGVyICYmICFvcHRpb25zLmxpbmVOdW1iZXJzKSBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAogICAgaWYgKGtodG1sKSBpbnB1dERpdi5zdHlsZS5oZWlnaHQgPSAiMXB4IiwgaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwoKICAgIC8vIENoZWNrIGZvciBPUyBYID49IDEwLjcuIElmIHNvLCB3ZSBuZWVkIHRvIGZvcmNlIGEgd2lkdGggb24gdGhlIHNjcm9sbGJhciwgYW5kIAogICAgLy8gbWFrZSBpdCBvdmVybGFwIHRoZSBjb250ZW50LiAoQnV0IHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgc2Nyb2xsYmFyIGRvZXNuJ3QgYWxyZWFkeQogICAgLy8gaGF2ZSBhIG5hdHVyYWwgd2lkdGguIElmIHRoZSBtb3VzZSBpcyBwbHVnZ2VkIGluIG9yIHRoZSB1c2VyIHNldHMgdGhlIHN5c3RlbSBwcmVmCiAgICAvLyB0byBhbHdheXMgc2hvdyBzY3JvbGxiYXJzLCB0aGUgc2Nyb2xsYmFyIHNob3VsZG4ndCBvdmVybGFwLikKICAgIGlmIChtYWNfZ2VMaW9uKSB7CiAgICAgIHNjcm9sbGJhci5jbGFzc05hbWUgKz0gKG92ZXJsYXBTY3JvbGxiYXJzKCkgPyAiIGNtLXNiLW92ZXJsYXAiIDogIiBjbS1zYi1ub25vdmVybGFwIik7CiAgICB9IGVsc2UgaWYgKGllX2x0OCkgewogICAgICAvLyBOZWVkIHRvIHNldCBhIG1pbmltdW0gd2lkdGggdG8gc2VlIHRoZSBzY3JvbGxiYXIgb24gSUU3IChidXQgbXVzdCBub3Qgc2V0IGl0IG9uIElFOCkuCiAgICAgIHNjcm9sbGJhci5jbGFzc05hbWUgKz0gIiBjbS1zYi1pZTciOwogICAgfQoKICAgIC8vIENoZWNrIGZvciBwcm9ibGVtIHdpdGggSUUgaW5uZXJIVE1MIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBhCiAgICAvLyBQIChvciBzaW1pbGFyKSBwYXJlbnQgbm9kZS4KICAgIHRyeSB7IHN0cmluZ1dpZHRoKCJ4Iik7IH0KICAgIGNhdGNoIChlKSB7CiAgICAgIGlmIChlLm1lc3NhZ2UubWF0Y2goL3J1bnRpbWUvaSkpCiAgICAgICAgZSA9IG5ldyBFcnJvcigiQSBDb2RlTWlycm9yIGluc2lkZSBhIFAtc3R5bGUgZWxlbWVudCBkb2VzIG5vdCB3b3JrIGluIEludGVybmV0IEV4cGxvcmVyLiAoaW5uZXJIVE1MIGJ1ZykiKTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICAvLyBEZWxheWVkIG9iamVjdCB3cmFwIHRpbWVvdXRzLCBtYWtpbmcgc3VyZSBvbmx5IG9uZSBpcyBhY3RpdmUuIGJsaW5rZXIgaG9sZHMgYW4gaW50ZXJ2YWwuCiAgICB2YXIgcG9sbCA9IG5ldyBEZWxheWVkKCksIGhpZ2hsaWdodCA9IG5ldyBEZWxheWVkKCksIGJsaW5rZXI7CgogICAgLy8gbW9kZSBob2xkcyBhIG1vZGUgQVBJIG9iamVjdC4gZG9jIGlzIHRoZSB0cmVlIG9mIExpbmUgb2JqZWN0cywKICAgIC8vIHdvcmsgYW4gYXJyYXkgb2YgbGluZXMgdGhhdCBzaG91bGQgYmUgcGFyc2VkLCBhbmQgaGlzdG9yeSB0aGUKICAgIC8vIHVuZG8gaGlzdG9yeSAoaW5zdGFuY2Ugb2YgSGlzdG9yeSBjb25zdHJ1Y3RvcikuCiAgICB2YXIgbW9kZSwgZG9jID0gbmV3IEJyYW5jaENodW5rKFtuZXcgTGVhZkNodW5rKFtuZXcgTGluZSgiIildKV0pLCB3b3JrLCBmb2N1c2VkOwogICAgbG9hZE1vZGUoKTsKICAgIC8vIFRoZSBzZWxlY3Rpb24uIFRoZXNlIGFyZSBhbHdheXMgbWFpbnRhaW5lZCB0byBwb2ludCBhdCB2YWxpZAogICAgLy8gcG9zaXRpb25zLiBJbnZlcnRlZCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIHVzZXIgaXMKICAgIC8vIHNlbGVjdGluZyBib3R0b20tdG8tdG9wLgogICAgdmFyIHNlbCA9IHtmcm9tOiB7bGluZTogMCwgY2g6IDB9LCB0bzoge2xpbmU6IDAsIGNoOiAwfSwgaW52ZXJ0ZWQ6IGZhbHNlfTsKICAgIC8vIFNlbGVjdGlvbi1yZWxhdGVkIGZsYWdzLiBzaGlmdFNlbGVjdGluZyBvYnZpb3VzbHkgdHJhY2tzCiAgICAvLyB3aGV0aGVyIHRoZSB1c2VyIGlzIGhvbGRpbmcgc2hpZnQuCiAgICB2YXIgc2hpZnRTZWxlY3RpbmcsIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrLCBsYXN0U2Nyb2xsVG9wID0gMCwgbGFzdFNjcm9sbExlZnQgPSAwLCBkcmFnZ2luZ1RleHQsCiAgICAgICAgb3ZlcndyaXRlID0gZmFsc2UsIHN1cHByZXNzRWRpdHMgPSBmYWxzZTsKICAgIC8vIFZhcmlhYmxlcyB1c2VkIGJ5IHN0YXJ0T3BlcmF0aW9uL2VuZE9wZXJhdGlvbiB0byB0cmFjayB3aGF0CiAgICAvLyBoYXBwZW5lZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi4KICAgIHZhciB1cGRhdGVJbnB1dCwgdXNlclNlbENoYW5nZSwgY2hhbmdlcywgdGV4dENoYW5nZWQsIHNlbGVjdGlvbkNoYW5nZWQsIGxlYXZlSW5wdXRBbG9uZSwKICAgICAgICBndXR0ZXJEaXJ0eSwgY2FsbGJhY2tzOwogICAgLy8gQ3VycmVudCB2aXNpYmxlIHJhbmdlIChtYXkgYmUgYmlnZ2VyIHRoYW4gdGhlIHZpZXcgd2luZG93KS4KICAgIHZhciBkaXNwbGF5T2Zmc2V0ID0gMCwgc2hvd2luZ0Zyb20gPSAwLCBzaG93aW5nVG8gPSAwLCBsYXN0U2l6ZUMgPSAwOwogICAgLy8gYnJhY2tldEhpZ2hsaWdodGVkIGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhhdCBhIGJyYWNrZXQgaGFzIGJlZW4KICAgIC8vIG1hcmtlZC4KICAgIHZhciBicmFja2V0SGlnaGxpZ2h0ZWQ7CiAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIKICAgIC8vIGNhbiBiZSBrZXB0IHN0YXRpYyB3aGVuIHNjcm9sbGluZy4KICAgIHZhciBtYXhMaW5lID0gIiIsIHVwZGF0ZU1heExpbmUgPSBmYWxzZSwgbWF4TGluZUNoYW5nZWQgPSB0cnVlOwogICAgdmFyIHRhYkNhY2hlID0ge307CgogICAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udGVudC4KICAgIG9wZXJhdGlvbihmdW5jdGlvbigpe3NldFZhbHVlKG9wdGlvbnMudmFsdWUgfHwgIiIpOyB1cGRhdGVJbnB1dCA9IGZhbHNlO30pKCk7CiAgICB2YXIgaGlzdG9yeSA9IG5ldyBIaXN0b3J5KCk7CgogICAgLy8gUmVnaXN0ZXIgb3VyIGV2ZW50IGhhbmRsZXJzLgogICAgY29ubmVjdChzY3JvbGxlciwgIm1vdXNlZG93biIsIG9wZXJhdGlvbihvbk1vdXNlRG93bikpOwogICAgY29ubmVjdChzY3JvbGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9uKG9uRG91YmxlQ2xpY2spKTsKICAgIGNvbm5lY3QobGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBlX3ByZXZlbnREZWZhdWx0KTsKICAgIC8vIEdlY2tvIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUgKmFmdGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdAogICAgLy8gd2hpY2ggcG9pbnQgd2UgY2FuJ3QgbWVzcyB3aXRoIGl0IGFueW1vcmUuIENvbnRleHQgbWVudSBpcwogICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgR2Vja28uCiAgICBpZiAoIWdlY2tvKSBjb25uZWN0KHNjcm9sbGVyLCAiY29udGV4dG1lbnUiLCBvbkNvbnRleHRNZW51KTsKICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJzY3JvbGwiLCBvblNjcm9sbCk7CiAgICBjb25uZWN0KHNjcm9sbGJhciwgInNjcm9sbCIsIG9uU2Nyb2xsKTsKICAgIGNvbm5lY3Qoc2Nyb2xsYmFyLCAibW91c2Vkb3duIiwgZnVuY3Rpb24oKSB7c2V0VGltZW91dChmb2N1c0lucHV0LCAwKTt9KTsKICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJtb3VzZXdoZWVsIiwgb25Nb3VzZVdoZWVsKTsKICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJET01Nb3VzZVNjcm9sbCIsIG9uTW91c2VXaGVlbCk7CiAgICBjb25uZWN0KHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9uKCkge3VwZGF0ZURpc3BsYXkodHJ1ZSk7fSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5dXAiLCBvcGVyYXRpb24ob25LZXlVcCkpOwogICAgY29ubmVjdChpbnB1dCwgImlucHV0IiwgZmFzdFBvbGwpOwogICAgY29ubmVjdChpbnB1dCwgImtleWRvd24iLCBvcGVyYXRpb24ob25LZXlEb3duKSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5cHJlc3MiLCBvcGVyYXRpb24ob25LZXlQcmVzcykpOwogICAgY29ubmVjdChpbnB1dCwgImZvY3VzIiwgb25Gb2N1cyk7CiAgICBjb25uZWN0KGlucHV0LCAiYmx1ciIsIG9uQmx1cik7CgogICAgaWYgKG9wdGlvbnMuZHJhZ0Ryb3ApIHsKICAgICAgY29ubmVjdChzY3JvbGxlciwgImRyYWdzdGFydCIsIG9uRHJhZ1N0YXJ0KTsKICAgICAgZnVuY3Rpb24gZHJhZ18oZSkgewogICAgICAgIGlmIChvcHRpb25zLm9uRHJhZ0V2ZW50ICYmIG9wdGlvbnMub25EcmFnRXZlbnQoaW5zdGFuY2UsIGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAgICAgZV9zdG9wKGUpOwogICAgICB9CiAgICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJkcmFnZW50ZXIiLCBkcmFnXyk7CiAgICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsKICAgICAgY29ubmVjdChzY3JvbGxlciwgImRyb3AiLCBvcGVyYXRpb24ob25Ecm9wKSk7CiAgICB9CiAgICBjb25uZWN0KHNjcm9sbGVyLCAicGFzdGUiLCBmdW5jdGlvbigpe2ZvY3VzSW5wdXQoKTsgZmFzdFBvbGwoKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJwYXN0ZSIsIGZhc3RQb2xsKTsKICAgIGNvbm5lY3QoaW5wdXQsICJjdXQiLCBvcGVyYXRpb24oZnVuY3Rpb24oKXsKICAgICAgaWYgKCFvcHRpb25zLnJlYWRPbmx5KSByZXBsYWNlU2VsZWN0aW9uKCIiKTsKICAgIH0pKTsKCiAgICAvLyBOZWVkZWQgdG8gaGFuZGxlIFRhYiBrZXkgaW4gS0hUTUwKICAgIGlmIChraHRtbCkgY29ubmVjdChjb2RlLCAibW91c2V1cCIsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGlucHV0KSBpbnB1dC5ibHVyKCk7CiAgICAgICAgZm9jdXNJbnB1dCgpOwogICAgfSk7CgogICAgLy8gSUUgdGhyb3dzIHVuc3BlY2lmaWVkIGVycm9yIGluIGNlcnRhaW4gY2FzZXMsIHdoZW4KICAgIC8vIHRyeWluZyB0byBhY2Nlc3MgYWN0aXZlRWxlbWVudCBiZWZvcmUgb25sb2FkCiAgICB2YXIgaGFzRm9jdXM7IHRyeSB7IGhhc0ZvY3VzID0gKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gaW5wdXQpOyB9IGNhdGNoKGUpIHsgfQogICAgaWYgKGhhc0ZvY3VzIHx8IG9wdGlvbnMuYXV0b2ZvY3VzKSBzZXRUaW1lb3V0KG9uRm9jdXMsIDIwKTsKICAgIGVsc2Ugb25CbHVyKCk7CgogICAgZnVuY3Rpb24gaXNMaW5lKGwpIHtyZXR1cm4gbCA+PSAwICYmIGwgPCBkb2Muc2l6ZTt9CiAgICAvLyBUaGUgaW5zdGFuY2Ugb2JqZWN0IHRoYXQgd2UnbGwgcmV0dXJuLiBNb3N0bHkgY2FsbHMgb3V0IHRvCiAgICAvLyBsb2NhbCBmdW5jdGlvbnMgaW4gdGhlIENvZGVNaXJyb3IgZnVuY3Rpb24uIFNvbWUgZG8gc29tZSBleHRyYQogICAgLy8gcmFuZ2UgY2hlY2tpbmcgYW5kL29yIGNsaXBwaW5nLiBvcGVyYXRpb24gaXMgdXNlZCB0byB3cmFwIHRoZQogICAgLy8gY2FsbCBzbyB0aGF0IGNoYW5nZXMgaXQgbWFrZXMgYXJlIHRyYWNrZWQsIGFuZCB0aGUgZGlzcGxheSBpcwogICAgLy8gdXBkYXRlZCBhZnRlcndhcmRzLgogICAgdmFyIGluc3RhbmNlID0gd3JhcHBlci5Db2RlTWlycm9yID0gewogICAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsCiAgICAgIHNldFZhbHVlOiBvcGVyYXRpb24oc2V0VmFsdWUpLAogICAgICBnZXRTZWxlY3Rpb246IGdldFNlbGVjdGlvbiwKICAgICAgcmVwbGFjZVNlbGVjdGlvbjogb3BlcmF0aW9uKHJlcGxhY2VTZWxlY3Rpb24pLAogICAgICBmb2N1czogZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgZm9jdXNJbnB1dCgpOyBvbkZvY3VzKCk7IGZhc3RQb2xsKCk7fSwKICAgICAgc2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7CiAgICAgICAgdmFyIG9sZFZhbCA9IG9wdGlvbnNbb3B0aW9uXTsKICAgICAgICBvcHRpb25zW29wdGlvbl0gPSB2YWx1ZTsKICAgICAgICBpZiAob3B0aW9uID09ICJtb2RlIiB8fCBvcHRpb24gPT0gImluZGVudFVuaXQiKSBsb2FkTW9kZSgpOwogICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAicmVhZE9ubHkiICYmIHZhbHVlID09ICJub2N1cnNvciIpIHtvbkJsdXIoKTsgaW5wdXQuYmx1cigpO30KICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInJlYWRPbmx5IiAmJiAhdmFsdWUpIHtyZXNldElucHV0KHRydWUpO30KICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInRoZW1lIikgdGhlbWVDaGFuZ2VkKCk7CiAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJsaW5lV3JhcHBpbmciICYmIG9sZFZhbCAhPSB2YWx1ZSkgb3BlcmF0aW9uKHdyYXBwaW5nQ2hhbmdlZCkoKTsKICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInRhYlNpemUiKSB1cGRhdGVEaXNwbGF5KHRydWUpOwogICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAia2V5TWFwIikga2V5TWFwQ2hhbmdlZCgpOwogICAgICAgIGlmIChvcHRpb24gPT0gImxpbmVOdW1iZXJzIiB8fCBvcHRpb24gPT0gImd1dHRlciIgfHwgb3B0aW9uID09ICJmaXJzdExpbmVOdW1iZXIiIHx8IG9wdGlvbiA9PSAidGhlbWUiKSB7CiAgICAgICAgICBndXR0ZXJDaGFuZ2VkKCk7CiAgICAgICAgICB1cGRhdGVEaXNwbGF5KHRydWUpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHtyZXR1cm4gb3B0aW9uc1tvcHRpb25dO30sCiAgICAgIHVuZG86IG9wZXJhdGlvbih1bmRvKSwKICAgICAgcmVkbzogb3BlcmF0aW9uKHJlZG8pLAogICAgICBpbmRlbnRMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24obiwgZGlyKSB7CiAgICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIpIHsKICAgICAgICAgIGlmIChkaXIgPT0gbnVsbCkgZGlyID0gb3B0aW9ucy5zbWFydEluZGVudCA/ICJzbWFydCIgOiAicHJldiI7CiAgICAgICAgICBlbHNlIGRpciA9IGRpciA/ICJhZGQiIDogInN1YnRyYWN0IjsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTGluZShuKSkgaW5kZW50TGluZShuLCBkaXIpOwogICAgICB9KSwKICAgICAgaW5kZW50U2VsZWN0aW9uOiBvcGVyYXRpb24oaW5kZW50U2VsZWN0ZWQpLAogICAgICBoaXN0b3J5U2l6ZTogZnVuY3Rpb24oKSB7cmV0dXJuIHt1bmRvOiBoaXN0b3J5LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0b3J5LnVuZG9uZS5sZW5ndGh9O30sCiAgICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7aGlzdG9yeSA9IG5ldyBIaXN0b3J5KCk7fSwKICAgICAgbWF0Y2hCcmFja2V0czogb3BlcmF0aW9uKGZ1bmN0aW9uKCl7bWF0Y2hCcmFja2V0cyh0cnVlKTt9KSwKICAgICAgZ2V0VG9rZW5BdDogb3BlcmF0aW9uKGZ1bmN0aW9uKHBvcykgewogICAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKICAgICAgICByZXR1cm4gZ2V0TGluZShwb3MubGluZSkuZ2V0VG9rZW5BdChtb2RlLCBnZXRTdGF0ZUJlZm9yZShwb3MubGluZSksIHBvcy5jaCk7CiAgICAgIH0pLAogICAgICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgbGluZSA9IGNsaXBMaW5lKGxpbmUgPT0gbnVsbCA/IGRvYy5zaXplIC0gMTogbGluZSk7CiAgICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKGxpbmUgKyAxKTsKICAgICAgfSwKICAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCwgbW9kZSkgewogICAgICAgIGlmIChzdGFydCA9PSBudWxsKSBzdGFydCA9IHNlbC5pbnZlcnRlZDsKICAgICAgICByZXR1cm4gdGhpcy5jaGFyQ29vcmRzKHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG8sIG1vZGUpOwogICAgICB9LAogICAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihwb3MsIG1vZGUpIHsKICAgICAgICBwb3MgPSBjbGlwUG9zKHBvcyk7CiAgICAgICAgaWYgKG1vZGUgPT0gImxvY2FsIikgcmV0dXJuIGxvY2FsQ29vcmRzKHBvcywgZmFsc2UpOwogICAgICAgIGlmIChtb2RlID09ICJkaXYiKSByZXR1cm4gbG9jYWxDb29yZHMocG9zLCB0cnVlKTsKICAgICAgICByZXR1cm4gcGFnZUNvb3Jkcyhwb3MpOwogICAgICB9LAogICAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMpIHsKICAgICAgICB2YXIgb2ZmID0gZWx0T2Zmc2V0KGxpbmVTcGFjZSk7CiAgICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIoY29vcmRzLnggLSBvZmYubGVmdCwgY29vcmRzLnkgLSBvZmYudG9wKTsKICAgICAgfSwKICAgICAgbWFya1RleHQ6IG9wZXJhdGlvbihtYXJrVGV4dCksCiAgICAgIHNldEJvb2ttYXJrOiBzZXRCb29rbWFyaywKICAgICAgZmluZE1hcmtzQXQ6IGZpbmRNYXJrc0F0LAogICAgICBzZXRNYXJrZXI6IG9wZXJhdGlvbihhZGRHdXR0ZXJNYXJrZXIpLAogICAgICBjbGVhck1hcmtlcjogb3BlcmF0aW9uKHJlbW92ZUd1dHRlck1hcmtlciksCiAgICAgIHNldExpbmVDbGFzczogb3BlcmF0aW9uKHNldExpbmVDbGFzcyksCiAgICAgIGhpZGVMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24oaCkge3JldHVybiBzZXRMaW5lSGlkZGVuKGgsIHRydWUpO30pLAogICAgICBzaG93TGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKGgpIHtyZXR1cm4gc2V0TGluZUhpZGRlbihoLCBmYWxzZSk7fSksCiAgICAgIG9uRGVsZXRlTGluZTogZnVuY3Rpb24obGluZSwgZikgewogICAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgewogICAgICAgICAgaWYgKCFpc0xpbmUobGluZSkpIHJldHVybiBudWxsOwogICAgICAgICAgbGluZSA9IGdldExpbmUobGluZSk7CiAgICAgICAgfQogICAgICAgIChsaW5lLmhhbmRsZXJzIHx8IChsaW5lLmhhbmRsZXJzID0gW10pKS5wdXNoKGYpOwogICAgICAgIHJldHVybiBsaW5lOwogICAgICB9LAogICAgICBsaW5lSW5mbzogbGluZUluZm8sCiAgICAgIGFkZFdpZGdldDogZnVuY3Rpb24ocG9zLCBub2RlLCBzY3JvbGwsIHZlcnQsIGhvcml6KSB7CiAgICAgICAgcG9zID0gbG9jYWxDb29yZHMoY2xpcFBvcyhwb3MpKTsKICAgICAgICB2YXIgdG9wID0gcG9zLnlCb3QsIGxlZnQgPSBwb3MueDsKICAgICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgICBjb2RlLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgIGlmICh2ZXJ0ID09ICJvdmVyIikgdG9wID0gcG9zLnk7CiAgICAgICAgZWxzZSBpZiAodmVydCA9PSAibmVhciIpIHsKICAgICAgICAgIHZhciB2c3BhY2UgPSBNYXRoLm1heChzY3JvbGxlci5vZmZzZXRIZWlnaHQsIGRvYy5oZWlnaHQgKiB0ZXh0SGVpZ2h0KCkpLAogICAgICAgICAgICAgIGhzcGFjZSA9IE1hdGgubWF4KGNvZGUuY2xpZW50V2lkdGgsIGxpbmVTcGFjZS5jbGllbnRXaWR0aCkgLSBwYWRkaW5nTGVmdCgpOwogICAgICAgICAgaWYgKHBvcy55Qm90ICsgbm9kZS5vZmZzZXRIZWlnaHQgPiB2c3BhY2UgJiYgcG9zLnkgPiBub2RlLm9mZnNldEhlaWdodCkKICAgICAgICAgICAgdG9wID0gcG9zLnkgLSBub2RlLm9mZnNldEhlaWdodDsKICAgICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSkKICAgICAgICAgICAgbGVmdCA9IGhzcGFjZSAtIG5vZGUub2Zmc2V0V2lkdGg7CiAgICAgICAgfQogICAgICAgIG5vZGUuc3R5bGUudG9wID0gKHRvcCArIHBhZGRpbmdUb3AoKSkgKyAicHgiOwogICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgICBpZiAoaG9yaXogPT0gInJpZ2h0IikgewogICAgICAgICAgbGVmdCA9IGNvZGUuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoOwogICAgICAgICAgbm9kZS5zdHlsZS5yaWdodCA9ICIwcHgiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaG9yaXogPT0gImxlZnQiKSBsZWZ0ID0gMDsKICAgICAgICAgIGVsc2UgaWYgKGhvcml6ID09ICJtaWRkbGUiKSBsZWZ0ID0gKGNvZGUuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoKSAvIDI7CiAgICAgICAgICBub2RlLnN0eWxlLmxlZnQgPSAobGVmdCArIHBhZGRpbmdMZWZ0KCkpICsgInB4IjsKICAgICAgICB9CiAgICAgICAgaWYgKHNjcm9sbCkKICAgICAgICAgIHNjcm9sbEludG9WaWV3KGxlZnQsIHRvcCwgbGVmdCArIG5vZGUub2Zmc2V0V2lkdGgsIHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0KTsKICAgICAgfSwKCiAgICAgIGxpbmVDb3VudDogZnVuY3Rpb24oKSB7cmV0dXJuIGRvYy5zaXplO30sCiAgICAgIGNsaXBQb3M6IGNsaXBQb3MsCiAgICAgIGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgc3RhcnQgPSBzZWwuaW52ZXJ0ZWQ7CiAgICAgICAgcmV0dXJuIGNvcHlQb3Moc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50byk7CiAgICAgIH0sCiAgICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1cm4gIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pO30sCiAgICAgIHNldEN1cnNvcjogb3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIGNoLCB1c2VyKSB7CiAgICAgICAgaWYgKGNoID09IG51bGwgJiYgdHlwZW9mIGxpbmUubGluZSA9PSAibnVtYmVyIikgc2V0Q3Vyc29yKGxpbmUubGluZSwgbGluZS5jaCwgdXNlcik7CiAgICAgICAgZWxzZSBzZXRDdXJzb3IobGluZSwgY2gsIHVzZXIpOwogICAgICB9KSwKICAgICAgc2V0U2VsZWN0aW9uOiBvcGVyYXRpb24oZnVuY3Rpb24oZnJvbSwgdG8sIHVzZXIpIHsKICAgICAgICAodXNlciA/IHNldFNlbGVjdGlvblVzZXIgOiBzZXRTZWxlY3Rpb24pKGNsaXBQb3MoZnJvbSksIGNsaXBQb3ModG8gfHwgZnJvbSkpOwogICAgICB9KSwKICAgICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUobGluZSkpIHJldHVybiBnZXRMaW5lKGxpbmUpLnRleHQ7fSwKICAgICAgZ2V0TGluZUhhbmRsZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUobGluZSkpIHJldHVybiBnZXRMaW5lKGxpbmUpO30sCiAgICAgIHNldExpbmU6IG9wZXJhdGlvbihmdW5jdGlvbihsaW5lLCB0ZXh0KSB7CiAgICAgICAgaWYgKGlzTGluZShsaW5lKSkgcmVwbGFjZVJhbmdlKHRleHQsIHtsaW5lOiBsaW5lLCBjaDogMH0sIHtsaW5lOiBsaW5lLCBjaDogZ2V0TGluZShsaW5lKS50ZXh0Lmxlbmd0aH0pOwogICAgICB9KSwKICAgICAgcmVtb3ZlTGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBpZiAoaXNMaW5lKGxpbmUpKSByZXBsYWNlUmFuZ2UoIiIsIHtsaW5lOiBsaW5lLCBjaDogMH0sIGNsaXBQb3Moe2xpbmU6IGxpbmUrMSwgY2g6IDB9KSk7CiAgICAgIH0pLAogICAgICByZXBsYWNlUmFuZ2U6IG9wZXJhdGlvbihyZXBsYWNlUmFuZ2UpLAogICAgICBnZXRSYW5nZTogZnVuY3Rpb24oZnJvbSwgdG8pIHtyZXR1cm4gZ2V0UmFuZ2UoY2xpcFBvcyhmcm9tKSwgY2xpcFBvcyh0bykpO30sCgogICAgICB0cmlnZ2VyT25LZXlEb3duOiBvcGVyYXRpb24ob25LZXlEb3duKSwKICAgICAgZXhlY0NvbW1hbmQ6IGZ1bmN0aW9uKGNtZCkge3JldHVybiBjb21tYW5kc1tjbWRdKGluc3RhbmNlKTt9LAogICAgICAvLyBTdHVmZiB1c2VkIGJ5IGNvbW1hbmRzLCBwcm9iYWJseSBub3QgbXVjaCB1c2UgdG8gb3V0c2lkZSBjb2RlLgogICAgICBtb3ZlSDogb3BlcmF0aW9uKG1vdmVIKSwKICAgICAgZGVsZXRlSDogb3BlcmF0aW9uKGRlbGV0ZUgpLAogICAgICBtb3ZlVjogb3BlcmF0aW9uKG1vdmVWKSwKICAgICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbigpIHsKICAgICAgICBpZihvdmVyd3JpdGUpewogICAgICAgICAgb3ZlcndyaXRlID0gZmFsc2U7CiAgICAgICAgICBjdXJzb3IuY2xhc3NOYW1lID0gY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCAiIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG92ZXJ3cml0ZSA9IHRydWU7CiAgICAgICAgICBjdXJzb3IuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci1vdmVyd3JpdGUiOwogICAgICAgIH0KICAgICAgfSwKCiAgICAgIHBvc0Zyb21JbmRleDogZnVuY3Rpb24ob2ZmKSB7CiAgICAgICAgdmFyIGxpbmVObyA9IDAsIGNoOwogICAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICB2YXIgc3ogPSBsaW5lLnRleHQubGVuZ3RoICsgMTsKICAgICAgICAgIGlmIChzeiA+IG9mZikgeyBjaCA9IG9mZjsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgIG9mZiAtPSBzejsKICAgICAgICAgICsrbGluZU5vOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBjbGlwUG9zKHtsaW5lOiBsaW5lTm8sIGNoOiBjaH0pOwogICAgICB9LAogICAgICBpbmRleEZyb21Qb3M6IGZ1bmN0aW9uIChjb29yZHMpIHsKICAgICAgICBpZiAoY29vcmRzLmxpbmUgPCAwIHx8IGNvb3Jkcy5jaCA8IDApIHJldHVybiAwOwogICAgICAgIHZhciBpbmRleCA9IGNvb3Jkcy5jaDsKICAgICAgICBkb2MuaXRlcigwLCBjb29yZHMubGluZSwgZnVuY3Rpb24gKGxpbmUpIHsKICAgICAgICAgIGluZGV4ICs9IGxpbmUudGV4dC5sZW5ndGggKyAxOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbmRleDsKICAgICAgfSwKICAgICAgc2Nyb2xsVG86IGZ1bmN0aW9uKHgsIHkpIHsKICAgICAgICBpZiAoeCAhPSBudWxsKSBzY3JvbGxlci5zY3JvbGxMZWZ0ID0geDsKICAgICAgICBpZiAoeSAhPSBudWxsKSBzY3JvbGxiYXIuc2Nyb2xsVG9wID0geTsKICAgICAgICB1cGRhdGVEaXNwbGF5KFtdKTsKICAgICAgfSwKICAgICAgZ2V0U2Nyb2xsSW5mbzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHt4OiBzY3JvbGxlci5zY3JvbGxMZWZ0LCB5OiBzY3JvbGxiYXIuc2Nyb2xsVG9wLAogICAgICAgICAgICAgICAgaGVpZ2h0OiBzY3JvbGxiYXIuc2Nyb2xsSGVpZ2h0LCB3aWR0aDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGh9OwogICAgICB9LAoKICAgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gb3BlcmF0aW9uKGYpKCk7fSwKICAgICAgY29tcG91bmRDaGFuZ2U6IGZ1bmN0aW9uKGYpe3JldHVybiBjb21wb3VuZENoYW5nZShmKTt9LAogICAgICByZWZyZXNoOiBmdW5jdGlvbigpewogICAgICAgIHVwZGF0ZURpc3BsYXkodHJ1ZSk7CiAgICAgICAgaWYgKHNjcm9sbGJhci5zY3JvbGxIZWlnaHQgPiBsYXN0U2Nyb2xsVG9wKQogICAgICAgICAgc2Nyb2xsYmFyLnNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3A7CiAgICAgIH0sCiAgICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGlucHV0O30sCiAgICAgIGdldFdyYXBwZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB3cmFwcGVyO30sCiAgICAgIGdldFNjcm9sbGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gc2Nyb2xsZXI7fSwKICAgICAgZ2V0R3V0dGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gZ3V0dGVyO30KICAgIH07CgogICAgZnVuY3Rpb24gZ2V0TGluZShuKSB7IHJldHVybiBnZXRMaW5lQXQoZG9jLCBuKTsgfQogICAgZnVuY3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHsKICAgICAgZ3V0dGVyRGlydHkgPSB0cnVlOwogICAgICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0OwogICAgICBmb3IgKHZhciBuID0gbGluZTsgbjsgbiA9IG4ucGFyZW50KSBuLmhlaWdodCArPSBkaWZmOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldFZhbHVlKGNvZGUpIHsKICAgICAgdmFyIHRvcCA9IHtsaW5lOiAwLCBjaDogMH07CiAgICAgIHVwZGF0ZUxpbmVzKHRvcCwge2xpbmU6IGRvYy5zaXplIC0gMSwgY2g6IGdldExpbmUoZG9jLnNpemUtMSkudGV4dC5sZW5ndGh9LAogICAgICAgICAgICAgICAgICBzcGxpdExpbmVzKGNvZGUpLCB0b3AsIHRvcCk7CiAgICAgIHVwZGF0ZUlucHV0ID0gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKCkgewogICAgICB2YXIgdGV4dCA9IFtdOwogICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgeyB0ZXh0LnB1c2gobGluZS50ZXh0KTsgfSk7CiAgICAgIHJldHVybiB0ZXh0LmpvaW4oIlxuIik7CiAgICB9CgogICAgZnVuY3Rpb24gb25TY3JvbGwoZSkgewogICAgICBpZiAobGFzdFNjcm9sbFRvcCAhPSBzY3JvbGxiYXIuc2Nyb2xsVG9wIHx8IGxhc3RTY3JvbGxMZWZ0ICE9IHNjcm9sbGVyLnNjcm9sbExlZnQpIHsKICAgICAgICBsYXN0U2Nyb2xsVG9wID0gc2Nyb2xsYmFyLnNjcm9sbFRvcDsKICAgICAgICBsYXN0U2Nyb2xsTGVmdCA9IHNjcm9sbGVyLnNjcm9sbExlZnQ7CiAgICAgICAgdXBkYXRlRGlzcGxheShbXSk7CiAgICAgICAgaWYgKG9wdGlvbnMuZml4ZWRHdXR0ZXIpIGd1dHRlci5zdHlsZS5sZWZ0ID0gc2Nyb2xsZXIuc2Nyb2xsTGVmdCArICJweCI7CiAgICAgICAgaWYgKG9wdGlvbnMub25TY3JvbGwpIG9wdGlvbnMub25TY3JvbGwoaW5zdGFuY2UpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gb25Nb3VzZURvd24oZSkgewogICAgICBzZXRTaGlmdChlX3Byb3AoZSwgInNoaWZ0S2V5IikpOwogICAgICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBjbGljayBpbiBhIHdpZGdldAogICAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gd3JhcHBlcjsgbiA9IG4ucGFyZW50Tm9kZSkKICAgICAgICBpZiAobi5wYXJlbnROb2RlID09IGNvZGUgJiYgbiAhPSBtb3ZlcikgcmV0dXJuOwoKICAgICAgLy8gU2VlIGlmIHRoaXMgaXMgYSBjbGljayBpbiB0aGUgZ3V0dGVyCiAgICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChlKTsgbiAhPSB3cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQogICAgICAgIGlmIChuLnBhcmVudE5vZGUgPT0gZ3V0dGVyVGV4dCkgewogICAgICAgICAgaWYgKG9wdGlvbnMub25HdXR0ZXJDbGljaykKICAgICAgICAgICAgb3B0aW9ucy5vbkd1dHRlckNsaWNrKGluc3RhbmNlLCBpbmRleE9mKGd1dHRlclRleHQuY2hpbGROb2RlcywgbikgKyBzaG93aW5nRnJvbSwgZSk7CiAgICAgICAgICByZXR1cm4gZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICB9CgogICAgICB2YXIgc3RhcnQgPSBwb3NGcm9tTW91c2UoZSk7CgogICAgICBzd2l0Y2ggKGVfYnV0dG9uKGUpKSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoZ2Vja28gJiYgIW1hYykgb25Db250ZXh0TWVudShlKTsKICAgICAgICByZXR1cm47CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoc3RhcnQpIHNldEN1cnNvcihzdGFydC5saW5lLCBzdGFydC5jaCwgdHJ1ZSk7CiAgICAgICAgc2V0VGltZW91dChmb2N1c0lucHV0LCAyMCk7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gRm9yIGJ1dHRvbiAxLCBpZiBpdCB3YXMgY2xpY2tlZCBpbnNpZGUgdGhlIGVkaXRvcgogICAgICAvLyAocG9zRnJvbU1vdXNlIHJldHVybmluZyBub24tbnVsbCksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZQogICAgICAvLyBzZWxlY3Rpb24uCiAgICAgIGlmICghc3RhcnQpIHtpZiAoZV90YXJnZXQoZSkgPT0gc2Nyb2xsZXIpIGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CgogICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKCiAgICAgIHZhciBub3cgPSArbmV3IERhdGU7CiAgICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpKSB7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBzZXRUaW1lb3V0KGZvY3VzSW5wdXQsIDIwKTsKICAgICAgICByZXR1cm4gc2VsZWN0TGluZShzdGFydC5saW5lKTsKICAgICAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdENsaWNrLnBvcywgc3RhcnQpKSB7CiAgICAgICAgbGFzdERvdWJsZUNsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICByZXR1cm4gc2VsZWN0V29yZEF0KHN0YXJ0KTsKICAgICAgfSBlbHNlIHsgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07IH0KCiAgICAgIHZhciBsYXN0ID0gc3RhcnQsIGdvaW5nOwogICAgICBpZiAob3B0aW9ucy5kcmFnRHJvcCAmJiBkcmFnQW5kRHJvcCAmJiAhb3B0aW9ucy5yZWFkT25seSAmJiAhcG9zRXEoc2VsLmZyb20sIHNlbC50bykgJiYKICAgICAgICAgICFwb3NMZXNzKHN0YXJ0LCBzZWwuZnJvbSkgJiYgIXBvc0xlc3Moc2VsLnRvLCBzdGFydCkpIHsKICAgICAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBoYW5kbGUgdGhpcy4KICAgICAgICBpZiAod2Via2l0KSBzY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOwogICAgICAgIGZ1bmN0aW9uIGRyYWdFbmQoZTIpIHsKICAgICAgICAgIGlmICh3ZWJraXQpIHNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlOwogICAgICAgICAgZHJhZ2dpbmdUZXh0ID0gZmFsc2U7CiAgICAgICAgICB1cCgpOyBkcm9wKCk7CiAgICAgICAgICBpZiAoTWF0aC5hYnMoZS5jbGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhlLmNsaWVudFkgLSBlMi5jbGllbnRZKSA8IDEwKSB7CiAgICAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOwogICAgICAgICAgICBzZXRDdXJzb3Ioc3RhcnQubGluZSwgc3RhcnQuY2gsIHRydWUpOwogICAgICAgICAgICBmb2N1c0lucHV0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciB1cCA9IGNvbm5lY3QoZG9jdW1lbnQsICJtb3VzZXVwIiwgb3BlcmF0aW9uKGRyYWdFbmQpLCB0cnVlKTsKICAgICAgICB2YXIgZHJvcCA9IGNvbm5lY3Qoc2Nyb2xsZXIsICJkcm9wIiwgb3BlcmF0aW9uKGRyYWdFbmQpLCB0cnVlKTsKICAgICAgICBkcmFnZ2luZ1RleHQgPSB0cnVlOwogICAgICAgIC8vIElFJ3MgYXBwcm9hY2ggdG8gZHJhZ2dhYmxlCiAgICAgICAgaWYgKHNjcm9sbGVyLmRyYWdEcm9wKSBzY3JvbGxlci5kcmFnRHJvcCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICBzZXRDdXJzb3Ioc3RhcnQubGluZSwgc3RhcnQuY2gsIHRydWUpOwoKICAgICAgZnVuY3Rpb24gZXh0ZW5kKGUpIHsKICAgICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGUsIHRydWUpOwogICAgICAgIGlmIChjdXIgJiYgIXBvc0VxKGN1ciwgbGFzdCkpIHsKICAgICAgICAgIGlmICghZm9jdXNlZCkgb25Gb2N1cygpOwogICAgICAgICAgbGFzdCA9IGN1cjsKICAgICAgICAgIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7CiAgICAgICAgICB1cGRhdGVJbnB1dCA9IGZhbHNlOwogICAgICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoKTsKICAgICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQogICAgICAgICAgICBnb2luZyA9IHNldFRpbWVvdXQob3BlcmF0aW9uKGZ1bmN0aW9uKCl7ZXh0ZW5kKGUpO30pLCAxNTApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZnVuY3Rpb24gZG9uZShlKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKICAgICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICAgIGlmIChjdXIpIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBmb2N1c0lucHV0KCk7CiAgICAgICAgdXBkYXRlSW5wdXQgPSB0cnVlOwogICAgICAgIG1vdmUoKTsgdXAoKTsKICAgICAgfQogICAgICB2YXIgbW92ZSA9IGNvbm5lY3QoZG9jdW1lbnQsICJtb3VzZW1vdmUiLCBvcGVyYXRpb24oZnVuY3Rpb24oZSkgewogICAgICAgIGNsZWFyVGltZW91dChnb2luZyk7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBpZiAoIWllICYmICFlX2J1dHRvbihlKSkgZG9uZShlKTsKICAgICAgICBlbHNlIGV4dGVuZChlKTsKICAgICAgfSksIHRydWUpOwogICAgICB2YXIgdXAgPSBjb25uZWN0KGRvY3VtZW50LCAibW91c2V1cCIsIG9wZXJhdGlvbihkb25lKSwgdHJ1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBvbkRvdWJsZUNsaWNrKGUpIHsKICAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSByZXR1cm4gZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICBpZiAoIXN0YXJ0KSByZXR1cm47CiAgICAgIGxhc3REb3VibGVDbGljayA9IHt0aW1lOiArbmV3IERhdGUsIHBvczogc3RhcnR9OwogICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICBzZWxlY3RXb3JkQXQoc3RhcnQpOwogICAgfQogICAgZnVuY3Rpb24gb25Ecm9wKGUpIHsKICAgICAgaWYgKG9wdGlvbnMub25EcmFnRXZlbnQgJiYgb3B0aW9ucy5vbkRyYWdFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwogICAgICBpZiAoIXBvcyB8fCBvcHRpb25zLnJlYWRPbmx5KSByZXR1cm47CiAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGUpIHsKICAgICAgICBmdW5jdGlvbiBsb2FkRmlsZShmaWxlLCBpKSB7CiAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7CiAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRleHRbaV0gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgICBpZiAoKytyZWFkID09IG4pIHsKICAgICAgICAgICAgICBwb3MgPSBjbGlwUG9zKHBvcyk7CiAgICAgICAgICAgICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGVuZCA9IHJlcGxhY2VSYW5nZSh0ZXh0LmpvaW4oIiIpLCBwb3MsIHBvcyk7CiAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKHBvcywgZW5kKTsKICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7CiAgICAgICAgfQogICAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXkobiksIHJlYWQgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBsb2FkRmlsZShmaWxlc1tpXSwgaSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRG9uJ3QgZG8gYSByZXBsYWNlIGlmIHRoZSBkcm9wIGhhcHBlbmVkIGluc2lkZSBvZiB0aGUgc2VsZWN0ZWQgdGV4dC4KICAgICAgICBpZiAoZHJhZ2dpbmdUZXh0ICYmICEocG9zTGVzcyhwb3MsIHNlbC5mcm9tKSB8fCBwb3NMZXNzKHNlbC50bywgcG9zKSkpIHJldHVybjsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIHRleHQgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7CiAgICAgICAgICBpZiAodGV4dCkgewogICAgICAgICAgICBjb21wb3VuZENoYW5nZShmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YXIgY3VyRnJvbSA9IHNlbC5mcm9tLCBjdXJUbyA9IHNlbC50bzsKICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKHBvcywgcG9zKTsKICAgICAgICAgICAgICBpZiAoZHJhZ2dpbmdUZXh0KSByZXBsYWNlUmFuZ2UoIiIsIGN1ckZyb20sIGN1clRvKTsKICAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uKHRleHQpOwogICAgICAgICAgICAgIGZvY3VzSW5wdXQoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoKGUpe30KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gb25EcmFnU3RhcnQoZSkgewogICAgICB2YXIgdHh0ID0gZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLCB0eHQpOwogICAgICAKICAgICAgLy8gVXNlIGR1bW15IGltYWdlIGluc3RlYWQgb2YgZGVmYXVsdCBicm93c2VycyBpbWFnZS4KICAgICAgaWYgKGdlY2tvIHx8IGNocm9tZSB8fCBvcGVyYSkgewogICAgICAgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgICAgICBpbWcuc2NyID0gJ2RhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RkaEFnQUNBSUFBQUFBQUFQLy8veXdBQUFBQUFnQUNBQUFDQW9SUkFEcz0nOyAvLzF4MSBpbWFnZQogICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDApOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZG9IYW5kbGVCaW5kaW5nKGJvdW5kLCBkcm9wU2hpZnQpIHsKICAgICAgaWYgKHR5cGVvZiBib3VuZCA9PSAic3RyaW5nIikgewogICAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdOwogICAgICAgIGlmICghYm91bmQpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgcHJldlNoaWZ0ID0gc2hpZnRTZWxlY3Rpbmc7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG9wdGlvbnMucmVhZE9ubHkpIHN1cHByZXNzRWRpdHMgPSB0cnVlOwogICAgICAgIGlmIChkcm9wU2hpZnQpIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKICAgICAgICBib3VuZChpbnN0YW5jZSk7CiAgICAgIH0gY2F0Y2goZSkgewogICAgICAgIGlmIChlICE9IFBhc3MpIHRocm93IGU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHNoaWZ0U2VsZWN0aW5nID0gcHJldlNoaWZ0OwogICAgICAgIHN1cHByZXNzRWRpdHMgPSBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoZSkgewogICAgICAvLyBIYW5kbGUgYXV0byBrZXltYXAgdHJhbnNpdGlvbnMKICAgICAgdmFyIHN0YXJ0TWFwID0gZ2V0S2V5TWFwKG9wdGlvbnMua2V5TWFwKSwgbmV4dCA9IHN0YXJ0TWFwLmF1dG87CiAgICAgIGNsZWFyVGltZW91dChtYXliZVRyYW5zaXRpb24pOwogICAgICBpZiAobmV4dCAmJiAhaXNNb2RpZmllcktleShlKSkgbWF5YmVUcmFuc2l0aW9uID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoZ2V0S2V5TWFwKG9wdGlvbnMua2V5TWFwKSA9PSBzdGFydE1hcCkgewogICAgICAgICAgb3B0aW9ucy5rZXlNYXAgPSAobmV4dC5jYWxsID8gbmV4dC5jYWxsKG51bGwsIGluc3RhbmNlKSA6IG5leHQpOwogICAgICAgIH0KICAgICAgfSwgNTApOwoKICAgICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tlX3Byb3AoZSwgImtleUNvZGUiKV0sIGhhbmRsZWQgPSBmYWxzZTsKICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBlLmFsdEdyYXBoS2V5KSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChlX3Byb3AoZSwgImFsdEtleSIpKSBuYW1lID0gIkFsdC0iICsgbmFtZTsKICAgICAgaWYgKGVfcHJvcChlLCAiY3RybEtleSIpKSBuYW1lID0gIkN0cmwtIiArIG5hbWU7CiAgICAgIGlmIChlX3Byb3AoZSwgIm1ldGFLZXkiKSkgbmFtZSA9ICJDbWQtIiArIG5hbWU7CgogICAgICB2YXIgc3RvcHBlZCA9IGZhbHNlOwogICAgICBmdW5jdGlvbiBzdG9wKCkgeyBzdG9wcGVkID0gdHJ1ZTsgfQoKICAgICAgaWYgKGVfcHJvcChlLCAic2hpZnRLZXkiKSkgewogICAgICAgIGhhbmRsZWQgPSBsb29rdXBLZXkoIlNoaWZ0LSIgKyBuYW1lLCBvcHRpb25zLmV4dHJhS2V5cywgb3B0aW9ucy5rZXlNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7cmV0dXJuIGRvSGFuZGxlQmluZGluZyhiLCB0cnVlKTt9LCBzdG9wKQogICAgICAgICAgICAgICB8fCBsb29rdXBLZXkobmFtZSwgb3B0aW9ucy5leHRyYUtleXMsIG9wdGlvbnMua2V5TWFwLCBmdW5jdGlvbihiKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09ICJzdHJpbmciICYmIC9eZ29bQS1aXS8udGVzdChiKSkgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhiKTsKICAgICAgICAgICAgICAgfSwgc3RvcCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlZCA9IGxvb2t1cEtleShuYW1lLCBvcHRpb25zLmV4dHJhS2V5cywgb3B0aW9ucy5rZXlNYXAsIGRvSGFuZGxlQmluZGluZywgc3RvcCk7CiAgICAgIH0KICAgICAgaWYgKHN0b3BwZWQpIGhhbmRsZWQgPSBmYWxzZTsKICAgICAgaWYgKGhhbmRsZWQpIHsKICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIHJlc3RhcnRCbGluaygpOwogICAgICAgIGlmIChpZSkgeyBlLm9sZEtleUNvZGUgPSBlLmtleUNvZGU7IGUua2V5Q29kZSA9IDA7IH0KICAgICAgfQogICAgICByZXR1cm4gaGFuZGxlZDsKICAgIH0KICAgIGZ1bmN0aW9uIGhhbmRsZUNoYXJCaW5kaW5nKGUsIGNoKSB7CiAgICAgIHZhciBoYW5kbGVkID0gbG9va3VwS2V5KCInIiArIGNoICsgIiciLCBvcHRpb25zLmV4dHJhS2V5cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5rZXlNYXAsIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhiLCB0cnVlKTsgfSk7CiAgICAgIGlmIChoYW5kbGVkKSB7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICByZXN0YXJ0QmxpbmsoKTsKICAgICAgfQogICAgICByZXR1cm4gaGFuZGxlZDsKICAgIH0KCiAgICB2YXIgbGFzdFN0b3BwZWRLZXkgPSBudWxsLCBtYXliZVRyYW5zaXRpb247CiAgICBmdW5jdGlvbiBvbktleURvd24oZSkgewogICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKICAgICAgaWYgKGllICYmIGUua2V5Q29kZSA9PSAyNykgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH0KICAgICAgaWYgKHBvbGxpbmdGYXN0KSB7IGlmIChyZWFkSW5wdXQoKSkgcG9sbGluZ0Zhc3QgPSBmYWxzZTsgfQogICAgICBpZiAob3B0aW9ucy5vbktleUV2ZW50ICYmIG9wdGlvbnMub25LZXlFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgdmFyIGNvZGUgPSBlX3Byb3AoZSwgImtleUNvZGUiKTsKICAgICAgLy8gSUUgZG9lcyBzdHJhbmdlIHRoaW5ncyB3aXRoIGVzY2FwZS4KICAgICAgc2V0U2hpZnQoY29kZSA9PSAxNiB8fCBlX3Byb3AoZSwgInNoaWZ0S2V5IikpOwogICAgICAvLyBGaXJzdCBnaXZlIG9uS2V5RXZlbnQgb3B0aW9uIGEgY2hhbmNlIHRvIGhhbmRsZSB0aGlzLgogICAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoZSk7CiAgICAgIGlmIChvcGVyYSkgewogICAgICAgIGxhc3RTdG9wcGVkS2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsOwogICAgICAgIC8vIE9wZXJhIGhhcyBubyBjdXQgZXZlbnQuLi4gd2UgdHJ5IHRvIGF0IGxlYXN0IGNhdGNoIHRoZSBrZXkgY29tYm8KICAgICAgICBpZiAoIWhhbmRsZWQgJiYgY29kZSA9PSA4OCAmJiBlX3Byb3AoZSwgbWFjID8gIm1ldGFLZXkiIDogImN0cmxLZXkiKSkKICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb24oIiIpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsKICAgICAgaWYgKHBvbGxpbmdGYXN0KSByZWFkSW5wdXQoKTsKICAgICAgaWYgKG9wdGlvbnMub25LZXlFdmVudCAmJiBvcHRpb25zLm9uS2V5RXZlbnQoaW5zdGFuY2UsIGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAgIHZhciBrZXlDb2RlID0gZV9wcm9wKGUsICJrZXlDb2RlIiksIGNoYXJDb2RlID0gZV9wcm9wKGUsICJjaGFyQ29kZSIpOwogICAgICBpZiAob3BlcmEgJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBlZEtleSkge2xhc3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KICAgICAgaWYgKCgob3BlcmEgJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpIHx8IGtodG1sKSAmJiBoYW5kbGVLZXlCaW5kaW5nKGUpKSByZXR1cm47CiAgICAgIHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNvZGUgOiBjaGFyQ29kZSk7CiAgICAgIGlmIChvcHRpb25zLmVsZWN0cmljQ2hhcnMgJiYgbW9kZS5lbGVjdHJpY0NoYXJzICYmIG9wdGlvbnMuc21hcnRJbmRlbnQgJiYgIW9wdGlvbnMucmVhZE9ubHkpIHsKICAgICAgICBpZiAobW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoY2gpID4gLTEpCiAgICAgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpIHtpbmRlbnRMaW5lKHNlbC50by5saW5lLCAic21hcnQiKTt9KSwgNzUpOwogICAgICB9CiAgICAgIGlmIChoYW5kbGVDaGFyQmluZGluZyhlLCBjaCkpIHJldHVybjsKICAgICAgZmFzdFBvbGwoKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uS2V5VXAoZSkgewogICAgICBpZiAob3B0aW9ucy5vbktleUV2ZW50ICYmIG9wdGlvbnMub25LZXlFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgaWYgKGVfcHJvcChlLCAia2V5Q29kZSIpID09IDE2KSBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gb25Gb2N1cygpIHsKICAgICAgaWYgKG9wdGlvbnMucmVhZE9ubHkgPT0gIm5vY3Vyc29yIikgcmV0dXJuOwogICAgICBpZiAoIWZvY3VzZWQpIHsKICAgICAgICBpZiAob3B0aW9ucy5vbkZvY3VzKSBvcHRpb25zLm9uRm9jdXMoaW5zdGFuY2UpOwogICAgICAgIGZvY3VzZWQgPSB0cnVlOwogICAgICAgIGlmIChzY3JvbGxlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykgPT0gLTEpCiAgICAgICAgICBzY3JvbGxlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLWZvY3VzZWQiOwogICAgICAgIGlmICghbGVhdmVJbnB1dEFsb25lKSByZXNldElucHV0KHRydWUpOwogICAgICB9CiAgICAgIHNsb3dQb2xsKCk7CiAgICAgIHJlc3RhcnRCbGluaygpOwogICAgfQogICAgZnVuY3Rpb24gb25CbHVyKCkgewogICAgICBpZiAoZm9jdXNlZCkgewogICAgICAgIGlmIChvcHRpb25zLm9uQmx1cikgb3B0aW9ucy5vbkJsdXIoaW5zdGFuY2UpOwogICAgICAgIGZvY3VzZWQgPSBmYWxzZTsKICAgICAgICBpZiAoYnJhY2tldEhpZ2hsaWdodGVkKQogICAgICAgICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpIHsgYnJhY2tldEhpZ2hsaWdodGVkKCk7IGJyYWNrZXRIaWdobGlnaHRlZCA9IG51bGw7IH0KICAgICAgICAgIH0pKCk7CiAgICAgICAgc2Nyb2xsZXIuY2xhc3NOYW1lID0gc2Nyb2xsZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCAiIik7CiAgICAgIH0KICAgICAgY2xlYXJJbnRlcnZhbChibGlua2VyKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtpZiAoIWZvY3VzZWQpIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDt9LCAxNTApOwogICAgfQoKICAgIGZ1bmN0aW9uIGNob3BEZWx0YShkZWx0YSkgewogICAgICAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIHNjcm9sbCBhIGxpdHRsZSBiaXQgZm9yIGFueSBub256ZXJvIGRlbHRhLgogICAgICBpZiAoZGVsdGEgPiAwLjAgJiYgZGVsdGEgPCAxLjApIHJldHVybiAxOwogICAgICBlbHNlIGlmIChkZWx0YSA+IC0xLjAgJiYgZGVsdGEgPCAwLjApIHJldHVybiAtMTsKICAgICAgZWxzZSByZXR1cm4gTWF0aC5yb3VuZChkZWx0YSk7CiAgICB9CgogICAgZnVuY3Rpb24gb25Nb3VzZVdoZWVsKGUpIHsKICAgICAgdmFyIGRlbHRhWCA9IDAsIGRlbHRhWSA9IDA7CiAgICAgIGlmIChlLnR5cGUgPT0gIkRPTU1vdXNlU2Nyb2xsIikgeyAvLyBGaXJlZm94CiAgICAgICAgdmFyIGRlbHRhID0gLWUuZGV0YWlsICogOC4wOwogICAgICAgIGlmIChlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIGRlbHRhWCA9IGRlbHRhOwogICAgICAgIGVsc2UgaWYgKGUuYXhpcyA9PSBlLlZFUlRJQ0FMX0FYSVMpIGRlbHRhWSA9IGRlbHRhOwogICAgICB9IGVsc2UgaWYgKGUud2hlZWxEZWx0YVggIT09IHVuZGVmaW5lZCAmJiBlLndoZWVsRGVsdGFZICE9PSB1bmRlZmluZWQpIHsgLy8gV2ViS2l0CiAgICAgICAgZGVsdGFYID0gZS53aGVlbERlbHRhWCAvIDMuMDsKICAgICAgICBkZWx0YVkgPSBlLndoZWVsRGVsdGFZIC8gMy4wOwogICAgICB9IGVsc2UgaWYgKGUud2hlZWxEZWx0YSAhPT0gdW5kZWZpbmVkKSB7IC8vIElFIG9yIE9wZXJhCiAgICAgICAgZGVsdGFZID0gZS53aGVlbERlbHRhIC8gMy4wOwogICAgICB9CgogICAgICB2YXIgc2Nyb2xsZWQgPSBmYWxzZTsKICAgICAgZGVsdGFYID0gY2hvcERlbHRhKGRlbHRhWCk7CiAgICAgIGRlbHRhWSA9IGNob3BEZWx0YShkZWx0YVkpOwogICAgICBpZiAoKGRlbHRhWCA+IDAgJiYgc2Nyb2xsZXIuc2Nyb2xsTGVmdCA+IDApIHx8CiAgICAgICAgICAoZGVsdGFYIDwgMCAmJiBzY3JvbGxlci5zY3JvbGxMZWZ0ICsgc2Nyb2xsZXIuY2xpZW50V2lkdGggPCBzY3JvbGxlci5zY3JvbGxXaWR0aCkpIHsKICAgICAgICBzY3JvbGxlci5zY3JvbGxMZWZ0IC09IGRlbHRhWDsKICAgICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKChkZWx0YVkgPiAwICYmIHNjcm9sbGJhci5zY3JvbGxUb3AgPiAwKSB8fAogICAgICAgICAgKGRlbHRhWSA8IDAgJiYgc2Nyb2xsYmFyLnNjcm9sbFRvcCArIHNjcm9sbGJhci5jbGllbnRIZWlnaHQgPCBzY3JvbGxiYXIuc2Nyb2xsSGVpZ2h0KSkgewogICAgICAgIHNjcm9sbGJhci5zY3JvbGxUb3AgLT0gZGVsdGFZOwogICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoc2Nyb2xsZWQpIGVfc3RvcChlKTsKICAgIH0KCiAgICAvLyBSZXBsYWNlIHRoZSByYW5nZSBmcm9tIGZyb20gdG8gdG8gYnkgdGhlIHN0cmluZ3MgaW4gbmV3VGV4dC4KICAgIC8vIEFmdGVyd2FyZHMsIHNldCB0aGUgc2VsZWN0aW9uIHRvIHNlbEZyb20sIHNlbFRvLgogICAgZnVuY3Rpb24gdXBkYXRlTGluZXMoZnJvbSwgdG8sIG5ld1RleHQsIHNlbEZyb20sIHNlbFRvKSB7CiAgICAgIGlmIChzdXBwcmVzc0VkaXRzKSByZXR1cm47CiAgICAgIGlmIChoaXN0b3J5KSB7CiAgICAgICAgdmFyIG9sZCA9IFtdOwogICAgICAgIGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsgb2xkLnB1c2gobGluZS50ZXh0KTsgfSk7CiAgICAgICAgaGlzdG9yeS5hZGRDaGFuZ2UoZnJvbS5saW5lLCBuZXdUZXh0Lmxlbmd0aCwgb2xkKTsKICAgICAgICB3aGlsZSAoaGlzdG9yeS5kb25lLmxlbmd0aCA+IG9wdGlvbnMudW5kb0RlcHRoKSBoaXN0b3J5LmRvbmUuc2hpZnQoKTsKICAgICAgfQogICAgICB1cGRhdGVMaW5lc05vVW5kbyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pOwogICAgfQogICAgZnVuY3Rpb24gdW5yZWRvSGVscGVyKGZyb20sIHRvKSB7CiAgICAgIGlmICghZnJvbS5sZW5ndGgpIHJldHVybjsKICAgICAgdmFyIHNldCA9IGZyb20ucG9wKCksIG91dCA9IFtdOwogICAgICBmb3IgKHZhciBpID0gc2V0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7CiAgICAgICAgdmFyIGNoYW5nZSA9IHNldFtpXTsKICAgICAgICB2YXIgcmVwbGFjZWQgPSBbXSwgZW5kID0gY2hhbmdlLnN0YXJ0ICsgY2hhbmdlLmFkZGVkOwogICAgICAgIGRvYy5pdGVyKGNoYW5nZS5zdGFydCwgZW5kLCBmdW5jdGlvbihsaW5lKSB7IHJlcGxhY2VkLnB1c2gobGluZS50ZXh0KTsgfSk7CiAgICAgICAgb3V0LnB1c2goe3N0YXJ0OiBjaGFuZ2Uuc3RhcnQsIGFkZGVkOiBjaGFuZ2Uub2xkLmxlbmd0aCwgb2xkOiByZXBsYWNlZH0pOwogICAgICAgIHZhciBwb3MgPSB7bGluZTogY2hhbmdlLnN0YXJ0ICsgY2hhbmdlLm9sZC5sZW5ndGggLSAxLAogICAgICAgICAgICAgICAgICAgY2g6IGVkaXRFbmQocmVwbGFjZWRbcmVwbGFjZWQubGVuZ3RoLTFdLCBjaGFuZ2Uub2xkW2NoYW5nZS5vbGQubGVuZ3RoLTFdKX07CiAgICAgICAgdXBkYXRlTGluZXNOb1VuZG8oe2xpbmU6IGNoYW5nZS5zdGFydCwgY2g6IDB9LCB7bGluZTogZW5kIC0gMSwgY2g6IGdldExpbmUoZW5kLTEpLnRleHQubGVuZ3RofSwgY2hhbmdlLm9sZCwgcG9zLCBwb3MpOwogICAgICB9CiAgICAgIHVwZGF0ZUlucHV0ID0gdHJ1ZTsKICAgICAgdG8ucHVzaChvdXQpOwogICAgfQogICAgZnVuY3Rpb24gdW5kbygpIHt1bnJlZG9IZWxwZXIoaGlzdG9yeS5kb25lLCBoaXN0b3J5LnVuZG9uZSk7fQogICAgZnVuY3Rpb24gcmVkbygpIHt1bnJlZG9IZWxwZXIoaGlzdG9yeS51bmRvbmUsIGhpc3RvcnkuZG9uZSk7fQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVzTm9VbmRvKGZyb20sIHRvLCBuZXdUZXh0LCBzZWxGcm9tLCBzZWxUbykgewogICAgICBpZiAoc3VwcHJlc3NFZGl0cykgcmV0dXJuOwogICAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIG1heExpbmVMZW5ndGggPSBtYXhMaW5lLmxlbmd0aDsKICAgICAgaWYgKCFvcHRpb25zLmxpbmVXcmFwcGluZykKICAgICAgICBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICBpZiAoIWxpbmUuaGlkZGVuICYmIGxpbmUudGV4dC5sZW5ndGggPT0gbWF4TGluZUxlbmd0aCkge3JlY29tcHV0ZU1heExlbmd0aCA9IHRydWU7IHJldHVybiB0cnVlO30KICAgICAgICB9KTsKICAgICAgaWYgKGZyb20ubGluZSAhPSB0by5saW5lIHx8IG5ld1RleHQubGVuZ3RoID4gMSkgZ3V0dGVyRGlydHkgPSB0cnVlOwoKICAgICAgdmFyIG5saW5lcyA9IHRvLmxpbmUgLSBmcm9tLmxpbmUsIGZpcnN0TGluZSA9IGdldExpbmUoZnJvbS5saW5lKSwgbGFzdExpbmUgPSBnZXRMaW5lKHRvLmxpbmUpOwogICAgICAvLyBGaXJzdCBhZGp1c3QgdGhlIGxpbmUgc3RydWN0dXJlLCB0YWtpbmcgc29tZSBjYXJlIHRvIGxlYXZlIGhpZ2hsaWdodGluZyBpbnRhY3QuCiAgICAgIGlmIChmcm9tLmNoID09IDAgJiYgdG8uY2ggPT0gMCAmJiBuZXdUZXh0W25ld1RleHQubGVuZ3RoIC0gMV0gPT0gIiIpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtlCiAgICAgICAgLy8gc3VyZSBsaW5lIG9iamVjdHMgbW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgogICAgICAgIHZhciBhZGRlZCA9IFtdLCBwcmV2TGluZSA9IG51bGw7CiAgICAgICAgaWYgKGZyb20ubGluZSkgewogICAgICAgICAgcHJldkxpbmUgPSBnZXRMaW5lKGZyb20ubGluZSAtIDEpOwogICAgICAgICAgcHJldkxpbmUuZml4TWFya0VuZHMobGFzdExpbmUpOwogICAgICAgIH0gZWxzZSBsYXN0TGluZS5maXhNYXJrU3RhcnRzKCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBuZXdUZXh0Lmxlbmd0aCAtIDE7IGkgPCBlOyArK2kpCiAgICAgICAgICBhZGRlZC5wdXNoKExpbmUuaW5oZXJpdE1hcmtzKG5ld1RleHRbaV0sIHByZXZMaW5lKSk7CiAgICAgICAgaWYgKG5saW5lcykgZG9jLnJlbW92ZShmcm9tLmxpbmUsIG5saW5lcywgY2FsbGJhY2tzKTsKICAgICAgICBpZiAoYWRkZWQubGVuZ3RoKSBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOwogICAgICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBsYXN0TGluZSkgewogICAgICAgIGlmIChuZXdUZXh0Lmxlbmd0aCA9PSAxKQogICAgICAgICAgZmlyc3RMaW5lLnJlcGxhY2UoZnJvbS5jaCwgdG8uY2gsIG5ld1RleHRbMF0pOwogICAgICAgIGVsc2UgewogICAgICAgICAgbGFzdExpbmUgPSBmaXJzdExpbmUuc3BsaXQodG8uY2gsIG5ld1RleHRbbmV3VGV4dC5sZW5ndGgtMV0pOwogICAgICAgICAgZmlyc3RMaW5lLnJlcGxhY2UoZnJvbS5jaCwgbnVsbCwgbmV3VGV4dFswXSk7CiAgICAgICAgICBmaXJzdExpbmUuZml4TWFya0VuZHMobGFzdExpbmUpOwogICAgICAgICAgdmFyIGFkZGVkID0gW107CiAgICAgICAgICBmb3IgKHZhciBpID0gMSwgZSA9IG5ld1RleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkKICAgICAgICAgICAgYWRkZWQucHVzaChMaW5lLmluaGVyaXRNYXJrcyhuZXdUZXh0W2ldLCBmaXJzdExpbmUpKTsKICAgICAgICAgIGFkZGVkLnB1c2gobGFzdExpbmUpOwogICAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpIHsKICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBudWxsLCBuZXdUZXh0WzBdKTsKICAgICAgICBsYXN0TGluZS5yZXBsYWNlKG51bGwsIHRvLmNoLCAiIik7CiAgICAgICAgZmlyc3RMaW5lLmFwcGVuZChsYXN0TGluZSk7CiAgICAgICAgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMsIGNhbGxiYWNrcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGFkZGVkID0gW107CiAgICAgICAgZmlyc3RMaW5lLnJlcGxhY2UoZnJvbS5jaCwgbnVsbCwgbmV3VGV4dFswXSk7CiAgICAgICAgbGFzdExpbmUucmVwbGFjZShudWxsLCB0by5jaCwgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aC0xXSk7CiAgICAgICAgZmlyc3RMaW5lLmZpeE1hcmtFbmRzKGxhc3RMaW5lKTsKICAgICAgICBmb3IgKHZhciBpID0gMSwgZSA9IG5ld1RleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkKICAgICAgICAgIGFkZGVkLnB1c2goTGluZS5pbmhlcml0TWFya3MobmV3VGV4dFtpXSwgZmlyc3RMaW5lKSk7CiAgICAgICAgaWYgKG5saW5lcyA+IDEpIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMSwgY2FsbGJhY2tzKTsKICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICAgfQogICAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKICAgICAgICB2YXIgcGVyTGluZSA9IE1hdGgubWF4KDUsIHNjcm9sbGVyLmNsaWVudFdpZHRoIC8gY2hhcldpZHRoKCkgLSAzKTsKICAgICAgICBkb2MuaXRlcihmcm9tLmxpbmUsIGZyb20ubGluZSArIG5ld1RleHQubGVuZ3RoLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICBpZiAobGluZS5oaWRkZW4pIHJldHVybjsKICAgICAgICAgIHZhciBndWVzcyA9IE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMTsKICAgICAgICAgIGlmIChndWVzcyAhPSBsaW5lLmhlaWdodCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCBndWVzcyk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCBmcm9tLmxpbmUgKyBuZXdUZXh0Lmxlbmd0aCwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgdmFyIGwgPSBsaW5lLnRleHQ7CiAgICAgICAgICBpZiAoIWxpbmUuaGlkZGVuICYmIGwubGVuZ3RoID4gbWF4TGluZUxlbmd0aCkgewogICAgICAgICAgICBtYXhMaW5lID0gbDsgbWF4TGluZUxlbmd0aCA9IGwubGVuZ3RoOyBtYXhMaW5lQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmIChyZWNvbXB1dGVNYXhMZW5ndGgpIHVwZGF0ZU1heExpbmUgPSB0cnVlOwogICAgICB9CgogICAgICAvLyBBZGQgdGhlc2UgbGluZXMgdG8gdGhlIHdvcmsgYXJyYXksIHNvIHRoYXQgdGhleSB3aWxsIGJlCiAgICAgIC8vIGhpZ2hsaWdodGVkLiBBZGp1c3Qgd29yayBsaW5lcyBpZiBsaW5lcyB3ZXJlIGFkZGVkL3JlbW92ZWQuCiAgICAgIHZhciBuZXdXb3JrID0gW10sIGxlbmRpZmYgPSBuZXdUZXh0Lmxlbmd0aCAtIG5saW5lcyAtIDE7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gd29yay5sZW5ndGg7IGkgPCBsOyArK2kpIHsKICAgICAgICB2YXIgdGFzayA9IHdvcmtbaV07CiAgICAgICAgaWYgKHRhc2sgPCBmcm9tLmxpbmUpIG5ld1dvcmsucHVzaCh0YXNrKTsKICAgICAgICBlbHNlIGlmICh0YXNrID4gdG8ubGluZSkgbmV3V29yay5wdXNoKHRhc2sgKyBsZW5kaWZmKTsKICAgICAgfQogICAgICB2YXIgaGxFbmQgPSBmcm9tLmxpbmUgKyBNYXRoLm1pbihuZXdUZXh0Lmxlbmd0aCwgNTAwKTsKICAgICAgaGlnaGxpZ2h0TGluZXMoZnJvbS5saW5lLCBobEVuZCk7CiAgICAgIG5ld1dvcmsucHVzaChobEVuZCk7CiAgICAgIHdvcmsgPSBuZXdXb3JrOwogICAgICBzdGFydFdvcmtlcigxMDApOwogICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbmVzIGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheQogICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IGZyb20ubGluZSwgdG86IHRvLmxpbmUgKyAxLCBkaWZmOiBsZW5kaWZmfSk7CiAgICAgIHZhciBjaGFuZ2VPYmogPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBuZXdUZXh0fTsKICAgICAgaWYgKHRleHRDaGFuZ2VkKSB7CiAgICAgICAgZm9yICh2YXIgY3VyID0gdGV4dENoYW5nZWQ7IGN1ci5uZXh0OyBjdXIgPSBjdXIubmV4dCkge30KICAgICAgICBjdXIubmV4dCA9IGNoYW5nZU9iajsKICAgICAgfSBlbHNlIHRleHRDaGFuZ2VkID0gY2hhbmdlT2JqOwoKICAgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24KICAgICAgZnVuY3Rpb24gdXBkYXRlTGluZShuKSB7cmV0dXJuIG4gPD0gTWF0aC5taW4odG8ubGluZSwgdG8ubGluZSArIGxlbmRpZmYpID8gbiA6IG4gKyBsZW5kaWZmO30KICAgICAgc2V0U2VsZWN0aW9uKGNsaXBQb3Moc2VsRnJvbSksIGNsaXBQb3Moc2VsVG8pLAogICAgICAgICAgICAgICAgICAgdXBkYXRlTGluZShzZWwuZnJvbS5saW5lKSwgdXBkYXRlTGluZShzZWwudG8ubGluZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZVZlcnRpY2FsU2Nyb2xsKHNjcm9sbFRvcCkgewogICAgICB2YXIgdGggPSB0ZXh0SGVpZ2h0KCksIHZpcnR1YWxIZWlnaHQgPSBNYXRoLmZsb29yKGRvYy5oZWlnaHQgKiB0aCArIDIgKiBwYWRkaW5nVG9wKCkpLCBzY3JvbGxiYXJIZWlnaHQgPSBzY3JvbGxlci5jbGllbnRIZWlnaHQ7CiAgICAgIHNjcm9sbGJhci5zdHlsZS5oZWlnaHQgPSBzY3JvbGxiYXJIZWlnaHQgKyAicHgiOwogICAgICBpZiAoc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KQogICAgICAgIHNjcm9sbGJhcklubmVyLnN0eWxlLmhlaWdodCA9IHZpcnR1YWxIZWlnaHQgKyAicHgiOwogICAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIgZGl2IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgdmlydHVhbCBzY3JvbGwgcG9zaXRpb24KICAgICAgaWYgKHNjcm9sbFRvcCAhPSBudWxsKSBzY3JvbGxiYXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOwogICAgICBtb3Zlci5zdHlsZS50b3AgPSAoZGlzcGxheU9mZnNldCAqIHRoIC0gc2Nyb2xsYmFyLnNjcm9sbFRvcCkgKyAicHgiOwogICAgICBzY3JvbGxiYXIuc3R5bGUuZGlzcGxheSA9ICh2aXJ0dWFsSGVpZ2h0ID4gc2Nyb2xsYmFySGVpZ2h0KSA/ICJibG9jayIgOiAibm9uZSI7CiAgICB9CiAgCiAgICAvLyBPbiBNYWMgT1MgWCBMaW9uIGFuZCB1cCwgZGV0ZWN0IHdoZXRoZXIgdGhlIG1vdXNlIGlzIHBsdWdnZWQgaW4gYnkgbWVhc3VyaW5nIAogICAgLy8gdGhlIHdpZHRoIG9mIGEgZGl2IHdpdGggYSBzY3JvbGxiYXIgaW4gaXQuIElmIHRoZSB3aWR0aCBpcyA8PSAxLCB0aGVuCiAgICAvLyB0aGUgbW91c2UgaXNuJ3QgcGx1Z2dlZCBpbiBhbmQgc2Nyb2xsYmFycyBzaG91bGQgb3ZlcmxhcCB0aGUgY29udGVudC4KICAgIGZ1bmN0aW9uIG92ZXJsYXBTY3JvbGxiYXJzKCkgewogICAgICB2YXIgdG1wU2IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKICAgICAgICAgIHRtcFNiSW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgdG1wU2IuY2xhc3NOYW1lID0gIkNvZGVNaXJyb3Itc2Nyb2xsYmFyIjsKICAgICAgdG1wU2Iuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IGhlaWdodDogMTAwcHg7IjsKICAgICAgdG1wU2JJbm5lci5jbGFzc05hbWUgPSAiQ29kZU1pcnJvci1zY3JvbGxiYXItaW5uZXIiOwogICAgICB0bXBTYklubmVyLnN0eWxlLmhlaWdodCA9ICIyMDBweCI7CiAgICAgIHRtcFNiLmFwcGVuZENoaWxkKHRtcFNiSW5uZXIpOwoKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0bXBTYik7CiAgICAgIHZhciByZXN1bHQgPSAodG1wU2Iub2Zmc2V0V2lkdGggPD0gMSk7CiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodG1wU2IpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbXB1dGVNYXhMZW5ndGgoKSB7CiAgICAgIHZhciBtYXhMaW5lTGVuZ3RoID0gMDsgCiAgICAgIG1heExpbmUgPSAiIjsgbWF4TGluZUNoYW5nZWQgPSB0cnVlOwogICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgIHZhciBsID0gbGluZS50ZXh0OwogICAgICAgIGlmICghbGluZS5oaWRkZW4gJiYgbC5sZW5ndGggPiBtYXhMaW5lTGVuZ3RoKSB7CiAgICAgICAgICBtYXhMaW5lTGVuZ3RoID0gbC5sZW5ndGg7IG1heExpbmUgPSBsOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHVwZGF0ZU1heExpbmUgPSBmYWxzZTsKICAgIH0KCiAgICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoY29kZSwgZnJvbSwgdG8pIHsKICAgICAgZnJvbSA9IGNsaXBQb3MoZnJvbSk7CiAgICAgIGlmICghdG8pIHRvID0gZnJvbTsgZWxzZSB0byA9IGNsaXBQb3ModG8pOwogICAgICBjb2RlID0gc3BsaXRMaW5lcyhjb2RlKTsKICAgICAgZnVuY3Rpb24gYWRqdXN0UG9zKHBvcykgewogICAgICAgIGlmIChwb3NMZXNzKHBvcywgZnJvbSkpIHJldHVybiBwb3M7CiAgICAgICAgaWYgKCFwb3NMZXNzKHRvLCBwb3MpKSByZXR1cm4gZW5kOwogICAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUgKyBjb2RlLmxlbmd0aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7CiAgICAgICAgdmFyIGNoID0gcG9zLmNoOwogICAgICAgIGlmIChwb3MubGluZSA9PSB0by5saW5lKQogICAgICAgICAgY2ggKz0gY29kZVtjb2RlLmxlbmd0aC0xXS5sZW5ndGggLSAodG8uY2ggLSAodG8ubGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDogMCkpOwogICAgICAgIHJldHVybiB7bGluZTogbGluZSwgY2g6IGNofTsKICAgICAgfQogICAgICB2YXIgZW5kOwogICAgICByZXBsYWNlUmFuZ2UxKGNvZGUsIGZyb20sIHRvLCBmdW5jdGlvbihlbmQxKSB7CiAgICAgICAgZW5kID0gZW5kMTsKICAgICAgICByZXR1cm4ge2Zyb206IGFkanVzdFBvcyhzZWwuZnJvbSksIHRvOiBhZGp1c3RQb3Moc2VsLnRvKX07CiAgICAgIH0pOwogICAgICByZXR1cm4gZW5kOwogICAgfQogICAgZnVuY3Rpb24gcmVwbGFjZVNlbGVjdGlvbihjb2RlLCBjb2xsYXBzZSkgewogICAgICByZXBsYWNlUmFuZ2UxKHNwbGl0TGluZXMoY29kZSksIHNlbC5mcm9tLCBzZWwudG8sIGZ1bmN0aW9uKGVuZCkgewogICAgICAgIGlmIChjb2xsYXBzZSA9PSAiZW5kIikgcmV0dXJuIHtmcm9tOiBlbmQsIHRvOiBlbmR9OwogICAgICAgIGVsc2UgaWYgKGNvbGxhcHNlID09ICJzdGFydCIpIHJldHVybiB7ZnJvbTogc2VsLmZyb20sIHRvOiBzZWwuZnJvbX07CiAgICAgICAgZWxzZSByZXR1cm4ge2Zyb206IHNlbC5mcm9tLCB0bzogZW5kfTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UxKGNvZGUsIGZyb20sIHRvLCBjb21wdXRlU2VsKSB7CiAgICAgIHZhciBlbmRjaCA9IGNvZGUubGVuZ3RoID09IDEgPyBjb2RlWzBdLmxlbmd0aCArIGZyb20uY2ggOiBjb2RlW2NvZGUubGVuZ3RoLTFdLmxlbmd0aDsKICAgICAgdmFyIG5ld1NlbCA9IGNvbXB1dGVTZWwoe2xpbmU6IGZyb20ubGluZSArIGNvZGUubGVuZ3RoIC0gMSwgY2g6IGVuZGNofSk7CiAgICAgIHVwZGF0ZUxpbmVzKGZyb20sIHRvLCBjb2RlLCBuZXdTZWwuZnJvbSwgbmV3U2VsLnRvKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRSYW5nZShmcm9tLCB0bykgewogICAgICB2YXIgbDEgPSBmcm9tLmxpbmUsIGwyID0gdG8ubGluZTsKICAgICAgaWYgKGwxID09IGwyKSByZXR1cm4gZ2V0TGluZShsMSkudGV4dC5zbGljZShmcm9tLmNoLCB0by5jaCk7CiAgICAgIHZhciBjb2RlID0gW2dldExpbmUobDEpLnRleHQuc2xpY2UoZnJvbS5jaCldOwogICAgICBkb2MuaXRlcihsMSArIDEsIGwyLCBmdW5jdGlvbihsaW5lKSB7IGNvZGUucHVzaChsaW5lLnRleHQpOyB9KTsKICAgICAgY29kZS5wdXNoKGdldExpbmUobDIpLnRleHQuc2xpY2UoMCwgdG8uY2gpKTsKICAgICAgcmV0dXJuIGNvZGUuam9pbigiXG4iKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigpIHsKICAgICAgcmV0dXJuIGdldFJhbmdlKHNlbC5mcm9tLCBzZWwudG8pOwogICAgfQoKICAgIHZhciBwb2xsaW5nRmFzdCA9IGZhbHNlOyAvLyBFbnN1cmVzIHNsb3dQb2xsIGRvZXNuJ3QgY2FuY2VsIGZhc3RQb2xsCiAgICBmdW5jdGlvbiBzbG93UG9sbCgpIHsKICAgICAgaWYgKHBvbGxpbmdGYXN0KSByZXR1cm47CiAgICAgIHBvbGwuc2V0KG9wdGlvbnMucG9sbEludGVydmFsLCBmdW5jdGlvbigpIHsKICAgICAgICBzdGFydE9wZXJhdGlvbigpOwogICAgICAgIHJlYWRJbnB1dCgpOwogICAgICAgIGlmIChmb2N1c2VkKSBzbG93UG9sbCgpOwogICAgICAgIGVuZE9wZXJhdGlvbigpOwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGZhc3RQb2xsKCkgewogICAgICB2YXIgbWlzc2VkID0gZmFsc2U7CiAgICAgIHBvbGxpbmdGYXN0ID0gdHJ1ZTsKICAgICAgZnVuY3Rpb24gcCgpIHsKICAgICAgICBzdGFydE9wZXJhdGlvbigpOwogICAgICAgIHZhciBjaGFuZ2VkID0gcmVhZElucHV0KCk7CiAgICAgICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBwb2xsLnNldCg2MCwgcCk7fQogICAgICAgIGVsc2Uge3BvbGxpbmdGYXN0ID0gZmFsc2U7IHNsb3dQb2xsKCk7fQogICAgICAgIGVuZE9wZXJhdGlvbigpOwogICAgICB9CiAgICAgIHBvbGwuc2V0KDIwLCBwKTsKICAgIH0KCiAgICAvLyBQcmV2aW5wdXQgaXMgYSBoYWNrIHRvIHdvcmsgd2l0aCBJTUUuIElmIHdlIHJlc2V0IHRoZSB0ZXh0YXJlYQogICAgLy8gb24gZXZlcnkgY2hhbmdlLCB0aGF0IGJyZWFrcyBJTUUuIFNvIHdlIGxvb2sgZm9yIGNoYW5nZXMKICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBjb250ZW50IGluc3RlYWQuIChNb2Rlcm4gYnJvd3NlcnMgaGF2ZQogICAgLy8gZXZlbnRzIHRoYXQgaW5kaWNhdGUgSU1FIHRha2luZyBwbGFjZSwgYnV0IHRoZXNlIGFyZSBub3Qgd2lkZWx5CiAgICAvLyBzdXBwb3J0ZWQgb3IgY29tcGF0aWJsZSBlbm91Z2ggeWV0IHRvIHJlbHkgb24uKQogICAgdmFyIHByZXZJbnB1dCA9ICIiOwogICAgZnVuY3Rpb24gcmVhZElucHV0KCkgewogICAgICBpZiAobGVhdmVJbnB1dEFsb25lIHx8ICFmb2N1c2VkIHx8IGhhc1NlbGVjdGlvbihpbnB1dCkgfHwgb3B0aW9ucy5yZWFkT25seSkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgdGV4dCA9IGlucHV0LnZhbHVlOwogICAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQpIHJldHVybiBmYWxzZTsKICAgICAgc2hpZnRTZWxlY3RpbmcgPSBudWxsOwogICAgICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5wdXQubGVuZ3RoLCB0ZXh0Lmxlbmd0aCk7CiAgICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2SW5wdXRbc2FtZV0gPT0gdGV4dFtzYW1lXSkgKytzYW1lOwogICAgICBpZiAoc2FtZSA8IHByZXZJbnB1dC5sZW5ndGgpCiAgICAgICAgc2VsLmZyb20gPSB7bGluZTogc2VsLmZyb20ubGluZSwgY2g6IHNlbC5mcm9tLmNoIC0gKHByZXZJbnB1dC5sZW5ndGggLSBzYW1lKX07CiAgICAgIGVsc2UgaWYgKG92ZXJ3cml0ZSAmJiBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkKICAgICAgICBzZWwudG8gPSB7bGluZTogc2VsLnRvLmxpbmUsIGNoOiBNYXRoLm1pbihnZXRMaW5lKHNlbC50by5saW5lKS50ZXh0Lmxlbmd0aCwgc2VsLnRvLmNoICsgKHRleHQubGVuZ3RoIC0gc2FtZSkpfTsKICAgICAgcmVwbGFjZVNlbGVjdGlvbih0ZXh0LnNsaWNlKHNhbWUpLCAiZW5kIik7CiAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDEwMDApIHsgaW5wdXQudmFsdWUgPSBwcmV2SW5wdXQgPSAiIjsgfQogICAgICBlbHNlIHByZXZJbnB1dCA9IHRleHQ7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gcmVzZXRJbnB1dCh1c2VyKSB7CiAgICAgIGlmICghcG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHsKICAgICAgICBwcmV2SW5wdXQgPSAiIjsKICAgICAgICBpbnB1dC52YWx1ZSA9IGdldFNlbGVjdGlvbigpOwogICAgICAgIHNlbGVjdElucHV0KGlucHV0KTsKICAgICAgfSBlbHNlIGlmICh1c2VyKSBwcmV2SW5wdXQgPSBpbnB1dC52YWx1ZSA9ICIiOwogICAgfQoKICAgIGZ1bmN0aW9uIGZvY3VzSW5wdXQoKSB7CiAgICAgIGlmIChvcHRpb25zLnJlYWRPbmx5ICE9ICJub2N1cnNvciIpIGlucHV0LmZvY3VzKCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2Nyb2xsRWRpdG9ySW50b1ZpZXcoKSB7CiAgICAgIGlmICghY3Vyc29yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkgcmV0dXJuOwogICAgICB2YXIgcmVjdCA9IGN1cnNvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgLy8gSUUgcmV0dXJucyBib2d1cyBjb29yZGluYXRlcyB3aGVuIHRoZSBpbnN0YW5jZSBzaXRzIGluc2lkZSBvZiBhbiBpZnJhbWUgYW5kIHRoZSBjdXJzb3IgaXMgaGlkZGVuCiAgICAgIGlmIChpZSAmJiByZWN0LnRvcCA9PSByZWN0LmJvdHRvbSkgcmV0dXJuOwogICAgICB2YXIgd2luSCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBNYXRoLm1heChkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCk7CiAgICAgIGlmIChyZWN0LnRvcCA8IDAgfHwgcmVjdC5ib3R0b20gPiB3aW5IKSBzY3JvbGxDdXJzb3JJbnRvVmlldygpOwogICAgfQogICAgZnVuY3Rpb24gc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKSB7CiAgICAgIHZhciBjb29yZHMgPSBjYWxjdWxhdGVDdXJzb3JDb29yZHMoKTsKICAgICAgcmV0dXJuIHNjcm9sbEludG9WaWV3KGNvb3Jkcy54LCBjb29yZHMueSwgY29vcmRzLngsIGNvb3Jkcy55Qm90KTsKICAgIH0KICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZUN1cnNvckNvb3JkcygpIHsKICAgICAgdmFyIGN1cnNvciA9IGxvY2FsQ29vcmRzKHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvKTsKICAgICAgdmFyIHggPSBvcHRpb25zLmxpbmVXcmFwcGluZyA/IE1hdGgubWluKGN1cnNvci54LCBsaW5lU3BhY2Uub2Zmc2V0V2lkdGgpIDogY3Vyc29yLng7CiAgICAgIHJldHVybiB7eDogeCwgeTogY3Vyc29yLnksIHlCb3Q6IGN1cnNvci55Qm90fTsKICAgIH0KICAgIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KHgxLCB5MSwgeDIsIHkyKSB7CiAgICAgIHZhciBzY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoeDEsIHkxLCB4MiwgeTIpLCBzY3JvbGxlZCA9IGZhbHNlOwogICAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkge3Njcm9sbGVyLnNjcm9sbExlZnQgPSBzY3JvbGxQb3Muc2Nyb2xsTGVmdDsgc2Nyb2xsZWQgPSB0cnVlO30KICAgICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkge3Njcm9sbGJhci5zY3JvbGxUb3AgPSBzY3JvbGxQb3Muc2Nyb2xsVG9wOyBzY3JvbGxlZCA9IHRydWU7fQogICAgICBpZiAoc2Nyb2xsZWQgJiYgb3B0aW9ucy5vblNjcm9sbCkgb3B0aW9ucy5vblNjcm9sbChpbnN0YW5jZSk7CiAgICB9CiAgICBmdW5jdGlvbiBjYWxjdWxhdGVTY3JvbGxQb3MoeDEsIHkxLCB4MiwgeTIpIHsKICAgICAgdmFyIHBsID0gcGFkZGluZ0xlZnQoKSwgcHQgPSBwYWRkaW5nVG9wKCk7CiAgICAgIHkxICs9IHB0OyB5MiArPSBwdDsgeDEgKz0gcGw7IHgyICs9IHBsOwogICAgICB2YXIgc2NyZWVuID0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LCBzY3JlZW50b3AgPSBzY3JvbGxiYXIuc2Nyb2xsVG9wLCByZXN1bHQgPSB7fTsKICAgICAgdmFyIGF0VG9wID0geTEgPCBwYWRkaW5nVG9wKCkgKyAxMDsKICAgICAgaWYgKHkxIDwgc2NyZWVudG9wKSByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogTWF0aC5tYXgoMCwgeTEpOwogICAgICBlbHNlIGlmICh5MiA+IHNjcmVlbnRvcCArIHNjcmVlbikgcmVzdWx0LnNjcm9sbFRvcCA9IHkyIC0gc2NyZWVuOwoKICAgICAgdmFyIHNjcmVlbncgPSBzY3JvbGxlci5jbGllbnRXaWR0aCwgc2NyZWVubGVmdCA9IHNjcm9sbGVyLnNjcm9sbExlZnQ7CiAgICAgIHZhciBndXR0ZXJ3ID0gb3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlci5jbGllbnRXaWR0aCA6IDA7CiAgICAgIHZhciBhdExlZnQgPSB4MSA8IGd1dHRlcncgKyBwbCArIDEwOwogICAgICBpZiAoeDEgPCBzY3JlZW5sZWZ0ICsgZ3V0dGVydyB8fCBhdExlZnQpIHsKICAgICAgICBpZiAoYXRMZWZ0KSB4MSA9IDA7CiAgICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7CiAgICAgIH0gZWxzZSBpZiAoeDIgPiBzY3JlZW53ICsgc2NyZWVubGVmdCAtIDMpIHsKICAgICAgICByZXN1bHQuc2Nyb2xsTGVmdCA9IHgyICsgMTAgLSBzY3JlZW53OwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgZnVuY3Rpb24gdmlzaWJsZUxpbmVzKHNjcm9sbFRvcCkgewogICAgICB2YXIgbGggPSB0ZXh0SGVpZ2h0KCksIHRvcCA9IChzY3JvbGxUb3AgIT0gbnVsbCA/IHNjcm9sbFRvcCA6IHNjcm9sbGJhci5zY3JvbGxUb3ApIC0gcGFkZGluZ1RvcCgpOwogICAgICB2YXIgZnJvbUhlaWdodCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodG9wIC8gbGgpKTsKICAgICAgdmFyIHRvSGVpZ2h0ID0gTWF0aC5jZWlsKCh0b3AgKyBzY3JvbGxlci5jbGllbnRIZWlnaHQpIC8gbGgpOwogICAgICByZXR1cm4ge2Zyb206IGxpbmVBdEhlaWdodChkb2MsIGZyb21IZWlnaHQpLAogICAgICAgICAgICAgIHRvOiBsaW5lQXRIZWlnaHQoZG9jLCB0b0hlaWdodCl9OwogICAgfQogICAgLy8gVXNlcyBhIHNldCBvZiBjaGFuZ2VzIHBsdXMgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIHRvCiAgICAvLyBkZXRlcm1pbmUgd2hpY2ggRE9NIHVwZGF0ZXMgaGF2ZSB0byBiZSBtYWRlLCBhbmQgbWFrZXMgdGhlCiAgICAvLyB1cGRhdGVzLgogICAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheShjaGFuZ2VzLCBzdXBwcmVzc0NhbGxiYWNrLCBzY3JvbGxUb3ApIHsKICAgICAgaWYgKCFzY3JvbGxlci5jbGllbnRXaWR0aCkgewogICAgICAgIHNob3dpbmdGcm9tID0gc2hvd2luZ1RvID0gZGlzcGxheU9mZnNldCA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIC8vIENvbXB1dGUgdGhlIG5ldyB2aXNpYmxlIHdpbmRvdwogICAgICAvLyBJZiBzY3JvbGxUb3AgaXMgc3BlY2lmaWVkLCB1c2UgdGhhdCB0byBkZXRlcm1pbmUgd2hpY2ggbGluZXMKICAgICAgLy8gdG8gcmVuZGVyIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgc2Nyb2xsYmFyIHBvc2l0aW9uLgogICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhzY3JvbGxUb3ApOwogICAgICAvLyBCYWlsIG91dCBpZiB0aGUgdmlzaWJsZSBhcmVhIGlzIGFscmVhZHkgcmVuZGVyZWQgYW5kIG5vdGhpbmcgY2hhbmdlZC4KICAgICAgaWYgKGNoYW5nZXMgIT09IHRydWUgJiYgY2hhbmdlcy5sZW5ndGggPT0gMCAmJiB2aXNpYmxlLmZyb20gPiBzaG93aW5nRnJvbSAmJiB2aXNpYmxlLnRvIDwgc2hvd2luZ1RvKSB7CiAgICAgICAgdXBkYXRlVmVydGljYWxTY3JvbGwoc2Nyb2xsVG9wKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIGZyb20gPSBNYXRoLm1heCh2aXNpYmxlLmZyb20gLSAxMDAsIDApLCB0byA9IE1hdGgubWluKGRvYy5zaXplLCB2aXNpYmxlLnRvICsgMTAwKTsKICAgICAgaWYgKHNob3dpbmdGcm9tIDwgZnJvbSAmJiBmcm9tIC0gc2hvd2luZ0Zyb20gPCAyMCkgZnJvbSA9IHNob3dpbmdGcm9tOwogICAgICBpZiAoc2hvd2luZ1RvID4gdG8gJiYgc2hvd2luZ1RvIC0gdG8gPCAyMCkgdG8gPSBNYXRoLm1pbihkb2Muc2l6ZSwgc2hvd2luZ1RvKTsKCiAgICAgIC8vIENyZWF0ZSBhIHJhbmdlIG9mIHRoZW9yZXRpY2FsbHkgaW50YWN0IGxpbmVzLCBhbmQgcHVuY2ggaG9sZXMKICAgICAgLy8gaW4gdGhhdCB1c2luZyB0aGUgY2hhbmdlIGluZm8uCiAgICAgIHZhciBpbnRhY3QgPSBjaGFuZ2VzID09PSB0cnVlID8gW10gOgogICAgICAgIGNvbXB1dGVJbnRhY3QoW3tmcm9tOiBzaG93aW5nRnJvbSwgdG86IHNob3dpbmdUbywgZG9tU3RhcnQ6IDB9XSwgY2hhbmdlcyk7CiAgICAgIC8vIENsaXAgb2ZmIHRoZSBwYXJ0cyB0aGF0IHdvbid0IGJlIHZpc2libGUKICAgICAgdmFyIGludGFjdExpbmVzID0gMDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgcmFuZ2UgPSBpbnRhY3RbaV07CiAgICAgICAgaWYgKHJhbmdlLmZyb20gPCBmcm9tKSB7cmFuZ2UuZG9tU3RhcnQgKz0gKGZyb20gLSByYW5nZS5mcm9tKTsgcmFuZ2UuZnJvbSA9IGZyb207fQogICAgICAgIGlmIChyYW5nZS50byA+IHRvKSByYW5nZS50byA9IHRvOwogICAgICAgIGlmIChyYW5nZS5mcm9tID49IHJhbmdlLnRvKSBpbnRhY3Quc3BsaWNlKGktLSwgMSk7CiAgICAgICAgZWxzZSBpbnRhY3RMaW5lcyArPSByYW5nZS50byAtIHJhbmdlLmZyb207CiAgICAgIH0KICAgICAgaWYgKGludGFjdExpbmVzID09IHRvIC0gZnJvbSAmJiBmcm9tID09IHNob3dpbmdGcm9tICYmIHRvID09IHNob3dpbmdUbykgewogICAgICAgIHVwZGF0ZVZlcnRpY2FsU2Nyb2xsKHNjcm9sbFRvcCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGludGFjdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtyZXR1cm4gYS5kb21TdGFydCAtIGIuZG9tU3RhcnQ7fSk7CgogICAgICB2YXIgdGggPSB0ZXh0SGVpZ2h0KCksIGd1dHRlckRpc3BsYXkgPSBndXR0ZXIuc3R5bGUuZGlzcGxheTsKICAgICAgbGluZURpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICBwYXRjaERpc3BsYXkoZnJvbSwgdG8sIGludGFjdCk7CiAgICAgIGxpbmVEaXYuc3R5bGUuZGlzcGxheSA9IGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gIiI7CgogICAgICB2YXIgZGlmZmVyZW50ID0gZnJvbSAhPSBzaG93aW5nRnJvbSB8fCB0byAhPSBzaG93aW5nVG8gfHwgbGFzdFNpemVDICE9IHNjcm9sbGVyLmNsaWVudEhlaWdodCArIHRoOwogICAgICAvLyBUaGlzIGlzIGp1c3QgYSBib2d1cyBmb3JtdWxhIHRoYXQgZGV0ZWN0cyB3aGVuIHRoZSBlZGl0b3IgaXMKICAgICAgLy8gcmVzaXplZCBvciB0aGUgZm9udCBzaXplIGNoYW5nZXMuCiAgICAgIGlmIChkaWZmZXJlbnQpIGxhc3RTaXplQyA9IHNjcm9sbGVyLmNsaWVudEhlaWdodCArIHRoOwogICAgICBzaG93aW5nRnJvbSA9IGZyb207IHNob3dpbmdUbyA9IHRvOwogICAgICBkaXNwbGF5T2Zmc2V0ID0gaGVpZ2h0QXRMaW5lKGRvYywgZnJvbSk7CgogICAgICAvLyBTaW5jZSB0aGlzIGlzIGFsbCByYXRoZXIgZXJyb3IgcHJvbmUsIGl0IGlzIGhvbm91cmVkIHdpdGggdGhlCiAgICAgIC8vIG9ubHkgYXNzZXJ0aW9uIGluIHRoZSB3aG9sZSBmaWxlLgogICAgICBpZiAobGluZURpdi5jaGlsZE5vZGVzLmxlbmd0aCAhPSBzaG93aW5nVG8gLSBzaG93aW5nRnJvbSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJBRCBQQVRDSCEgIiArIEpTT04uc3RyaW5naWZ5KGludGFjdCkgKyAiIHNpemU9IiArIChzaG93aW5nVG8gLSBzaG93aW5nRnJvbSkgKwogICAgICAgICAgICAgICAgICAgICAgICAiIG5vZGVzPSIgKyBsaW5lRGl2LmNoaWxkTm9kZXMubGVuZ3RoKTsKCiAgICAgIGZ1bmN0aW9uIGNoZWNrSGVpZ2h0cygpIHsKICAgICAgICB2YXIgY3VyTm9kZSA9IGxpbmVEaXYuZmlyc3RDaGlsZCwgaGVpZ2h0Q2hhbmdlZCA9IGZhbHNlOwogICAgICAgIGRvYy5pdGVyKHNob3dpbmdGcm9tLCBzaG93aW5nVG8sIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIGlmICghbGluZS5oaWRkZW4pIHsKICAgICAgICAgICAgdmFyIGhlaWdodCA9IE1hdGgucm91bmQoY3VyTm9kZS5vZmZzZXRIZWlnaHQgLyB0aCkgfHwgMTsKICAgICAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IGhlaWdodCkgewogICAgICAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0KTsKICAgICAgICAgICAgICBndXR0ZXJEaXJ0eSA9IGhlaWdodENoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjdXJOb2RlID0gY3VyTm9kZS5uZXh0U2libGluZzsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaGVpZ2h0Q2hhbmdlZDsKICAgICAgfQoKICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICAgLy8gR3Vlc3Mgd2hldGhlciB3ZSdyZSBnb2luZyB0byBuZWVkIHRoZSBzY3JvbGxiYXIsIHNvIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIGNoYW5naW5nIHRoZSBsaW5ld3JhcHBpbmcKICAgICAgICAvLyBhZnRlciB0aGUgc2Nyb2xsYmFyIGFwcGVhcnMgKGR1cmluZyB1cGRhdGVWZXJ0aWNhbFNjcm9sbCgpKS4gT25seSBkbyB0aGlzIGlmIHRoZSBzY3JvbGxiYXIgaXMKICAgICAgICAvLyBhcHBlYXJpbmcgKGlmIGl0J3MgZGlzYXBwZWFyaW5nLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBzY3JvbGwgcG9zaXRpb24sIGFuZCB0aGVyZSBhcmUKICAgICAgICAvLyBpc3N1ZXMgb24gSUU3IGlmIHdlIHR1cm4gaXQgb2ZmIHRvbyBlYXJseSkuCiAgICAgICAgdmFyIHZpcnR1YWxIZWlnaHQgPSBNYXRoLmZsb29yKGRvYy5oZWlnaHQgKiB0aCArIDIgKiBwYWRkaW5nVG9wKCkpLCBzY3JvbGxiYXJIZWlnaHQgPSBzY3JvbGxlci5jbGllbnRIZWlnaHQ7CiAgICAgICAgaWYgKHZpcnR1YWxIZWlnaHQgPiBzY3JvbGxiYXJIZWlnaHQpIHNjcm9sbGJhci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICBjaGVja0hlaWdodHMoKTsKICAgICAgfQoKICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSBndXR0ZXJEaXNwbGF5OwogICAgICBpZiAoZGlmZmVyZW50IHx8IGd1dHRlckRpcnR5KSB7CiAgICAgICAgLy8gSWYgdGhlIGd1dHRlciBncmV3IGluIHNpemUsIHJlLWNoZWNrIGhlaWdodHMuIElmIHRob3NlIGNoYW5nZWQsIHJlLWRyYXcgZ3V0dGVyLgogICAgICAgIHVwZGF0ZUd1dHRlcigpICYmIG9wdGlvbnMubGluZVdyYXBwaW5nICYmIGNoZWNrSGVpZ2h0cygpICYmIHVwZGF0ZUd1dHRlcigpOwogICAgICB9CiAgICAgIHVwZGF0ZVNlbGVjdGlvbigpOwogICAgICB1cGRhdGVWZXJ0aWNhbFNjcm9sbChzY3JvbGxUb3ApOwogICAgICBpZiAoIXN1cHByZXNzQ2FsbGJhY2sgJiYgb3B0aW9ucy5vblVwZGF0ZSkgb3B0aW9ucy5vblVwZGF0ZShpbnN0YW5jZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbXB1dGVJbnRhY3QoaW50YWN0LCBjaGFuZ2VzKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hhbmdlcy5sZW5ndGggfHwgMDsgaSA8IGw7ICsraSkgewogICAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldLCBpbnRhY3QyID0gW10sIGRpZmYgPSBjaGFuZ2UuZGlmZiB8fCAwOwogICAgICAgIGZvciAodmFyIGogPSAwLCBsMiA9IGludGFjdC5sZW5ndGg7IGogPCBsMjsgKytqKSB7CiAgICAgICAgICB2YXIgcmFuZ2UgPSBpbnRhY3Rbal07CiAgICAgICAgICBpZiAoY2hhbmdlLnRvIDw9IHJhbmdlLmZyb20gJiYgY2hhbmdlLmRpZmYpCiAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSArIGRpZmYsIHRvOiByYW5nZS50byArIGRpZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0fSk7CiAgICAgICAgICBlbHNlIGlmIChjaGFuZ2UudG8gPD0gcmFuZ2UuZnJvbSB8fCBjaGFuZ2UuZnJvbSA+PSByYW5nZS50bykKICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHJhbmdlKTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoY2hhbmdlLmZyb20gPiByYW5nZS5mcm9tKQogICAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSwgdG86IGNoYW5nZS5mcm9tLCBkb21TdGFydDogcmFuZ2UuZG9tU3RhcnR9KTsKICAgICAgICAgICAgaWYgKGNoYW5nZS50byA8IHJhbmdlLnRvKQogICAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogY2hhbmdlLnRvICsgZGlmZiwgdG86IHJhbmdlLnRvICsgZGlmZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVN0YXJ0OiByYW5nZS5kb21TdGFydCArIChjaGFuZ2UudG8gLSByYW5nZS5mcm9tKX0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnRhY3QgPSBpbnRhY3QyOwogICAgICB9CiAgICAgIHJldHVybiBpbnRhY3Q7CiAgICB9CgogICAgZnVuY3Rpb24gcGF0Y2hEaXNwbGF5KGZyb20sIHRvLCBpbnRhY3QpIHsKICAgICAgLy8gVGhlIGZpcnN0IHBhc3MgcmVtb3ZlcyB0aGUgRE9NIG5vZGVzIHRoYXQgYXJlbid0IGludGFjdC4KICAgICAgaWYgKCFpbnRhY3QubGVuZ3RoKSBsaW5lRGl2LmlubmVySFRNTCA9ICIiOwogICAgICBlbHNlIHsKICAgICAgICBmdW5jdGlvbiBraWxsTm9kZShub2RlKSB7CiAgICAgICAgICB2YXIgdG1wID0gbm9kZS5uZXh0U2libGluZzsKICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTsKICAgICAgICAgIHJldHVybiB0bXA7CiAgICAgICAgfQogICAgICAgIHZhciBkb21Qb3MgPSAwLCBjdXJOb2RlID0gbGluZURpdi5maXJzdENoaWxkLCBuOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgICB2YXIgY3VyID0gaW50YWN0W2ldOwogICAgICAgICAgd2hpbGUgKGN1ci5kb21TdGFydCA+IGRvbVBvcykge2N1ck5vZGUgPSBraWxsTm9kZShjdXJOb2RlKTsgZG9tUG9zKys7fQogICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGUgPSBjdXIudG8gLSBjdXIuZnJvbTsgaiA8IGU7ICsraikge2N1ck5vZGUgPSBjdXJOb2RlLm5leHRTaWJsaW5nOyBkb21Qb3MrKzt9CiAgICAgICAgfQogICAgICAgIHdoaWxlIChjdXJOb2RlKSBjdXJOb2RlID0ga2lsbE5vZGUoY3VyTm9kZSk7CiAgICAgIH0KICAgICAgLy8gVGhpcyBwYXNzIGZpbGxzIGluIHRoZSBsaW5lcyB0aGF0IGFjdHVhbGx5IGNoYW5nZWQuCiAgICAgIHZhciBuZXh0SW50YWN0ID0gaW50YWN0LnNoaWZ0KCksIGN1ck5vZGUgPSBsaW5lRGl2LmZpcnN0Q2hpbGQsIGogPSBmcm9tOwogICAgICB2YXIgc2NyYXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBkb2MuaXRlcihmcm9tLCB0bywgZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChuZXh0SW50YWN0ICYmIG5leHRJbnRhY3QudG8gPT0gaikgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpOwogICAgICAgIGlmICghbmV4dEludGFjdCB8fCBuZXh0SW50YWN0LmZyb20gPiBqKSB7CiAgICAgICAgICBpZiAobGluZS5oaWRkZW4pIHZhciBodG1sID0gc2NyYXRjaC5pbm5lckhUTUwgPSAiPHByZT48L3ByZT4iOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciBodG1sID0gJzxwcmUnICsgKGxpbmUuY2xhc3NOYW1lID8gJyBjbGFzcz0iJyArIGxpbmUuY2xhc3NOYW1lICsgJyInIDogJycpICsgJz4nCiAgICAgICAgICAgICAgKyBsaW5lLmdldEhUTUwobWFrZVRhYikgKyAnPC9wcmU+JzsKICAgICAgICAgICAgLy8gS2x1ZGdlIHRvIG1ha2Ugc3VyZSB0aGUgc3R5bGVkIGVsZW1lbnQgbGllcyBiZWhpbmQgdGhlIHNlbGVjdGlvbiAoYnkgei1pbmRleCkKICAgICAgICAgICAgaWYgKGxpbmUuYmdDbGFzc05hbWUpCiAgICAgICAgICAgICAgaHRtbCA9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPjxwcmUgY2xhc3M9IicgKyBsaW5lLmJnQ2xhc3NOYW1lICsKICAgICAgICAgICAgICAnIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyByaWdodDogMDsgdG9wOiAwOyBib3R0b206IDA7IHotaW5kZXg6IC0yIj4mIzE2MDs8L3ByZT4nICsgaHRtbCArICI8L2Rpdj4iOwogICAgICAgICAgfQogICAgICAgICAgc2NyYXRjaC5pbm5lckhUTUwgPSBodG1sOwogICAgICAgICAgbGluZURpdi5pbnNlcnRCZWZvcmUoc2NyYXRjaC5maXJzdENoaWxkLCBjdXJOb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3VyTm9kZSA9IGN1ck5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgfQogICAgICAgICsrajsKICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlR3V0dGVyKCkgewogICAgICBpZiAoIW9wdGlvbnMuZ3V0dGVyICYmICFvcHRpb25zLmxpbmVOdW1iZXJzKSByZXR1cm47CiAgICAgIHZhciBoVGV4dCA9IG1vdmVyLm9mZnNldEhlaWdodCwgaEVkaXRvciA9IHNjcm9sbGVyLmNsaWVudEhlaWdodDsKICAgICAgZ3V0dGVyLnN0eWxlLmhlaWdodCA9IChoVGV4dCAtIGhFZGl0b3IgPCAyID8gaEVkaXRvciA6IGhUZXh0KSArICJweCI7CiAgICAgIHZhciBodG1sID0gW10sIGkgPSBzaG93aW5nRnJvbSwgbm9ybWFsTm9kZTsKICAgICAgZG9jLml0ZXIoc2hvd2luZ0Zyb20sIE1hdGgubWF4KHNob3dpbmdUbywgc2hvd2luZ0Zyb20gKyAxKSwgZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChsaW5lLmhpZGRlbikgewogICAgICAgICAgaHRtbC5wdXNoKCI8cHJlPjwvcHJlPiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgbWFya2VyID0gbGluZS5ndXR0ZXJNYXJrZXI7CiAgICAgICAgICB2YXIgdGV4dCA9IG9wdGlvbnMubGluZU51bWJlcnMgPyBpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIgOiBudWxsOwogICAgICAgICAgaWYgKG1hcmtlciAmJiBtYXJrZXIudGV4dCkKICAgICAgICAgICAgdGV4dCA9IG1hcmtlci50ZXh0LnJlcGxhY2UoIiVOJSIsIHRleHQgIT0gbnVsbCA/IHRleHQgOiAiIik7CiAgICAgICAgICBlbHNlIGlmICh0ZXh0ID09IG51bGwpCiAgICAgICAgICAgIHRleHQgPSAiXHUwMGEwIjsKICAgICAgICAgIGh0bWwucHVzaCgobWFya2VyICYmIG1hcmtlci5zdHlsZSA/ICc8cHJlIGNsYXNzPSInICsgbWFya2VyLnN0eWxlICsgJyI+JyA6ICI8cHJlPiIpLCB0ZXh0KTsKICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgbGluZS5oZWlnaHQ7ICsraikgaHRtbC5wdXNoKCI8YnIvPiYjMTYwOyIpOwogICAgICAgICAgaHRtbC5wdXNoKCI8L3ByZT4iKTsKICAgICAgICAgIGlmICghbWFya2VyKSBub3JtYWxOb2RlID0gaTsKICAgICAgICB9CiAgICAgICAgKytpOwogICAgICB9KTsKICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIGd1dHRlclRleHQuaW5uZXJIVE1MID0gaHRtbC5qb2luKCIiKTsKICAgICAgLy8gTWFrZSBzdXJlIHNjcm9sbGluZyBkb2Vzbid0IGNhdXNlIG51bWJlciBndXR0ZXIgc2l6ZSB0byBwb3AKICAgICAgaWYgKG5vcm1hbE5vZGUgIT0gbnVsbCAmJiBvcHRpb25zLmxpbmVOdW1iZXJzKSB7CiAgICAgICAgdmFyIG5vZGUgPSBndXR0ZXJUZXh0LmNoaWxkTm9kZXNbbm9ybWFsTm9kZSAtIHNob3dpbmdGcm9tXTsKICAgICAgICB2YXIgbWlud2lkdGggPSBTdHJpbmcoZG9jLnNpemUpLmxlbmd0aCwgdmFsID0gZWx0VGV4dChub2RlLmZpcnN0Q2hpbGQpLCBwYWQgPSAiIjsKICAgICAgICB3aGlsZSAodmFsLmxlbmd0aCArIHBhZC5sZW5ndGggPCBtaW53aWR0aCkgcGFkICs9ICJcdTAwYTAiOwogICAgICAgIGlmIChwYWQpIG5vZGUuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBhZCksIG5vZGUuZmlyc3RDaGlsZCk7CiAgICAgIH0KICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgdmFyIHJlc2l6ZWQgPSBNYXRoLmFicygocGFyc2VJbnQobGluZVNwYWNlLnN0eWxlLm1hcmdpbkxlZnQpIHx8IDApIC0gZ3V0dGVyLm9mZnNldFdpZHRoKSA+IDI7CiAgICAgIGxpbmVTcGFjZS5zdHlsZS5tYXJnaW5MZWZ0ID0gZ3V0dGVyLm9mZnNldFdpZHRoICsgInB4IjsKICAgICAgZ3V0dGVyRGlydHkgPSBmYWxzZTsKICAgICAgcmV0dXJuIHJlc2l6ZWQ7CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24oKSB7CiAgICAgIHZhciBjb2xsYXBzZWQgPSBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKTsKICAgICAgdmFyIGZyb21Qb3MgPSBsb2NhbENvb3JkcyhzZWwuZnJvbSwgdHJ1ZSk7CiAgICAgIHZhciB0b1BvcyA9IGNvbGxhcHNlZCA/IGZyb21Qb3MgOiBsb2NhbENvb3JkcyhzZWwudG8sIHRydWUpOwogICAgICB2YXIgaGVhZFBvcyA9IHNlbC5pbnZlcnRlZCA/IGZyb21Qb3MgOiB0b1BvcywgdGggPSB0ZXh0SGVpZ2h0KCk7CiAgICAgIHZhciB3cmFwT2ZmID0gZWx0T2Zmc2V0KHdyYXBwZXIpLCBsaW5lT2ZmID0gZWx0T2Zmc2V0KGxpbmVEaXYpOwogICAgICBpbnB1dERpdi5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxlci5vZmZzZXRIZWlnaHQsIGhlYWRQb3MueSArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKSArICJweCI7CiAgICAgIGlucHV0RGl2LnN0eWxlLmxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxlci5vZmZzZXRXaWR0aCwgaGVhZFBvcy54ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSkgKyAicHgiOwogICAgICBpZiAoY29sbGFwc2VkKSB7CiAgICAgICAgY3Vyc29yLnN0eWxlLnRvcCA9IGhlYWRQb3MueSArICJweCI7CiAgICAgICAgY3Vyc29yLnN0eWxlLmxlZnQgPSAob3B0aW9ucy5saW5lV3JhcHBpbmcgPyBNYXRoLm1pbihoZWFkUG9zLngsIGxpbmVTcGFjZS5vZmZzZXRXaWR0aCkgOiBoZWFkUG9zLngpICsgInB4IjsKICAgICAgICBjdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgIHNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBzYW1lTGluZSA9IGZyb21Qb3MueSA9PSB0b1Bvcy55LCBodG1sID0gIiI7CiAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gbGluZVNwYWNlLmNsaWVudFdpZHRoIHx8IGxpbmVTcGFjZS5vZmZzZXRXaWR0aDsKICAgICAgICB2YXIgY2xpZW50SGVpZ2h0ID0gbGluZVNwYWNlLmNsaWVudEhlaWdodCB8fCBsaW5lU3BhY2Uub2Zmc2V0SGVpZ2h0OwogICAgICAgIGZ1bmN0aW9uIGFkZChsZWZ0LCB0b3AsIHJpZ2h0LCBoZWlnaHQpIHsKICAgICAgICAgIHZhciByc3R5bGUgPSBxdWlya3NNb2RlID8gIndpZHRoOiAiICsgKCFyaWdodCA/IGNsaWVudFdpZHRoIDogY2xpZW50V2lkdGggLSByaWdodCAtIGxlZnQpICsgInB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicmlnaHQ6ICIgKyByaWdodCArICJweCI7CiAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJDb2RlTWlycm9yLXNlbGVjdGVkIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAnICsgbGVmdCArCiAgICAgICAgICAgICdweDsgdG9wOiAnICsgdG9wICsgJ3B4OyAnICsgcnN0eWxlICsgJzsgaGVpZ2h0OiAnICsgaGVpZ2h0ICsgJ3B4Ij48L2Rpdj4nOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsLmZyb20uY2ggJiYgZnJvbVBvcy55ID49IDApIHsKICAgICAgICAgIHZhciByaWdodCA9IHNhbWVMaW5lID8gY2xpZW50V2lkdGggLSB0b1Bvcy54IDogMDsKICAgICAgICAgIGFkZChmcm9tUG9zLngsIGZyb21Qb3MueSwgcmlnaHQsIHRoKTsKICAgICAgICB9CiAgICAgICAgdmFyIG1pZGRsZVN0YXJ0ID0gTWF0aC5tYXgoMCwgZnJvbVBvcy55ICsgKHNlbC5mcm9tLmNoID8gdGggOiAwKSk7CiAgICAgICAgdmFyIG1pZGRsZUhlaWdodCA9IE1hdGgubWluKHRvUG9zLnksIGNsaWVudEhlaWdodCkgLSBtaWRkbGVTdGFydDsKICAgICAgICBpZiAobWlkZGxlSGVpZ2h0ID4gMC4yICogdGgpCiAgICAgICAgICBhZGQoMCwgbWlkZGxlU3RhcnQsIDAsIG1pZGRsZUhlaWdodCk7CiAgICAgICAgaWYgKCghc2FtZUxpbmUgfHwgIXNlbC5mcm9tLmNoKSAmJiB0b1Bvcy55IDwgY2xpZW50SGVpZ2h0IC0gLjUgKiB0aCkKICAgICAgICAgIGFkZCgwLCB0b1Bvcy55LCBjbGllbnRXaWR0aCAtIHRvUG9zLngsIHRoKTsKICAgICAgICBzZWxlY3Rpb25EaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICBjdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICBzZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2V0U2hpZnQodmFsKSB7CiAgICAgIGlmICh2YWwpIHNoaWZ0U2VsZWN0aW5nID0gc2hpZnRTZWxlY3RpbmcgfHwgKHNlbC5pbnZlcnRlZCA/IHNlbC50byA6IHNlbC5mcm9tKTsKICAgICAgZWxzZSBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Vc2VyKGZyb20sIHRvKSB7CiAgICAgIHZhciBzaCA9IHNoaWZ0U2VsZWN0aW5nICYmIGNsaXBQb3Moc2hpZnRTZWxlY3RpbmcpOwogICAgICBpZiAoc2gpIHsKICAgICAgICBpZiAocG9zTGVzcyhzaCwgZnJvbSkpIGZyb20gPSBzaDsKICAgICAgICBlbHNlIGlmIChwb3NMZXNzKHRvLCBzaCkpIHRvID0gc2g7CiAgICAgIH0KICAgICAgc2V0U2VsZWN0aW9uKGZyb20sIHRvKTsKICAgICAgdXNlclNlbENoYW5nZSA9IHRydWU7CiAgICB9CiAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbi4gTGFzdCB0d28gYXJncyBhcmUgb25seSB1c2VkIGJ5CiAgICAvLyB1cGRhdGVMaW5lcywgc2luY2UgdGhleSBoYXZlIHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbGluZQogICAgLy8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KICAgIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihmcm9tLCB0bywgb2xkRnJvbSwgb2xkVG8pIHsKICAgICAgZ29hbENvbHVtbiA9IG51bGw7CiAgICAgIGlmIChvbGRGcm9tID09IG51bGwpIHtvbGRGcm9tID0gc2VsLmZyb20ubGluZTsgb2xkVG8gPSBzZWwudG8ubGluZTt9CiAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgZnJvbSkgJiYgcG9zRXEoc2VsLnRvLCB0bykpIHJldHVybjsKICAgICAgaWYgKHBvc0xlc3ModG8sIGZyb20pKSB7dmFyIHRtcCA9IHRvOyB0byA9IGZyb207IGZyb20gPSB0bXA7fQoKICAgICAgLy8gU2tpcCBvdmVyIGhpZGRlbiBsaW5lcy4KICAgICAgaWYgKGZyb20ubGluZSAhPSBvbGRGcm9tKSB7CiAgICAgICAgdmFyIGZyb20xID0gc2tpcEhpZGRlbihmcm9tLCBvbGRGcm9tLCBzZWwuZnJvbS5jaCk7CiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbm9uLWhpZGRlbiBsaW5lIGxlZnQsIGZvcmNlIHZpc2liaWxpdHkgb24gY3VycmVudCBsaW5lCiAgICAgICAgaWYgKCFmcm9tMSkgc2V0TGluZUhpZGRlbihmcm9tLmxpbmUsIGZhbHNlKTsKICAgICAgICBlbHNlIGZyb20gPSBmcm9tMTsKICAgICAgfQogICAgICBpZiAodG8ubGluZSAhPSBvbGRUbykgdG8gPSBza2lwSGlkZGVuKHRvLCBvbGRUbywgc2VsLnRvLmNoKTsKCiAgICAgIGlmIChwb3NFcShmcm9tLCB0bykpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOwogICAgICBlbHNlIGlmIChwb3NFcShmcm9tLCBzZWwudG8pKSBzZWwuaW52ZXJ0ZWQgPSBmYWxzZTsKICAgICAgZWxzZSBpZiAocG9zRXEodG8sIHNlbC5mcm9tKSkgc2VsLmludmVydGVkID0gdHJ1ZTsKCiAgICAgIGlmIChvcHRpb25zLmF1dG9DbGVhckVtcHR5TGluZXMgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHsKICAgICAgICB2YXIgaGVhZCA9IHNlbC5pbnZlcnRlZCA/IGZyb20gOiB0bzsKICAgICAgICBpZiAoaGVhZC5saW5lICE9IHNlbC5mcm9tLmxpbmUgJiYgc2VsLmZyb20ubGluZSA8IGRvYy5zaXplKSB7CiAgICAgICAgICB2YXIgb2xkTGluZSA9IGdldExpbmUoc2VsLmZyb20ubGluZSk7CiAgICAgICAgICBpZiAoL15ccyskLy50ZXN0KG9sZExpbmUudGV4dCkpCiAgICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGlmIChvbGRMaW5lLnBhcmVudCAmJiAvXlxzKyQvLnRlc3Qob2xkTGluZS50ZXh0KSkgewogICAgICAgICAgICAgICAgdmFyIG5vID0gbGluZU5vKG9sZExpbmUpOwogICAgICAgICAgICAgICAgcmVwbGFjZVJhbmdlKCIiLCB7bGluZTogbm8sIGNoOiAwfSwge2xpbmU6IG5vLCBjaDogb2xkTGluZS50ZXh0Lmxlbmd0aH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgMTApKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHNlbC5mcm9tID0gZnJvbTsgc2VsLnRvID0gdG87CiAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gc2tpcEhpZGRlbihwb3MsIG9sZExpbmUsIG9sZENoKSB7CiAgICAgIGZ1bmN0aW9uIGdldE5vbkhpZGRlbihkaXIpIHsKICAgICAgICB2YXIgbE5vID0gcG9zLmxpbmUgKyBkaXIsIGVuZCA9IGRpciA9PSAxID8gZG9jLnNpemUgOiAtMTsKICAgICAgICB3aGlsZSAobE5vICE9IGVuZCkgewogICAgICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGxObyk7CiAgICAgICAgICBpZiAoIWxpbmUuaGlkZGVuKSB7CiAgICAgICAgICAgIHZhciBjaCA9IHBvcy5jaDsKICAgICAgICAgICAgaWYgKHRvRW5kIHx8IGNoID4gb2xkQ2ggfHwgY2ggPiBsaW5lLnRleHQubGVuZ3RoKSBjaCA9IGxpbmUudGV4dC5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiB7bGluZTogbE5vLCBjaDogY2h9OwogICAgICAgICAgfQogICAgICAgICAgbE5vICs9IGRpcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKHBvcy5saW5lKTsKICAgICAgdmFyIHRvRW5kID0gcG9zLmNoID09IGxpbmUudGV4dC5sZW5ndGggJiYgcG9zLmNoICE9IG9sZENoOwogICAgICBpZiAoIWxpbmUuaGlkZGVuKSByZXR1cm4gcG9zOwogICAgICBpZiAocG9zLmxpbmUgPj0gb2xkTGluZSkgcmV0dXJuIGdldE5vbkhpZGRlbigxKSB8fCBnZXROb25IaWRkZW4oLTEpOwogICAgICBlbHNlIHJldHVybiBnZXROb25IaWRkZW4oLTEpIHx8IGdldE5vbkhpZGRlbigxKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldEN1cnNvcihsaW5lLCBjaCwgdXNlcikgewogICAgICB2YXIgcG9zID0gY2xpcFBvcyh7bGluZTogbGluZSwgY2g6IGNoIHx8IDB9KTsKICAgICAgKHVzZXIgPyBzZXRTZWxlY3Rpb25Vc2VyIDogc2V0U2VsZWN0aW9uKShwb3MsIHBvcyk7CiAgICB9CgogICAgZnVuY3Rpb24gY2xpcExpbmUobikge3JldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihuLCBkb2Muc2l6ZS0xKSk7fQogICAgZnVuY3Rpb24gY2xpcFBvcyhwb3MpIHsKICAgICAgaWYgKHBvcy5saW5lIDwgMCkgcmV0dXJuIHtsaW5lOiAwLCBjaDogMH07CiAgICAgIGlmIChwb3MubGluZSA+PSBkb2Muc2l6ZSkgcmV0dXJuIHtsaW5lOiBkb2Muc2l6ZS0xLCBjaDogZ2V0TGluZShkb2Muc2l6ZS0xKS50ZXh0Lmxlbmd0aH07CiAgICAgIHZhciBjaCA9IHBvcy5jaCwgbGluZWxlbiA9IGdldExpbmUocG9zLmxpbmUpLnRleHQubGVuZ3RoOwogICAgICBpZiAoY2ggPT0gbnVsbCB8fCBjaCA+IGxpbmVsZW4pIHJldHVybiB7bGluZTogcG9zLmxpbmUsIGNoOiBsaW5lbGVufTsKICAgICAgZWxzZSBpZiAoY2ggPCAwKSByZXR1cm4ge2xpbmU6IHBvcy5saW5lLCBjaDogMH07CiAgICAgIGVsc2UgcmV0dXJuIHBvczsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kUG9zSChkaXIsIHVuaXQpIHsKICAgICAgdmFyIGVuZCA9IHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvLCBsaW5lID0gZW5kLmxpbmUsIGNoID0gZW5kLmNoOwogICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUobGluZSk7CiAgICAgIGZ1bmN0aW9uIGZpbmROZXh0TGluZSgpIHsKICAgICAgICBmb3IgKHZhciBsID0gbGluZSArIGRpciwgZSA9IGRpciA8IDAgPyAtMSA6IGRvYy5zaXplOyBsICE9IGU7IGwgKz0gZGlyKSB7CiAgICAgICAgICB2YXIgbG8gPSBnZXRMaW5lKGwpOwogICAgICAgICAgaWYgKCFsby5oaWRkZW4pIHsgbGluZSA9IGw7IGxpbmVPYmogPSBsbzsgcmV0dXJuIHRydWU7IH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbW92ZU9uY2UoYm91bmRUb0xpbmUpIHsKICAgICAgICBpZiAoY2ggPT0gKGRpciA8IDAgPyAwIDogbGluZU9iai50ZXh0Lmxlbmd0aCkpIHsKICAgICAgICAgIGlmICghYm91bmRUb0xpbmUgJiYgZmluZE5leHRMaW5lKCkpIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4dC5sZW5ndGggOiAwOwogICAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlIGNoICs9IGRpcjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAodW5pdCA9PSAiY2hhciIpIG1vdmVPbmNlKCk7CiAgICAgIGVsc2UgaWYgKHVuaXQgPT0gImNvbHVtbiIpIG1vdmVPbmNlKHRydWUpOwogICAgICBlbHNlIGlmICh1bml0ID09ICJ3b3JkIikgewogICAgICAgIHZhciBzYXdXb3JkID0gZmFsc2U7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgaWYgKGRpciA8IDApIGlmICghbW92ZU9uY2UoKSkgYnJlYWs7CiAgICAgICAgICBpZiAoaXNXb3JkQ2hhcihsaW5lT2JqLnRleHQuY2hhckF0KGNoKSkpIHNhd1dvcmQgPSB0cnVlOwogICAgICAgICAgZWxzZSBpZiAoc2F3V29yZCkge2lmIChkaXIgPCAwKSB7ZGlyID0gMTsgbW92ZU9uY2UoKTt9IGJyZWFrO30KICAgICAgICAgIGlmIChkaXIgPiAwKSBpZiAoIW1vdmVPbmNlKCkpIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4ge2xpbmU6IGxpbmUsIGNoOiBjaH07CiAgICB9CiAgICBmdW5jdGlvbiBtb3ZlSChkaXIsIHVuaXQpIHsKICAgICAgdmFyIHBvcyA9IGRpciA8IDAgPyBzZWwuZnJvbSA6IHNlbC50bzsKICAgICAgaWYgKHNoaWZ0U2VsZWN0aW5nIHx8IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSBwb3MgPSBmaW5kUG9zSChkaXIsIHVuaXQpOwogICAgICBzZXRDdXJzb3IocG9zLmxpbmUsIHBvcy5jaCwgdHJ1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBkZWxldGVIKGRpciwgdW5pdCkgewogICAgICBpZiAoIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXBsYWNlUmFuZ2UoIiIsIHNlbC5mcm9tLCBzZWwudG8pOwogICAgICBlbHNlIGlmIChkaXIgPCAwKSByZXBsYWNlUmFuZ2UoIiIsIGZpbmRQb3NIKGRpciwgdW5pdCksIHNlbC50byk7CiAgICAgIGVsc2UgcmVwbGFjZVJhbmdlKCIiLCBzZWwuZnJvbSwgZmluZFBvc0goZGlyLCB1bml0KSk7CiAgICAgIHVzZXJTZWxDaGFuZ2UgPSB0cnVlOwogICAgfQogICAgdmFyIGdvYWxDb2x1bW4gPSBudWxsOwogICAgZnVuY3Rpb24gbW92ZVYoZGlyLCB1bml0KSB7CiAgICAgIHZhciBkaXN0ID0gMCwgcG9zID0gbG9jYWxDb29yZHMoc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8sIHRydWUpOwogICAgICBpZiAoZ29hbENvbHVtbiAhPSBudWxsKSBwb3MueCA9IGdvYWxDb2x1bW47CiAgICAgIGlmICh1bml0ID09ICJwYWdlIikgZGlzdCA9IE1hdGgubWluKHNjcm9sbGVyLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpOwogICAgICBlbHNlIGlmICh1bml0ID09ICJsaW5lIikgZGlzdCA9IHRleHRIZWlnaHQoKTsKICAgICAgdmFyIHRhcmdldCA9IGNvb3Jkc0NoYXIocG9zLngsIHBvcy55ICsgZGlzdCAqIGRpciArIDIpOwogICAgICBpZiAodW5pdCA9PSAicGFnZSIpIHNjcm9sbGJhci5zY3JvbGxUb3AgKz0gbG9jYWxDb29yZHModGFyZ2V0LCB0cnVlKS55IC0gcG9zLnk7CiAgICAgIHNldEN1cnNvcih0YXJnZXQubGluZSwgdGFyZ2V0LmNoLCB0cnVlKTsKICAgICAgZ29hbENvbHVtbiA9IHBvcy54OwogICAgfQoKICAgIGZ1bmN0aW9uIHNlbGVjdFdvcmRBdChwb3MpIHsKICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKHBvcy5saW5lKS50ZXh0OwogICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDsKICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiBpc1dvcmRDaGFyKGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSAtLXN0YXJ0OwogICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgaXNXb3JkQ2hhcihsaW5lLmNoYXJBdChlbmQpKSkgKytlbmQ7CiAgICAgIHNldFNlbGVjdGlvblVzZXIoe2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9LCB7bGluZTogcG9zLmxpbmUsIGNoOiBlbmR9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlbGVjdExpbmUobGluZSkgewogICAgICBzZXRTZWxlY3Rpb25Vc2VyKHtsaW5lOiBsaW5lLCBjaDogMH0sIGNsaXBQb3Moe2xpbmU6IGxpbmUgKyAxLCBjaDogMH0pKTsKICAgIH0KICAgIGZ1bmN0aW9uIGluZGVudFNlbGVjdGVkKG1vZGUpIHsKICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4gaW5kZW50TGluZShzZWwuZnJvbS5saW5lLCBtb2RlKTsKICAgICAgdmFyIGUgPSBzZWwudG8ubGluZSAtIChzZWwudG8uY2ggPyAwIDogMSk7CiAgICAgIGZvciAodmFyIGkgPSBzZWwuZnJvbS5saW5lOyBpIDw9IGU7ICsraSkgaW5kZW50TGluZShpLCBtb2RlKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmRlbnRMaW5lKG4sIGhvdykgewogICAgICBpZiAoIWhvdykgaG93ID0gImFkZCI7CiAgICAgIGlmIChob3cgPT0gInNtYXJ0IikgewogICAgICAgIGlmICghbW9kZS5pbmRlbnQpIGhvdyA9ICJwcmV2IjsKICAgICAgICBlbHNlIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKG4pOwogICAgICB9CgogICAgICB2YXIgbGluZSA9IGdldExpbmUobiksIGN1clNwYWNlID0gbGluZS5pbmRlbnRhdGlvbihvcHRpb25zLnRhYlNpemUpLAogICAgICAgICAgY3VyU3BhY2VTdHJpbmcgPSBsaW5lLnRleHQubWF0Y2goL15ccyovKVswXSwgaW5kZW50YXRpb247CiAgICAgIGlmIChob3cgPT0gInNtYXJ0IikgewogICAgICAgIGluZGVudGF0aW9uID0gbW9kZS5pbmRlbnQoc3RhdGUsIGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpOwogICAgICAgIGlmIChpbmRlbnRhdGlvbiA9PSBQYXNzKSBob3cgPSAicHJldiI7CiAgICAgIH0KICAgICAgaWYgKGhvdyA9PSAicHJldiIpIHsKICAgICAgICBpZiAobikgaW5kZW50YXRpb24gPSBnZXRMaW5lKG4tMSkuaW5kZW50YXRpb24ob3B0aW9ucy50YWJTaXplKTsKICAgICAgICBlbHNlIGluZGVudGF0aW9uID0gMDsKICAgICAgfQogICAgICBlbHNlIGlmIChob3cgPT0gImFkZCIpIGluZGVudGF0aW9uID0gY3VyU3BhY2UgKyBvcHRpb25zLmluZGVudFVuaXQ7CiAgICAgIGVsc2UgaWYgKGhvdyA9PSAic3VidHJhY3QiKSBpbmRlbnRhdGlvbiA9IGN1clNwYWNlIC0gb3B0aW9ucy5pbmRlbnRVbml0OwogICAgICBpbmRlbnRhdGlvbiA9IE1hdGgubWF4KDAsIGluZGVudGF0aW9uKTsKICAgICAgdmFyIGRpZmYgPSBpbmRlbnRhdGlvbiAtIGN1clNwYWNlOwoKICAgICAgaWYgKCFkaWZmKSB7CiAgICAgICAgaWYgKHNlbC5mcm9tLmxpbmUgIT0gbiAmJiBzZWwudG8ubGluZSAhPSBuKSByZXR1cm47CiAgICAgICAgdmFyIGluZGVudFN0cmluZyA9IGN1clNwYWNlU3RyaW5nOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBpbmRlbnRTdHJpbmcgPSAiIiwgcG9zID0gMDsKICAgICAgICBpZiAob3B0aW9ucy5pbmRlbnRXaXRoVGFicykKICAgICAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29yKGluZGVudGF0aW9uIC8gb3B0aW9ucy50YWJTaXplKTsgaTsgLS1pKSB7cG9zICs9IG9wdGlvbnMudGFiU2l6ZTsgaW5kZW50U3RyaW5nICs9ICJcdCI7fQogICAgICAgIHdoaWxlIChwb3MgPCBpbmRlbnRhdGlvbikgeysrcG9zOyBpbmRlbnRTdHJpbmcgKz0gIiAiO30KICAgICAgfQoKICAgICAgcmVwbGFjZVJhbmdlKGluZGVudFN0cmluZywge2xpbmU6IG4sIGNoOiAwfSwge2xpbmU6IG4sIGNoOiBjdXJTcGFjZVN0cmluZy5sZW5ndGh9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkTW9kZSgpIHsKICAgICAgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShvcHRpb25zLCBvcHRpb25zLm1vZGUpOwogICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgeyBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOyB9KTsKICAgICAgd29yayA9IFswXTsKICAgICAgc3RhcnRXb3JrZXIoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGd1dHRlckNoYW5nZWQoKSB7CiAgICAgIHZhciB2aXNpYmxlID0gb3B0aW9ucy5ndXR0ZXIgfHwgb3B0aW9ucy5saW5lTnVtYmVyczsKICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gIiIgOiAibm9uZSI7CiAgICAgIGlmICh2aXNpYmxlKSBndXR0ZXJEaXJ0eSA9IHRydWU7CiAgICAgIGVsc2UgbGluZURpdi5wYXJlbnROb2RlLnN0eWxlLm1hcmdpbkxlZnQgPSAwOwogICAgfQogICAgZnVuY3Rpb24gd3JhcHBpbmdDaGFuZ2VkKGZyb20sIHRvKSB7CiAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgewogICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci13cmFwIjsKICAgICAgICB2YXIgcGVyTGluZSA9IHNjcm9sbGVyLmNsaWVudFdpZHRoIC8gY2hhcldpZHRoKCkgLSAzOwogICAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICBpZiAobGluZS5oaWRkZW4pIHJldHVybjsKICAgICAgICAgIHZhciBndWVzcyA9IE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMTsKICAgICAgICAgIGlmIChndWVzcyAhPSAxKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGd1ZXNzKTsKICAgICAgICB9KTsKICAgICAgICBsaW5lU3BhY2Uuc3R5bGUud2lkdGggPSBjb2RlLnN0eWxlLndpZHRoID0gIiI7CiAgICAgICAgd2lkdGhGb3JjZXIuc3R5bGUubGVmdCA9ICIiOwogICAgICB9IGVsc2UgewogICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gd3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itd3JhcCIsICIiKTsKICAgICAgICBtYXhMaW5lID0gIiI7IG1heExpbmVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IDEgJiYgIWxpbmUuaGlkZGVuKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDEpOwogICAgICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGggPiBtYXhMaW5lLmxlbmd0aCkgbWF4TGluZSA9IGxpbmUudGV4dDsKICAgICAgICB9KTsKICAgICAgfQogICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IDAsIHRvOiBkb2Muc2l6ZX0pOwogICAgfQogICAgZnVuY3Rpb24gbWFrZVRhYihjb2wpIHsKICAgICAgdmFyIHcgPSBvcHRpb25zLnRhYlNpemUgLSBjb2wgJSBvcHRpb25zLnRhYlNpemUsIGNhY2hlZCA9IHRhYkNhY2hlW3ddOwogICAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwogICAgICBmb3IgKHZhciBzdHIgPSAnPHNwYW4gY2xhc3M9ImNtLXRhYiI+JywgaSA9IDA7IGkgPCB3OyArK2kpIHN0ciArPSAiICI7CiAgICAgIHJldHVybiAodGFiQ2FjaGVbd10gPSB7aHRtbDogc3RyICsgIjwvc3Bhbj4iLCB3aWR0aDogd30pOwogICAgfQogICAgZnVuY3Rpb24gdGhlbWVDaGFuZ2VkKCkgewogICAgICBzY3JvbGxlci5jbGFzc05hbWUgPSBzY3JvbGxlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20tcy1cUysvZywgIiIpICsKICAgICAgICBvcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxzKVxzKi9nLCAiIGNtLXMtIik7CiAgICB9CiAgICBmdW5jdGlvbiBrZXlNYXBDaGFuZ2VkKCkgewogICAgICB2YXIgc3R5bGUgPSBrZXlNYXBbb3B0aW9ucy5rZXlNYXBdLnN0eWxlOwogICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IHdyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLWtleW1hcC1cUysvZywgIiIpICsKICAgICAgICAoc3R5bGUgPyAiIGNtLWtleW1hcC0iICsgc3R5bGUgOiAiIik7CiAgICB9CgogICAgZnVuY3Rpb24gVGV4dE1hcmtlcigpIHsgdGhpcy5zZXQgPSBbXTsgfQogICAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBvcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgIHZhciBtaW4gPSBJbmZpbml0eSwgbWF4ID0gLUluZmluaXR5OwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuc2V0Lmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXRbaV0sIG1rID0gbGluZS5tYXJrZWQ7CiAgICAgICAgaWYgKCFtayB8fCAhbGluZS5wYXJlbnQpIGNvbnRpbnVlOwogICAgICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTsKICAgICAgICBtaW4gPSBNYXRoLm1pbihtaW4sIGxpbmVOKTsgbWF4ID0gTWF0aC5tYXgobWF4LCBsaW5lTik7CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtay5sZW5ndGg7ICsraikKICAgICAgICAgIGlmIChta1tqXS5tYXJrZXIgPT0gdGhpcykgbWsuc3BsaWNlKGotLSwgMSk7CiAgICAgIH0KICAgICAgaWYgKG1pbiAhPSBJbmZpbml0eSkKICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IG1pbiwgdG86IG1heCArIDF9KTsKICAgIH0pOwogICAgVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgZnJvbSwgdG87CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5zZXQubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNldFtpXSwgbWsgPSBsaW5lLm1hcmtlZDsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1rLmxlbmd0aDsgKytqKSB7CiAgICAgICAgICB2YXIgbWFyayA9IG1rW2pdOwogICAgICAgICAgaWYgKG1hcmsubWFya2VyID09IHRoaXMpIHsKICAgICAgICAgICAgaWYgKG1hcmsuZnJvbSAhPSBudWxsIHx8IG1hcmsudG8gIT0gbnVsbCkgewogICAgICAgICAgICAgIHZhciBmb3VuZCA9IGxpbmVObyhsaW5lKTsKICAgICAgICAgICAgICBpZiAoZm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKG1hcmsuZnJvbSAhPSBudWxsKSBmcm9tID0ge2xpbmU6IGZvdW5kLCBjaDogbWFyay5mcm9tfTsKICAgICAgICAgICAgICAgIGlmIChtYXJrLnRvICE9IG51bGwpIHRvID0ge2xpbmU6IGZvdW5kLCBjaDogbWFyay50b307CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7ZnJvbTogZnJvbSwgdG86IHRvfTsKICAgIH07CgogICAgZnVuY3Rpb24gbWFya1RleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSkgewogICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsgdG8gPSBjbGlwUG9zKHRvKTsKICAgICAgdmFyIHRtID0gbmV3IFRleHRNYXJrZXIoKTsKICAgICAgaWYgKCFwb3NMZXNzKGZyb20sIHRvKSkgcmV0dXJuIHRtOwogICAgICBmdW5jdGlvbiBhZGQobGluZSwgZnJvbSwgdG8sIGNsYXNzTmFtZSkgewogICAgICAgIGdldExpbmUobGluZSkuYWRkTWFyayhuZXcgTWFya2VkVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lLCB0bSkpOwogICAgICB9CiAgICAgIGlmIChmcm9tLmxpbmUgPT0gdG8ubGluZSkgYWRkKGZyb20ubGluZSwgZnJvbS5jaCwgdG8uY2gsIGNsYXNzTmFtZSk7CiAgICAgIGVsc2UgewogICAgICAgIGFkZChmcm9tLmxpbmUsIGZyb20uY2gsIG51bGwsIGNsYXNzTmFtZSk7CiAgICAgICAgZm9yICh2YXIgaSA9IGZyb20ubGluZSArIDEsIGUgPSB0by5saW5lOyBpIDwgZTsgKytpKQogICAgICAgICAgYWRkKGksIG51bGwsIG51bGwsIGNsYXNzTmFtZSk7CiAgICAgICAgYWRkKHRvLmxpbmUsIG51bGwsIHRvLmNoLCBjbGFzc05hbWUpOwogICAgICB9CiAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogdG8ubGluZSArIDF9KTsKICAgICAgcmV0dXJuIHRtOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldEJvb2ttYXJrKHBvcykgewogICAgICBwb3MgPSBjbGlwUG9zKHBvcyk7CiAgICAgIHZhciBibSA9IG5ldyBCb29rbWFyayhwb3MuY2gpOwogICAgICBnZXRMaW5lKHBvcy5saW5lKS5hZGRNYXJrKGJtKTsKICAgICAgcmV0dXJuIGJtOwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbmRNYXJrc0F0KHBvcykgewogICAgICBwb3MgPSBjbGlwUG9zKHBvcyk7CiAgICAgIHZhciBtYXJrZXJzID0gW10sIG1hcmtlZCA9IGdldExpbmUocG9zLmxpbmUpLm1hcmtlZDsKICAgICAgaWYgKCFtYXJrZWQpIHJldHVybiBtYXJrZXJzOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IG1hcmtlZC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgbSA9IG1hcmtlZFtpXTsKICAgICAgICBpZiAoKG0uZnJvbSA9PSBudWxsIHx8IG0uZnJvbSA8PSBwb3MuY2gpICYmCiAgICAgICAgICAgIChtLnRvID09IG51bGwgfHwgbS50byA+PSBwb3MuY2gpKQogICAgICAgICAgbWFya2Vycy5wdXNoKG0ubWFya2VyIHx8IG0pOwogICAgICB9CiAgICAgIHJldHVybiBtYXJrZXJzOwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZEd1dHRlck1hcmtlcihsaW5lLCB0ZXh0LCBjbGFzc05hbWUpIHsKICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSBsaW5lID0gZ2V0TGluZShjbGlwTGluZShsaW5lKSk7CiAgICAgIGxpbmUuZ3V0dGVyTWFya2VyID0ge3RleHQ6IHRleHQsIHN0eWxlOiBjbGFzc05hbWV9OwogICAgICBndXR0ZXJEaXJ0eSA9IHRydWU7CiAgICAgIHJldHVybiBsaW5lOwogICAgfQogICAgZnVuY3Rpb24gcmVtb3ZlR3V0dGVyTWFya2VyKGxpbmUpIHsKICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSBsaW5lID0gZ2V0TGluZShjbGlwTGluZShsaW5lKSk7CiAgICAgIGxpbmUuZ3V0dGVyTWFya2VyID0gbnVsbDsKICAgICAgZ3V0dGVyRGlydHkgPSB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGNoYW5nZUxpbmUoaGFuZGxlLCBvcCkgewogICAgICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGU7CiAgICAgIGlmICh0eXBlb2YgaGFuZGxlID09ICJudW1iZXIiKSBsaW5lID0gZ2V0TGluZShjbGlwTGluZShoYW5kbGUpKTsKICAgICAgZWxzZSBubyA9IGxpbmVObyhoYW5kbGUpOwogICAgICBpZiAobm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGlmIChvcChsaW5lLCBubykpIGNoYW5nZXMucHVzaCh7ZnJvbTogbm8sIHRvOiBubyArIDF9KTsKICAgICAgZWxzZSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIGxpbmU7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRMaW5lQ2xhc3MoaGFuZGxlLCBjbGFzc05hbWUsIGJnQ2xhc3NOYW1lKSB7CiAgICAgIHJldHVybiBjaGFuZ2VMaW5lKGhhbmRsZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChsaW5lLmNsYXNzTmFtZSAhPSBjbGFzc05hbWUgfHwgbGluZS5iZ0NsYXNzTmFtZSAhPSBiZ0NsYXNzTmFtZSkgewogICAgICAgICAgbGluZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7CiAgICAgICAgICBsaW5lLmJnQ2xhc3NOYW1lID0gYmdDbGFzc05hbWU7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gc2V0TGluZUhpZGRlbihoYW5kbGUsIGhpZGRlbikgewogICAgICByZXR1cm4gY2hhbmdlTGluZShoYW5kbGUsIGZ1bmN0aW9uKGxpbmUsIG5vKSB7CiAgICAgICAgaWYgKGxpbmUuaGlkZGVuICE9IGhpZGRlbikgewogICAgICAgICAgbGluZS5oaWRkZW4gPSBoaWRkZW47CiAgICAgICAgICBpZiAoIW9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICAgICAgIHZhciBsID0gbGluZS50ZXh0OwogICAgICAgICAgICBpZiAoaGlkZGVuICYmIGwubGVuZ3RoID09IG1heExpbmUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgdXBkYXRlTWF4TGluZSA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWhpZGRlbiAmJiBsLmxlbmd0aCA+IG1heExpbmUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgbWF4TGluZSA9IGw7IG1heFdpZHRoID0gbnVsbDsgdXBkYXRlTWF4TGluZSA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGhpZGRlbiA/IDAgOiAxKTsKICAgICAgICAgIHZhciBmbGluZSA9IHNlbC5mcm9tLmxpbmUsIHRsaW5lID0gc2VsLnRvLmxpbmU7CiAgICAgICAgICBpZiAoaGlkZGVuICYmIChmbGluZSA9PSBubyB8fCB0bGluZSA9PSBubykpIHsKICAgICAgICAgICAgdmFyIGZyb20gPSBmbGluZSA9PSBubyA/IHNraXBIaWRkZW4oe2xpbmU6IGZsaW5lLCBjaDogMH0sIGZsaW5lLCAwKSA6IHNlbC5mcm9tOwogICAgICAgICAgICB2YXIgdG8gPSB0bGluZSA9PSBubyA/IHNraXBIaWRkZW4oe2xpbmU6IHRsaW5lLCBjaDogMH0sIHRsaW5lLCAwKSA6IHNlbC50bzsKICAgICAgICAgICAgLy8gQ2FuJ3QgaGlkZSB0aGUgbGFzdCB2aXNpYmxlIGxpbmUsIHdlJ2QgaGF2ZSBubyBwbGFjZSB0byBwdXQgdGhlIGN1cnNvcgogICAgICAgICAgICBpZiAoIXRvKSByZXR1cm47CiAgICAgICAgICAgIHNldFNlbGVjdGlvbihmcm9tLCB0byk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gKGd1dHRlckRpcnR5ID0gdHJ1ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBsaW5lSW5mbyhsaW5lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgewogICAgICAgIGlmICghaXNMaW5lKGxpbmUpKSByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgbiA9IGxpbmU7CiAgICAgICAgbGluZSA9IGdldExpbmUobGluZSk7CiAgICAgICAgaWYgKCFsaW5lKSByZXR1cm4gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbiA9IGxpbmVObyhsaW5lKTsKICAgICAgICBpZiAobiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICB2YXIgbWFya2VyID0gbGluZS5ndXR0ZXJNYXJrZXI7CiAgICAgIHJldHVybiB7bGluZTogbiwgaGFuZGxlOiBsaW5lLCB0ZXh0OiBsaW5lLnRleHQsIG1hcmtlclRleHQ6IG1hcmtlciAmJiBtYXJrZXIudGV4dCwKICAgICAgICAgICAgICBtYXJrZXJDbGFzczogbWFya2VyICYmIG1hcmtlci5zdHlsZSwgbGluZUNsYXNzOiBsaW5lLmNsYXNzTmFtZSwgYmdDbGFzczogbGluZS5iZ0NsYXNzTmFtZX07CiAgICB9CgogICAgZnVuY3Rpb24gc3RyaW5nV2lkdGgoc3RyKSB7CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gIjxwcmU+PHNwYW4+eDwvc3Bhbj48L3ByZT4iOwogICAgICBtZWFzdXJlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IHN0cjsKICAgICAgcmV0dXJuIG1lYXN1cmUuZmlyc3RDaGlsZC5maXJzdENoaWxkLm9mZnNldFdpZHRoIHx8IDEwOwogICAgfQogICAgLy8gVGhlc2UgYXJlIHVzZWQgdG8gZ28gZnJvbSBwaXhlbCBwb3NpdGlvbnMgdG8gY2hhcmFjdGVyCiAgICAvLyBwb3NpdGlvbnMsIHRha2luZyB2YXJ5aW5nIGNoYXJhY3RlciB3aWR0aHMgaW50byBhY2NvdW50LgogICAgZnVuY3Rpb24gY2hhckZyb21YKGxpbmUsIHgpIHsKICAgICAgaWYgKHggPD0gMCkgcmV0dXJuIDA7CiAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShsaW5lKSwgdGV4dCA9IGxpbmVPYmoudGV4dDsKICAgICAgZnVuY3Rpb24gZ2V0WChsZW4pIHsKICAgICAgICByZXR1cm4gbWVhc3VyZUxpbmUobGluZU9iaiwgbGVuKS5sZWZ0OwogICAgICB9CiAgICAgIHZhciBmcm9tID0gMCwgZnJvbVggPSAwLCB0byA9IHRleHQubGVuZ3RoLCB0b1g7CiAgICAgIC8vIEd1ZXNzIGEgc3VpdGFibGUgdXBwZXIgYm91bmQgZm9yIG91ciBzZWFyY2guCiAgICAgIHZhciBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWlsKHggLyBjaGFyV2lkdGgoKSkpOwogICAgICBmb3IgKDs7KSB7CiAgICAgICAgdmFyIGVzdFggPSBnZXRYKGVzdGltYXRlZCk7CiAgICAgICAgaWYgKGVzdFggPD0geCAmJiBlc3RpbWF0ZWQgPCB0bykgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbChlc3RpbWF0ZWQgKiAxLjIpKTsKICAgICAgICBlbHNlIHt0b1ggPSBlc3RYOyB0byA9IGVzdGltYXRlZDsgYnJlYWs7fQogICAgICB9CiAgICAgIGlmICh4ID4gdG9YKSByZXR1cm4gdG87CiAgICAgIC8vIFRyeSB0byBndWVzcyBhIHN1aXRhYmxlIGxvd2VyIGJvdW5kIGFzIHdlbGwuCiAgICAgIGVzdGltYXRlZCA9IE1hdGguZmxvb3IodG8gKiAwLjgpOyBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOwogICAgICBpZiAoZXN0WCA8IHgpIHtmcm9tID0gZXN0aW1hdGVkOyBmcm9tWCA9IGVzdFg7fQogICAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2ggYmV0d2VlbiB0aGVzZSBib3VuZHMuCiAgICAgIGZvciAoOzspIHsKICAgICAgICBpZiAodG8gLSBmcm9tIDw9IDEpIHJldHVybiAodG9YIC0geCA+IHggLSBmcm9tWCkgPyBmcm9tIDogdG87CiAgICAgICAgdmFyIG1pZGRsZSA9IE1hdGguY2VpbCgoZnJvbSArIHRvKSAvIDIpLCBtaWRkbGVYID0gZ2V0WChtaWRkbGUpOwogICAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRkbGVYO30KICAgICAgICBlbHNlIHtmcm9tID0gbWlkZGxlOyBmcm9tWCA9IG1pZGRsZVg7fQogICAgICB9CiAgICB9CgogICAgdmFyIHRlbXBJZCA9ICJDb2RlTWlycm9yLXRlbXAtIiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmKS50b1N0cmluZygxNik7CiAgICBmdW5jdGlvbiBtZWFzdXJlTGluZShsaW5lLCBjaCkgewogICAgICBpZiAoY2ggPT0gMCkgcmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDB9OwogICAgICB2YXIgd2JyID0gb3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgY2ggPCBsaW5lLnRleHQubGVuZ3RoICYmCiAgICAgICAgICAgICAgICBzcGFuQWZmZWN0c1dyYXBwaW5nLnRlc3QobGluZS50ZXh0LnNsaWNlKGNoIC0gMSwgY2ggKyAxKSk7CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gIjxwcmU+IiArIGxpbmUuZ2V0SFRNTChtYWtlVGFiLCBjaCwgdGVtcElkLCB3YnIpICsgIjwvcHJlPiI7CiAgICAgIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0ZW1wSWQpOwogICAgICB2YXIgdG9wID0gZWx0Lm9mZnNldFRvcCwgbGVmdCA9IGVsdC5vZmZzZXRMZWZ0OwogICAgICAvLyBPbGRlciBJRXMgcmVwb3J0IHplcm8gb2Zmc2V0cyBmb3Igc3BhbnMgZGlyZWN0bHkgYWZ0ZXIgYSB3cmFwCiAgICAgIGlmIChpZSAmJiB0b3AgPT0gMCAmJiBsZWZ0ID09IDApIHsKICAgICAgICB2YXIgYmFja3VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgIGJhY2t1cC5pbm5lckhUTUwgPSAieCI7CiAgICAgICAgZWx0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJhY2t1cCwgZWx0Lm5leHRTaWJsaW5nKTsKICAgICAgICB0b3AgPSBiYWNrdXAub2Zmc2V0VG9wOwogICAgICB9CiAgICAgIHJldHVybiB7dG9wOiB0b3AsIGxlZnQ6IGxlZnR9OwogICAgfQogICAgZnVuY3Rpb24gbG9jYWxDb29yZHMocG9zLCBpbkxpbmVXcmFwKSB7CiAgICAgIHZhciB4LCBsaCA9IHRleHRIZWlnaHQoKSwgeSA9IGxoICogKGhlaWdodEF0TGluZShkb2MsIHBvcy5saW5lKSAtIChpbkxpbmVXcmFwID8gZGlzcGxheU9mZnNldCA6IDApKTsKICAgICAgaWYgKHBvcy5jaCA9PSAwKSB4ID0gMDsKICAgICAgZWxzZSB7CiAgICAgICAgdmFyIHNwID0gbWVhc3VyZUxpbmUoZ2V0TGluZShwb3MubGluZSksIHBvcy5jaCk7CiAgICAgICAgeCA9IHNwLmxlZnQ7CiAgICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKSB5ICs9IE1hdGgubWF4KDAsIHNwLnRvcCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHt4OiB4LCB5OiB5LCB5Qm90OiB5ICsgbGh9OwogICAgfQogICAgLy8gQ29vcmRzIG11c3QgYmUgbGluZVNwYWNlLWxvY2FsCiAgICBmdW5jdGlvbiBjb29yZHNDaGFyKHgsIHkpIHsKICAgICAgaWYgKHkgPCAwKSB5ID0gMDsKICAgICAgdmFyIHRoID0gdGV4dEhlaWdodCgpLCBjdyA9IGNoYXJXaWR0aCgpLCBoZWlnaHRQb3MgPSBkaXNwbGF5T2Zmc2V0ICsgTWF0aC5mbG9vcih5IC8gdGgpOwogICAgICB2YXIgbGluZU5vID0gbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0UG9zKTsKICAgICAgaWYgKGxpbmVObyA+PSBkb2Muc2l6ZSkgcmV0dXJuIHtsaW5lOiBkb2Muc2l6ZSAtIDEsIGNoOiBnZXRMaW5lKGRvYy5zaXplIC0gMSkudGV4dC5sZW5ndGh9OwogICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUobGluZU5vKSwgdGV4dCA9IGxpbmVPYmoudGV4dDsKICAgICAgdmFyIHR3ID0gb3B0aW9ucy5saW5lV3JhcHBpbmcsIGlubmVyT2ZmID0gdHcgPyBoZWlnaHRQb3MgLSBoZWlnaHRBdExpbmUoZG9jLCBsaW5lTm8pIDogMDsKICAgICAgaWYgKHggPD0gMCAmJiBpbm5lck9mZiA9PSAwKSByZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6IDB9OwogICAgICBmdW5jdGlvbiBnZXRYKGxlbikgewogICAgICAgIHZhciBzcCA9IG1lYXN1cmVMaW5lKGxpbmVPYmosIGxlbik7CiAgICAgICAgaWYgKHR3KSB7CiAgICAgICAgICB2YXIgb2ZmID0gTWF0aC5yb3VuZChzcC50b3AgLyB0aCk7CiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgc3AubGVmdCArIChvZmYgLSBpbm5lck9mZikgKiBzY3JvbGxlci5jbGllbnRXaWR0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzcC5sZWZ0OwogICAgICB9CiAgICAgIHZhciBmcm9tID0gMCwgZnJvbVggPSAwLCB0byA9IHRleHQubGVuZ3RoLCB0b1g7CiAgICAgIC8vIEd1ZXNzIGEgc3VpdGFibGUgdXBwZXIgYm91bmQgZm9yIG91ciBzZWFyY2guCiAgICAgIHZhciBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWlsKCh4ICsgaW5uZXJPZmYgKiBzY3JvbGxlci5jbGllbnRXaWR0aCAqIC45KSAvIGN3KSk7CiAgICAgIGZvciAoOzspIHsKICAgICAgICB2YXIgZXN0WCA9IGdldFgoZXN0aW1hdGVkKTsKICAgICAgICBpZiAoZXN0WCA8PSB4ICYmIGVzdGltYXRlZCA8IHRvKSBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWlsKGVzdGltYXRlZCAqIDEuMikpOwogICAgICAgIGVsc2Uge3RvWCA9IGVzdFg7IHRvID0gZXN0aW1hdGVkOyBicmVhazt9CiAgICAgIH0KICAgICAgaWYgKHggPiB0b1gpIHJldHVybiB7bGluZTogbGluZU5vLCBjaDogdG99OwogICAgICAvLyBUcnkgdG8gZ3Vlc3MgYSBzdWl0YWJsZSBsb3dlciBib3VuZCBhcyB3ZWxsLgogICAgICBlc3RpbWF0ZWQgPSBNYXRoLmZsb29yKHRvICogMC44KTsgZXN0WCA9IGdldFgoZXN0aW1hdGVkKTsKICAgICAgaWYgKGVzdFggPCB4KSB7ZnJvbSA9IGVzdGltYXRlZDsgZnJvbVggPSBlc3RYO30KICAgICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIGJldHdlZW4gdGhlc2UgYm91bmRzLgogICAgICBmb3IgKDs7KSB7CiAgICAgICAgaWYgKHRvIC0gZnJvbSA8PSAxKSByZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6ICh0b1ggLSB4ID4geCAtIGZyb21YKSA/IGZyb20gOiB0b307CiAgICAgICAgdmFyIG1pZGRsZSA9IE1hdGguY2VpbCgoZnJvbSArIHRvKSAvIDIpLCBtaWRkbGVYID0gZ2V0WChtaWRkbGUpOwogICAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRkbGVYO30KICAgICAgICBlbHNlIHtmcm9tID0gbWlkZGxlOyBmcm9tWCA9IG1pZGRsZVg7fQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBwYWdlQ29vcmRzKHBvcykgewogICAgICB2YXIgbG9jYWwgPSBsb2NhbENvb3Jkcyhwb3MsIHRydWUpLCBvZmYgPSBlbHRPZmZzZXQobGluZVNwYWNlKTsKICAgICAgcmV0dXJuIHt4OiBvZmYubGVmdCArIGxvY2FsLngsIHk6IG9mZi50b3AgKyBsb2NhbC55LCB5Qm90OiBvZmYudG9wICsgbG9jYWwueUJvdH07CiAgICB9CgogICAgdmFyIGNhY2hlZEhlaWdodCwgY2FjaGVkSGVpZ2h0Rm9yLCBtZWFzdXJlVGV4dDsKICAgIGZ1bmN0aW9uIHRleHRIZWlnaHQoKSB7CiAgICAgIGlmIChtZWFzdXJlVGV4dCA9PSBudWxsKSB7CiAgICAgICAgbWVhc3VyZVRleHQgPSAiPHByZT4iOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDk7ICsraSkgbWVhc3VyZVRleHQgKz0gIng8YnIvPiI7CiAgICAgICAgbWVhc3VyZVRleHQgKz0gIng8L3ByZT4iOwogICAgICB9CiAgICAgIHZhciBvZmZzZXRIZWlnaHQgPSBsaW5lRGl2LmNsaWVudEhlaWdodDsKICAgICAgaWYgKG9mZnNldEhlaWdodCA9PSBjYWNoZWRIZWlnaHRGb3IpIHJldHVybiBjYWNoZWRIZWlnaHQ7CiAgICAgIGNhY2hlZEhlaWdodEZvciA9IG9mZnNldEhlaWdodDsKICAgICAgbWVhc3VyZS5pbm5lckhUTUwgPSBtZWFzdXJlVGV4dDsKICAgICAgY2FjaGVkSGVpZ2h0ID0gbWVhc3VyZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCAvIDUwIHx8IDE7CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gIiI7CiAgICAgIHJldHVybiBjYWNoZWRIZWlnaHQ7CiAgICB9CiAgICB2YXIgY2FjaGVkV2lkdGgsIGNhY2hlZFdpZHRoRm9yID0gMDsKICAgIGZ1bmN0aW9uIGNoYXJXaWR0aCgpIHsKICAgICAgaWYgKHNjcm9sbGVyLmNsaWVudFdpZHRoID09IGNhY2hlZFdpZHRoRm9yKSByZXR1cm4gY2FjaGVkV2lkdGg7CiAgICAgIGNhY2hlZFdpZHRoRm9yID0gc2Nyb2xsZXIuY2xpZW50V2lkdGg7CiAgICAgIHJldHVybiAoY2FjaGVkV2lkdGggPSBzdHJpbmdXaWR0aCgieCIpKTsKICAgIH0KICAgIGZ1bmN0aW9uIHBhZGRpbmdUb3AoKSB7cmV0dXJuIGxpbmVTcGFjZS5vZmZzZXRUb3A7fQogICAgZnVuY3Rpb24gcGFkZGluZ0xlZnQoKSB7cmV0dXJuIGxpbmVTcGFjZS5vZmZzZXRMZWZ0O30KCiAgICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoZSwgbGliZXJhbCkgewogICAgICB2YXIgb2ZmVyA9IGVsdE9mZnNldChzY3JvbGxlciwgdHJ1ZSksIHgsIHk7CiAgICAgIC8vIEZhaWxzIHVucHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4gbW91c2UgaXMgZHJhZ2dlZCBhcm91bmQgcXVpY2tseS4KICAgICAgdHJ5IHsgeCA9IGUuY2xpZW50WDsgeSA9IGUuY2xpZW50WTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfQogICAgICAvLyBUaGlzIGlzIGEgbWVzcyBvZiBhIGhldXJpc3RpYyB0byB0cnkgYW5kIGRldGVybWluZSB3aGV0aGVyIGEKICAgICAgLy8gc2Nyb2xsLWJhciB3YXMgY2xpY2tlZCBvciBub3QsIGFuZCB0byByZXR1cm4gbnVsbCBpZiBvbmUgd2FzCiAgICAgIC8vIChhbmQgIWxpYmVyYWwpLgogICAgICBpZiAoIWxpYmVyYWwgJiYgKHggLSBvZmZXLmxlZnQgPiBzY3JvbGxlci5jbGllbnRXaWR0aCB8fCB5IC0gb2ZmVy50b3AgPiBzY3JvbGxlci5jbGllbnRIZWlnaHQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICB2YXIgb2ZmTCA9IGVsdE9mZnNldChsaW5lU3BhY2UsIHRydWUpOwogICAgICByZXR1cm4gY29vcmRzQ2hhcih4IC0gb2ZmTC5sZWZ0LCB5IC0gb2ZmTC50b3ApOwogICAgfQogICAgZnVuY3Rpb24gb25Db250ZXh0TWVudShlKSB7CiAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoZSksIHNjcm9sbFBvcyA9IHNjcm9sbGJhci5zY3JvbGxUb3A7CiAgICAgIGlmICghcG9zIHx8IG9wZXJhKSByZXR1cm47IC8vIE9wZXJhIGlzIGRpZmZpY3VsdC4KICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pIHx8IHBvc0xlc3MocG9zLCBzZWwuZnJvbSkgfHwgIXBvc0xlc3MocG9zLCBzZWwudG8pKQogICAgICAgIG9wZXJhdGlvbihzZXRDdXJzb3IpKHBvcy5saW5lLCBwb3MuY2gpOwoKICAgICAgdmFyIG9sZENTUyA9IGlucHV0LnN0eWxlLmNzc1RleHQ7CiAgICAgIGlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSArCiAgICAgICAgInB4OyBsZWZ0OiAiICsgKGUuY2xpZW50WCAtIDUpICsgInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgIiArCiAgICAgICAgImJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IjsKICAgICAgbGVhdmVJbnB1dEFsb25lID0gdHJ1ZTsKICAgICAgdmFyIHZhbCA9IGlucHV0LnZhbHVlID0gZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGZvY3VzSW5wdXQoKTsKICAgICAgc2VsZWN0SW5wdXQoaW5wdXQpOwogICAgICBmdW5jdGlvbiByZWhpZGUoKSB7CiAgICAgICAgdmFyIG5ld1ZhbCA9IHNwbGl0TGluZXMoaW5wdXQudmFsdWUpLmpvaW4oIlxuIik7CiAgICAgICAgaWYgKG5ld1ZhbCAhPSB2YWwgJiYgIW9wdGlvbnMucmVhZE9ubHkpIG9wZXJhdGlvbihyZXBsYWNlU2VsZWN0aW9uKShuZXdWYWwsICJlbmQiKTsKICAgICAgICBpbnB1dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CiAgICAgICAgaW5wdXQuc3R5bGUuY3NzVGV4dCA9IG9sZENTUzsKICAgICAgICBpZiAoaWVfbHQ5KSBzY3JvbGxiYXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zOwogICAgICAgIGxlYXZlSW5wdXRBbG9uZSA9IGZhbHNlOwogICAgICAgIHJlc2V0SW5wdXQodHJ1ZSk7CiAgICAgICAgc2xvd1BvbGwoKTsKICAgICAgfQoKICAgICAgaWYgKGdlY2tvKSB7CiAgICAgICAgZV9zdG9wKGUpOwogICAgICAgIHZhciBtb3VzZXVwID0gY29ubmVjdCh3aW5kb3csICJtb3VzZXVwIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBtb3VzZXVwKCk7CiAgICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgMjApOwogICAgICAgIH0sIHRydWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCA1MCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDdXJzb3ItYmxpbmtpbmcKICAgIGZ1bmN0aW9uIHJlc3RhcnRCbGluaygpIHsKICAgICAgY2xlYXJJbnRlcnZhbChibGlua2VyKTsKICAgICAgdmFyIG9uID0gdHJ1ZTsKICAgICAgY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSAiIjsKICAgICAgYmxpbmtlciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgIGN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9uKSA/ICIiIDogImhpZGRlbiI7CiAgICAgIH0sIDY1MCk7CiAgICB9CgogICAgdmFyIG1hdGNoaW5nID0geyIoIjogIik+IiwgIikiOiAiKDwiLCAiWyI6ICJdPiIsICJdIjogIls8IiwgInsiOiAifT4iLCAifSI6ICJ7PCJ9OwogICAgZnVuY3Rpb24gbWF0Y2hCcmFja2V0cyhhdXRvY2xlYXIpIHsKICAgICAgdmFyIGhlYWQgPSBzZWwuaW52ZXJ0ZWQgPyBzZWwuZnJvbSA6IHNlbC50bywgbGluZSA9IGdldExpbmUoaGVhZC5saW5lKSwgcG9zID0gaGVhZC5jaCAtIDE7CiAgICAgIHZhciBtYXRjaCA9IChwb3MgPj0gMCAmJiBtYXRjaGluZ1tsaW5lLnRleHQuY2hhckF0KHBvcyldKSB8fCBtYXRjaGluZ1tsaW5lLnRleHQuY2hhckF0KCsrcG9zKV07CiAgICAgIGlmICghbWF0Y2gpIHJldHVybjsKICAgICAgdmFyIGNoID0gbWF0Y2guY2hhckF0KDApLCBmb3J3YXJkID0gbWF0Y2guY2hhckF0KDEpID09ICI+IiwgZCA9IGZvcndhcmQgPyAxIDogLTEsIHN0ID0gbGluZS5zdHlsZXM7CiAgICAgIGZvciAodmFyIG9mZiA9IHBvcyArIDEsIGkgPSAwLCBlID0gc3QubGVuZ3RoOyBpIDwgZTsgaSs9MikKICAgICAgICBpZiAoKG9mZiAtPSBzdFtpXS5sZW5ndGgpIDw9IDApIHt2YXIgc3R5bGUgPSBzdFtpKzFdOyBicmVhazt9CgogICAgICB2YXIgc3RhY2sgPSBbbGluZS50ZXh0LmNoYXJBdChwb3MpXSwgcmUgPSAvWygpe31bXF1dLzsKICAgICAgZnVuY3Rpb24gc2NhbihsaW5lLCBmcm9tLCB0bykgewogICAgICAgIGlmICghbGluZS50ZXh0KSByZXR1cm47CiAgICAgICAgdmFyIHN0ID0gbGluZS5zdHlsZXMsIHBvcyA9IGZvcndhcmQgPyAwIDogbGluZS50ZXh0Lmxlbmd0aCAtIDEsIGN1cjsKICAgICAgICBmb3IgKHZhciBpID0gZm9yd2FyZCA/IDAgOiBzdC5sZW5ndGggLSAyLCBlID0gZm9yd2FyZCA/IHN0Lmxlbmd0aCA6IC0yOyBpICE9IGU7IGkgKz0gMipkKSB7CiAgICAgICAgICB2YXIgdGV4dCA9IHN0W2ldOwogICAgICAgICAgaWYgKHN0W2krMV0gIT0gc3R5bGUpIHtwb3MgKz0gZCAqIHRleHQubGVuZ3RoOyBjb250aW51ZTt9CiAgICAgICAgICBmb3IgKHZhciBqID0gZm9yd2FyZCA/IDAgOiB0ZXh0Lmxlbmd0aCAtIDEsIHRlID0gZm9yd2FyZCA/IHRleHQubGVuZ3RoIDogLTE7IGogIT0gdGU7IGogKz0gZCwgcG9zKz1kKSB7CiAgICAgICAgICAgIGlmIChwb3MgPj0gZnJvbSAmJiBwb3MgPCB0byAmJiByZS50ZXN0KGN1ciA9IHRleHQuY2hhckF0KGopKSkgewogICAgICAgICAgICAgIHZhciBtYXRjaCA9IG1hdGNoaW5nW2N1cl07CiAgICAgICAgICAgICAgaWYgKG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIgPT0gZm9yd2FyZCkgc3RhY2sucHVzaChjdXIpOwogICAgICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKICAgICAgICAgICAgICBlbHNlIGlmICghc3RhY2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IGhlYWQubGluZSwgZSA9IGZvcndhcmQgPyBNYXRoLm1pbihpICsgMTAwLCBkb2Muc2l6ZSkgOiBNYXRoLm1heCgtMSwgaSAtIDEwMCk7IGkgIT0gZTsgaSs9ZCkgewogICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShpKSwgZmlyc3QgPSBpID09IGhlYWQubGluZTsKICAgICAgICB2YXIgZm91bmQgPSBzY2FuKGxpbmUsIGZpcnN0ICYmIGZvcndhcmQgPyBwb3MgKyAxIDogMCwgZmlyc3QgJiYgIWZvcndhcmQgPyBwb3MgOiBsaW5lLnRleHQubGVuZ3RoKTsKICAgICAgICBpZiAoZm91bmQpIGJyZWFrOwogICAgICB9CiAgICAgIGlmICghZm91bmQpIGZvdW5kID0ge3BvczogbnVsbCwgbWF0Y2g6IGZhbHNlfTsKICAgICAgdmFyIHN0eWxlID0gZm91bmQubWF0Y2ggPyAiQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQiIDogIkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IjsKICAgICAgdmFyIG9uZSA9IG1hcmtUZXh0KHtsaW5lOiBoZWFkLmxpbmUsIGNoOiBwb3N9LCB7bGluZTogaGVhZC5saW5lLCBjaDogcG9zKzF9LCBzdHlsZSksCiAgICAgICAgICB0d28gPSBmb3VuZC5wb3MgIT0gbnVsbCAmJiBtYXJrVGV4dCh7bGluZTogaSwgY2g6IGZvdW5kLnBvc30sIHtsaW5lOiBpLCBjaDogZm91bmQucG9zICsgMX0sIHN0eWxlKTsKICAgICAgdmFyIGNsZWFyID0gb3BlcmF0aW9uKGZ1bmN0aW9uKCl7b25lLmNsZWFyKCk7IHR3byAmJiB0d28uY2xlYXIoKTt9KTsKICAgICAgaWYgKGF1dG9jbGVhcikgc2V0VGltZW91dChjbGVhciwgODAwKTsKICAgICAgZWxzZSBicmFja2V0SGlnaGxpZ2h0ZWQgPSBjbGVhcjsKICAgIH0KCiAgICAvLyBGaW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG8KICAgIC8vIGZpbmQgYSBsaW5lIHdpdGggYSBzdGF0ZUFmdGVyLCBzbyB0aGF0IGl0IGNhbiBzdGFydCB3aXRoIGEKICAgIC8vIHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhlCiAgICAvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0bwogICAgLy8gcGFyc2UgY29ycmVjdGx5LgogICAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShuKSB7CiAgICAgIHZhciBtaW5pbmRlbnQsIG1pbmxpbmU7CiAgICAgIGZvciAodmFyIHNlYXJjaCA9IG4sIGxpbSA9IG4gLSA0MDsgc2VhcmNoID4gbGltOyAtLXNlYXJjaCkgewogICAgICAgIGlmIChzZWFyY2ggPT0gMCkgcmV0dXJuIDA7CiAgICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKHNlYXJjaC0xKTsKICAgICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSByZXR1cm4gc2VhcmNoOwogICAgICAgIHZhciBpbmRlbnRlZCA9IGxpbmUuaW5kZW50YXRpb24ob3B0aW9ucy50YWJTaXplKTsKICAgICAgICBpZiAobWlubGluZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7CiAgICAgICAgICBtaW5saW5lID0gc2VhcmNoIC0gMTsKICAgICAgICAgIG1pbmluZGVudCA9IGluZGVudGVkOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbWlubGluZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFN0YXRlQmVmb3JlKG4pIHsKICAgICAgdmFyIHN0YXJ0ID0gZmluZFN0YXJ0TGluZShuKSwgc3RhdGUgPSBzdGFydCAmJiBnZXRMaW5lKHN0YXJ0LTEpLnN0YXRlQWZ0ZXI7CiAgICAgIGlmICghc3RhdGUpIHN0YXRlID0gc3RhcnRTdGF0ZShtb2RlKTsKICAgICAgZWxzZSBzdGF0ZSA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgIGRvYy5pdGVyKHN0YXJ0LCBuLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgbGluZS5oaWdobGlnaHQobW9kZSwgc3RhdGUsIG9wdGlvbnMudGFiU2l6ZSk7CiAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgfSk7CiAgICAgIGlmIChzdGFydCA8IG4pIGNoYW5nZXMucHVzaCh7ZnJvbTogc3RhcnQsIHRvOiBufSk7CiAgICAgIGlmIChuIDwgZG9jLnNpemUgJiYgIWdldExpbmUobikuc3RhdGVBZnRlcikgd29yay5wdXNoKG4pOwogICAgICByZXR1cm4gc3RhdGU7CiAgICB9CiAgICBmdW5jdGlvbiBoaWdobGlnaHRMaW5lcyhzdGFydCwgZW5kKSB7CiAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKHN0YXJ0KTsKICAgICAgZG9jLml0ZXIoc3RhcnQsIGVuZCwgZnVuY3Rpb24obGluZSkgewogICAgICAgIGxpbmUuaGlnaGxpZ2h0KG1vZGUsIHN0YXRlLCBvcHRpb25zLnRhYlNpemUpOwogICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKCkgewogICAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgb3B0aW9ucy53b3JrVGltZTsKICAgICAgdmFyIGZvdW5kV29yayA9IHdvcmsubGVuZ3RoOwogICAgICB3aGlsZSAod29yay5sZW5ndGgpIHsKICAgICAgICBpZiAoIWdldExpbmUoc2hvd2luZ0Zyb20pLnN0YXRlQWZ0ZXIpIHZhciB0YXNrID0gc2hvd2luZ0Zyb207CiAgICAgICAgZWxzZSB2YXIgdGFzayA9IHdvcmsucG9wKCk7CiAgICAgICAgaWYgKHRhc2sgPj0gZG9jLnNpemUpIGNvbnRpbnVlOwogICAgICAgIHZhciBzdGFydCA9IGZpbmRTdGFydExpbmUodGFzayksIHN0YXRlID0gc3RhcnQgJiYgZ2V0TGluZShzdGFydC0xKS5zdGF0ZUFmdGVyOwogICAgICAgIGlmIChzdGF0ZSkgc3RhdGUgPSBjb3B5U3RhdGUobW9kZSwgc3RhdGUpOwogICAgICAgIGVsc2Ugc3RhdGUgPSBzdGFydFN0YXRlKG1vZGUpOwoKICAgICAgICB2YXIgdW5jaGFuZ2VkID0gMCwgY29tcGFyZSA9IG1vZGUuY29tcGFyZVN0YXRlcywgcmVhbENoYW5nZSA9IGZhbHNlLAogICAgICAgICAgICBpID0gc3RhcnQsIGJhaWwgPSBmYWxzZTsKICAgICAgICBkb2MuaXRlcihpLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgdmFyIGhhZFN0YXRlID0gbGluZS5zdGF0ZUFmdGVyOwogICAgICAgICAgaWYgKCtuZXcgRGF0ZSA+IGVuZCkgewogICAgICAgICAgICB3b3JrLnB1c2goaSk7CiAgICAgICAgICAgIHN0YXJ0V29ya2VyKG9wdGlvbnMud29ya0RlbGF5KTsKICAgICAgICAgICAgaWYgKHJlYWxDaGFuZ2UpIGNoYW5nZXMucHVzaCh7ZnJvbTogdGFzaywgdG86IGkgKyAxfSk7CiAgICAgICAgICAgIHJldHVybiAoYmFpbCA9IHRydWUpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGNoYW5nZWQgPSBsaW5lLmhpZ2hsaWdodChtb2RlLCBzdGF0ZSwgb3B0aW9ucy50YWJTaXplKTsKICAgICAgICAgIGlmIChjaGFuZ2VkKSByZWFsQ2hhbmdlID0gdHJ1ZTsKICAgICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgICAgICB2YXIgZG9uZSA9IG51bGw7CiAgICAgICAgICBpZiAoY29tcGFyZSkgewogICAgICAgICAgICB2YXIgc2FtZSA9IGhhZFN0YXRlICYmIGNvbXBhcmUoaGFkU3RhdGUsIHN0YXRlKTsKICAgICAgICAgICAgaWYgKHNhbWUgIT0gUGFzcykgZG9uZSA9ICEhc2FtZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChkb25lID09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGNoYW5nZWQgIT09IGZhbHNlIHx8ICFoYWRTdGF0ZSkgdW5jaGFuZ2VkID0gMDsKICAgICAgICAgICAgZWxzZSBpZiAoKyt1bmNoYW5nZWQgPiAzICYmICghbW9kZS5pbmRlbnQgfHwgbW9kZS5pbmRlbnQoaGFkU3RhdGUsICIiKSA9PSBtb2RlLmluZGVudChzdGF0ZSwgIiIpKSkKICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICsraTsKICAgICAgICB9KTsKICAgICAgICBpZiAoYmFpbCkgcmV0dXJuOwogICAgICAgIGlmIChyZWFsQ2hhbmdlKSBjaGFuZ2VzLnB1c2goe2Zyb206IHRhc2ssIHRvOiBpICsgMX0pOwogICAgICB9CiAgICAgIGlmIChmb3VuZFdvcmsgJiYgb3B0aW9ucy5vbkhpZ2hsaWdodENvbXBsZXRlKQogICAgICAgIG9wdGlvbnMub25IaWdobGlnaHRDb21wbGV0ZShpbnN0YW5jZSk7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFydFdvcmtlcih0aW1lKSB7CiAgICAgIGlmICghd29yay5sZW5ndGgpIHJldHVybjsKICAgICAgaGlnaGxpZ2h0LnNldCh0aW1lLCBvcGVyYXRpb24oaGlnaGxpZ2h0V29ya2VyKSk7CiAgICB9CgogICAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0byB3cmFwIGNoYW5nZXMgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2gKICAgIC8vIGNoYW5nZSB3b24ndCBoYXZlIHRvIHVwZGF0ZSB0aGUgY3Vyc29yIGFuZCBkaXNwbGF5ICh3aGljaCB3b3VsZAogICAgLy8gYmUgYXdrd2FyZCwgc2xvdywgYW5kIGVycm9yLXByb25lKSwgYnV0IGluc3RlYWQgdXBkYXRlcyBhcmUKICAgIC8vIGJhdGNoZWQgYW5kIHRoZW4gYWxsIGNvbWJpbmVkIGFuZCBleGVjdXRlZCBhdCBvbmNlLgogICAgZnVuY3Rpb24gc3RhcnRPcGVyYXRpb24oKSB7CiAgICAgIHVwZGF0ZUlucHV0ID0gdXNlclNlbENoYW5nZSA9IHRleHRDaGFuZ2VkID0gbnVsbDsKICAgICAgY2hhbmdlcyA9IFtdOyBzZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7IGNhbGxiYWNrcyA9IFtdOwogICAgfQogICAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKCkgewogICAgICBpZiAodXBkYXRlTWF4TGluZSkgY29tcHV0ZU1heExlbmd0aCgpOwogICAgICBpZiAobWF4TGluZUNoYW5nZWQgJiYgIW9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICAgd2lkdGhGb3JjZXIuc3R5bGUubGVmdCA9IHN0cmluZ1dpZHRoKG1heExpbmUpICsgInB4IjsKICAgICAgICBtYXhMaW5lQ2hhbmdlZCA9IGZhbHNlOwogICAgICB9CiAgICAgIHZhciBuZXdTY3JvbGxQb3MsIHVwZGF0ZWQ7CiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7CiAgICAgICAgdmFyIGNvb3JkcyA9IGNhbGN1bGF0ZUN1cnNvckNvb3JkcygpOwogICAgICAgIG5ld1Njcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjb29yZHMueCwgY29vcmRzLnksIGNvb3Jkcy54LCBjb29yZHMueUJvdCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoKSB1cGRhdGVkID0gdXBkYXRlRGlzcGxheShjaGFuZ2VzLCB0cnVlLCAobmV3U2Nyb2xsUG9zID8gbmV3U2Nyb2xsUG9zLnNjcm9sbFRvcCA6IG51bGwpKTsKICAgICAgZWxzZSB7CiAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHVwZGF0ZVNlbGVjdGlvbigpOwogICAgICAgIGlmIChndXR0ZXJEaXJ0eSkgdXBkYXRlR3V0dGVyKCk7CiAgICAgIH0KICAgICAgaWYgKG5ld1Njcm9sbFBvcykgc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHtzY3JvbGxFZGl0b3JJbnRvVmlldygpOyByZXN0YXJ0QmxpbmsoKTt9CgogICAgICBpZiAoZm9jdXNlZCAmJiAhbGVhdmVJbnB1dEFsb25lICYmCiAgICAgICAgICAodXBkYXRlSW5wdXQgPT09IHRydWUgfHwgKHVwZGF0ZUlucHV0ICE9PSBmYWxzZSAmJiBzZWxlY3Rpb25DaGFuZ2VkKSkpCiAgICAgICAgcmVzZXRJbnB1dCh1c2VyU2VsQ2hhbmdlKTsKCiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMubWF0Y2hCcmFja2V0cykKICAgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpIHticmFja2V0SGlnaGxpZ2h0ZWQoKTsgYnJhY2tldEhpZ2hsaWdodGVkID0gbnVsbDt9CiAgICAgICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIG1hdGNoQnJhY2tldHMoZmFsc2UpOwogICAgICAgIH0pLCAyMCk7CiAgICAgIHZhciBzYyA9IHNlbGVjdGlvbkNoYW5nZWQsIGNicyA9IGNhbGxiYWNrczsgLy8gdGhlc2UgY2FuIGJlIHJlc2V0IGJ5IGNhbGxiYWNrcwogICAgICBpZiAodGV4dENoYW5nZWQgJiYgb3B0aW9ucy5vbkNoYW5nZSAmJiBpbnN0YW5jZSkKICAgICAgICBvcHRpb25zLm9uQ2hhbmdlKGluc3RhbmNlLCB0ZXh0Q2hhbmdlZCk7CiAgICAgIGlmIChzYyAmJiBvcHRpb25zLm9uQ3Vyc29yQWN0aXZpdHkpCiAgICAgICAgb3B0aW9ucy5vbkN1cnNvckFjdGl2aXR5KGluc3RhbmNlKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMubGVuZ3RoOyArK2kpIGNic1tpXShpbnN0YW5jZSk7CiAgICAgIGlmICh1cGRhdGVkICYmIG9wdGlvbnMub25VcGRhdGUpIG9wdGlvbnMub25VcGRhdGUoaW5zdGFuY2UpOwogICAgfQogICAgdmFyIG5lc3RlZE9wZXJhdGlvbiA9IDA7CiAgICBmdW5jdGlvbiBvcGVyYXRpb24oZikgewogICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCFuZXN0ZWRPcGVyYXRpb24rKykgc3RhcnRPcGVyYXRpb24oKTsKICAgICAgICB0cnkge3ZhciByZXN1bHQgPSBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7fQogICAgICAgIGZpbmFsbHkge2lmICghLS1uZXN0ZWRPcGVyYXRpb24pIGVuZE9wZXJhdGlvbigpO30KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbXBvdW5kQ2hhbmdlKGYpIHsKICAgICAgaGlzdG9yeS5zdGFydENvbXBvdW5kKCk7CiAgICAgIHRyeSB7IHJldHVybiBmKCk7IH0gZmluYWxseSB7IGhpc3RvcnkuZW5kQ29tcG91bmQoKTsgfQogICAgfQoKICAgIGZvciAodmFyIGV4dCBpbiBleHRlbnNpb25zKQogICAgICBpZiAoZXh0ZW5zaW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShleHQpICYmCiAgICAgICAgICAhaW5zdGFuY2UucHJvcGVydHlJc0VudW1lcmFibGUoZXh0KSkKICAgICAgICBpbnN0YW5jZVtleHRdID0gZXh0ZW5zaW9uc1tleHRdOwogICAgcmV0dXJuIGluc3RhbmNlOwogIH0gLy8gKGVuZCBvZiBmdW5jdGlvbiBDb2RlTWlycm9yKQoKICAvLyBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCiAgQ29kZU1pcnJvci5kZWZhdWx0cyA9IHsKICAgIHZhbHVlOiAiIiwKICAgIG1vZGU6IG51bGwsCiAgICB0aGVtZTogImRlZmF1bHQiLAogICAgaW5kZW50VW5pdDogMiwKICAgIGluZGVudFdpdGhUYWJzOiBmYWxzZSwKICAgIHNtYXJ0SW5kZW50OiB0cnVlLAogICAgdGFiU2l6ZTogNCwKICAgIGtleU1hcDogImRlZmF1bHQiLAogICAgZXh0cmFLZXlzOiBudWxsLAogICAgZWxlY3RyaWNDaGFyczogdHJ1ZSwKICAgIGF1dG9DbGVhckVtcHR5TGluZXM6IGZhbHNlLAogICAgb25LZXlFdmVudDogbnVsbCwKICAgIG9uRHJhZ0V2ZW50OiBudWxsLAogICAgbGluZVdyYXBwaW5nOiBmYWxzZSwKICAgIGxpbmVOdW1iZXJzOiBmYWxzZSwKICAgIGd1dHRlcjogZmFsc2UsCiAgICBmaXhlZEd1dHRlcjogZmFsc2UsCiAgICBmaXJzdExpbmVOdW1iZXI6IDEsCiAgICByZWFkT25seTogZmFsc2UsCiAgICBkcmFnRHJvcDogdHJ1ZSwKICAgIG9uQ2hhbmdlOiBudWxsLAogICAgb25DdXJzb3JBY3Rpdml0eTogbnVsbCwKICAgIG9uR3V0dGVyQ2xpY2s6IG51bGwsCiAgICBvbkhpZ2hsaWdodENvbXBsZXRlOiBudWxsLAogICAgb25VcGRhdGU6IG51bGwsCiAgICBvbkZvY3VzOiBudWxsLCBvbkJsdXI6IG51bGwsIG9uU2Nyb2xsOiBudWxsLAogICAgbWF0Y2hCcmFja2V0czogZmFsc2UsCiAgICB3b3JrVGltZTogMTAwLAogICAgd29ya0RlbGF5OiAyMDAsCiAgICBwb2xsSW50ZXJ2YWw6IDEwMCwKICAgIHVuZG9EZXB0aDogNDAsCiAgICB0YWJpbmRleDogbnVsbCwKICAgIGF1dG9mb2N1czogbnVsbAogIH07CgogIHZhciBpb3MgPSAvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL01vYmlsZVwvXHcrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBtYWMgPSBpb3MgfHwgL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwogIHZhciB3aW4gPSAvV2luLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CgogIC8vIEtub3duIG1vZGVzLCBieSBuYW1lIGFuZCBieSBNSU1FCiAgdmFyIG1vZGVzID0gQ29kZU1pcnJvci5tb2RlcyA9IHt9LCBtaW1lTW9kZXMgPSBDb2RlTWlycm9yLm1pbWVNb2RlcyA9IHt9OwogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUpIHsKICAgIGlmICghQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlICYmIG5hbWUgIT0gIm51bGwiKSBDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgPSBuYW1lOwogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7CiAgICAgIG1vZGUuZGVwZW5kZW5jaWVzID0gW107CiAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSBtb2RlLmRlcGVuZGVuY2llcy5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgICB9CiAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7CiAgfTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUgPSBmdW5jdGlvbihtaW1lLCBzcGVjKSB7CiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOwogIH07CiAgQ29kZU1pcnJvci5yZXNvbHZlTW9kZSA9IGZ1bmN0aW9uKHNwZWMpIHsKICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYykpCiAgICAgIHNwZWMgPSBtaW1lTW9kZXNbc3BlY107CiAgICBlbHNlIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiAvXltcd1wtXStcL1tcd1wtXStcK3htbCQvLnRlc3Qoc3BlYykpCiAgICAgIHJldHVybiBDb2RlTWlycm9yLnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTsKICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIikgcmV0dXJuIHtuYW1lOiBzcGVjfTsKICAgIGVsc2UgcmV0dXJuIHNwZWMgfHwge25hbWU6ICJudWxsIn07CiAgfTsKICBDb2RlTWlycm9yLmdldE1vZGUgPSBmdW5jdGlvbihvcHRpb25zLCBzcGVjKSB7CiAgICB2YXIgc3BlYyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoc3BlYyk7CiAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdOwogICAgaWYgKCFtZmFjdG9yeSkgcmV0dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShvcHRpb25zLCAidGV4dC9wbGFpbiIpOwogICAgcmV0dXJuIG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpOwogIH07CiAgQ29kZU1pcnJvci5saXN0TW9kZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBsaXN0ID0gW107CiAgICBmb3IgKHZhciBtIGluIG1vZGVzKQogICAgICBpZiAobW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobSkpIGxpc3QucHVzaChtKTsKICAgIHJldHVybiBsaXN0OwogIH07CiAgQ29kZU1pcnJvci5saXN0TUlNRXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBsaXN0ID0gW107CiAgICBmb3IgKHZhciBtIGluIG1pbWVNb2RlcykKICAgICAgaWYgKG1pbWVNb2Rlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShtKSkgbGlzdC5wdXNoKHttaW1lOiBtLCBtb2RlOiBtaW1lTW9kZXNbbV19KTsKICAgIHJldHVybiBsaXN0OwogIH07CgogIHZhciBleHRlbnNpb25zID0gQ29kZU1pcnJvci5leHRlbnNpb25zID0ge307CiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24gPSBmdW5jdGlvbihuYW1lLCBmdW5jKSB7CiAgICBleHRlbnNpb25zW25hbWVdID0gZnVuYzsKICB9OwoKICB2YXIgY29tbWFuZHMgPSBDb2RlTWlycm9yLmNvbW1hbmRzID0gewogICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDB9LCB7bGluZTogY20ubGluZUNvdW50KCkgLSAxfSk7fSwKICAgIGtpbGxMaW5lOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgZnJvbSA9IGNtLmdldEN1cnNvcih0cnVlKSwgdG8gPSBjbS5nZXRDdXJzb3IoZmFsc2UpLCBzZWwgPSAhcG9zRXEoZnJvbSwgdG8pOwogICAgICBpZiAoIXNlbCAmJiBjbS5nZXRMaW5lKGZyb20ubGluZSkubGVuZ3RoID09IGZyb20uY2gpIGNtLnJlcGxhY2VSYW5nZSgiIiwgZnJvbSwge2xpbmU6IGZyb20ubGluZSArIDEsIGNoOiAwfSk7CiAgICAgIGVsc2UgY20ucmVwbGFjZVJhbmdlKCIiLCBmcm9tLCBzZWwgPyB0byA6IHtsaW5lOiBmcm9tLmxpbmV9KTsKICAgIH0sCiAgICBkZWxldGVMaW5lOiBmdW5jdGlvbihjbSkge3ZhciBsID0gY20uZ2V0Q3Vyc29yKCkubGluZTsgY20ucmVwbGFjZVJhbmdlKCIiLCB7bGluZTogbCwgY2g6IDB9LCB7bGluZTogbH0pO30sCiAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAogICAgcmVkbzogZnVuY3Rpb24oY20pIHtjbS5yZWRvKCk7fSwKICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0Q3Vyc29yKDAsIDAsIHRydWUpO30sCiAgICBnb0RvY0VuZDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IGNtLmxpbmVDb3VudCgpIC0gMX0sIG51bGwsIHRydWUpO30sCiAgICBnb0xpbmVTdGFydDogZnVuY3Rpb24oY20pIHtjbS5zZXRDdXJzb3IoY20uZ2V0Q3Vyc29yKCkubGluZSwgMCwgdHJ1ZSk7fSwKICAgIGdvTGluZVN0YXJ0U21hcnQ6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGN1ci5saW5lKSwgZmlyc3ROb25XUyA9IE1hdGgubWF4KDAsIHRleHQuc2VhcmNoKC9cUy8pKTsKICAgICAgY20uc2V0Q3Vyc29yKGN1ci5saW5lLCBjdXIuY2ggPD0gZmlyc3ROb25XUyAmJiBjdXIuY2ggPyAwIDogZmlyc3ROb25XUywgdHJ1ZSk7CiAgICB9LAogICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbih7bGluZTogY20uZ2V0Q3Vyc29yKCkubGluZX0sIG51bGwsIHRydWUpO30sCiAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgImxpbmUiKTt9LAogICAgZ29MaW5lRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAibGluZSIpO30sCiAgICBnb1BhZ2VVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgInBhZ2UiKTt9LAogICAgZ29QYWdlRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAicGFnZSIpO30sCiAgICBnb0NoYXJMZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAiY2hhciIpO30sCiAgICBnb0NoYXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY2hhciIpO30sCiAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJjb2x1bW4iKTt9LAogICAgZ29Db2x1bW5SaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY29sdW1uIik7fSwKICAgIGdvV29yZExlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJ3b3JkIik7fSwKICAgIGdvV29yZFJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJ3b3JkIik7fSwKICAgIGRlbENoYXJMZWZ0OiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJjaGFyIik7fSwKICAgIGRlbENoYXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJjaGFyIik7fSwKICAgIGRlbFdvcmRMZWZ0OiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJ3b3JkIik7fSwKICAgIGRlbFdvcmRSaWdodDogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJ3b3JkIik7fSwKICAgIGluZGVudEF1dG86IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpO30sCiAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigiYWRkIik7fSwKICAgIGluZGVudExlc3M6IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpO30sCiAgICBpbnNlcnRUYWI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbigiXHQiLCAiZW5kIik7fSwKICAgIGRlZmF1bHRUYWI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSBjbS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpOwogICAgICBlbHNlIGNtLnJlcGxhY2VTZWxlY3Rpb24oIlx0IiwgImVuZCIpOwogICAgfSwKICAgIHRyYW5zcG9zZUNoYXJzOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKTsKICAgICAgaWYgKGN1ci5jaCA+IDAgJiYgY3VyLmNoIDwgbGluZS5sZW5ndGggLSAxKQogICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdChjdXIuY2gpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaCAtIDF9LCB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2ggKyAxfSk7CiAgICB9LAogICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24oY20pIHsKICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiXG4iLCAiZW5kIik7CiAgICAgIGNtLmluZGVudExpbmUoY20uZ2V0Q3Vyc29yKCkubGluZSk7CiAgICB9LAogICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbihjbSkge2NtLnRvZ2dsZU92ZXJ3cml0ZSgpO30KICB9OwoKICB2YXIga2V5TWFwID0gQ29kZU1pcnJvci5rZXlNYXAgPSB7fTsKICBrZXlNYXAuYmFzaWMgPSB7CiAgICAiTGVmdCI6ICJnb0NoYXJMZWZ0IiwgIlJpZ2h0IjogImdvQ2hhclJpZ2h0IiwgIlVwIjogImdvTGluZVVwIiwgIkRvd24iOiAiZ29MaW5lRG93biIsCiAgICAiRW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAiUGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURvd24iLAogICAgIkRlbGV0ZSI6ICJkZWxDaGFyUmlnaHQiLCAiQmFja3NwYWNlIjogImRlbENoYXJMZWZ0IiwgIlRhYiI6ICJkZWZhdWx0VGFiIiwgIlNoaWZ0LVRhYiI6ICJpbmRlbnRBdXRvIiwKICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiCiAgfTsKICAvLyBOb3RlIHRoYXQgdGhlIHNhdmUgYW5kIGZpbmQtcmVsYXRlZCBjb21tYW5kcyBhcmVuJ3QgZGVmaW5lZCBieQogIC8vIGRlZmF1bHQuIFVua25vd24gY29tbWFuZHMgYXJlIHNpbXBseSBpZ25vcmVkLgogIGtleU1hcC5wY0RlZmF1bHQgPSB7CiAgICAiQ3RybC1BIjogInNlbGVjdEFsbCIsICJDdHJsLUQiOiAiZGVsZXRlTGluZSIsICJDdHJsLVoiOiAidW5kbyIsICJTaGlmdC1DdHJsLVoiOiAicmVkbyIsICJDdHJsLVkiOiAicmVkbyIsCiAgICAiQ3RybC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQWx0LVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKICAgICJDdHJsLUxlZnQiOiAiZ29Xb3JkTGVmdCIsICJDdHJsLVJpZ2h0IjogImdvV29yZFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtQmFja3NwYWNlIjogImRlbFdvcmRMZWZ0IiwgIkN0cmwtRGVsZXRlIjogImRlbFdvcmRSaWdodCIsICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLUYiOiAiZmluZCIsCiAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwtRyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIiOiAicmVwbGFjZUFsbCIsCiAgICAiQ3RybC1bIjogImluZGVudExlc3MiLCAiQ3RybC1dIjogImluZGVudE1vcmUiLAogICAgZmFsbHRocm91Z2g6ICJiYXNpYyIKICB9OwogIGtleU1hcC5tYWNEZWZhdWx0ID0gewogICAgIkNtZC1BIjogInNlbGVjdEFsbCIsICJDbWQtRCI6ICJkZWxldGVMaW5lIiwgIkNtZC1aIjogInVuZG8iLCAiU2hpZnQtQ21kLVoiOiAicmVkbyIsICJDbWQtWSI6ICJyZWRvIiwKICAgICJDbWQtVXAiOiAiZ29Eb2NTdGFydCIsICJDbWQtRW5kIjogImdvRG9jRW5kIiwgIkNtZC1Eb3duIjogImdvRG9jRW5kIiwgIkFsdC1MZWZ0IjogImdvV29yZExlZnQiLAogICAgIkFsdC1SaWdodCI6ICJnb1dvcmRSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmlnaHQiOiAiZ29MaW5lRW5kIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZExlZnQiLAogICAgIkN0cmwtQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkUmlnaHQiLCAiQWx0LURlbGV0ZSI6ICJkZWxXb3JkUmlnaHQiLCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKICAgICJDbWQtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DbWQtRyI6ICJmaW5kUHJldiIsICJDbWQtQWx0LUYiOiAicmVwbGFjZSIsICJTaGlmdC1DbWQtQWx0LUYiOiAicmVwbGFjZUFsbCIsCiAgICAiQ21kLVsiOiAiaW5kZW50TGVzcyIsICJDbWQtXSI6ICJpbmRlbnRNb3JlIiwKICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwgImVtYWNzeSJdCiAgfTsKICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKICBrZXlNYXAuZW1hY3N5ID0gewogICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJDdHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLAogICAgIkFsdC1GIjogImdvV29yZFJpZ2h0IiwgIkFsdC1CIjogImdvV29yZExlZnQiLCAiQ3RybC1BIjogImdvTGluZVN0YXJ0IiwgIkN0cmwtRSI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtViI6ICJnb1BhZ2VVcCIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlRG93biIsICJDdHJsLUQiOiAiZGVsQ2hhclJpZ2h0IiwgIkN0cmwtSCI6ICJkZWxDaGFyTGVmdCIsCiAgICAiQWx0LUQiOiAiZGVsV29yZFJpZ2h0IiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZExlZnQiLCAiQ3RybC1LIjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICB9OwoKICBmdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7CiAgICBpZiAodHlwZW9mIHZhbCA9PSAic3RyaW5nIikgcmV0dXJuIGtleU1hcFt2YWxdOwogICAgZWxzZSByZXR1cm4gdmFsOwogIH0KICBmdW5jdGlvbiBsb29rdXBLZXkobmFtZSwgZXh0cmFNYXAsIG1hcCwgaGFuZGxlLCBzdG9wKSB7CiAgICBmdW5jdGlvbiBsb29rdXAobWFwKSB7CiAgICAgIG1hcCA9IGdldEtleU1hcChtYXApOwogICAgICB2YXIgZm91bmQgPSBtYXBbbmFtZV07CiAgICAgIGlmIChmb3VuZCAhPSBudWxsICYmIGhhbmRsZShmb3VuZCkpIHJldHVybiB0cnVlOwogICAgICBpZiAobWFwLm5vZmFsbHRocm91Z2gpIHsKICAgICAgICBpZiAoc3RvcCkgc3RvcCgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHZhciBmYWxsdGhyb3VnaCA9IG1hcC5mYWxsdGhyb3VnaDsKICAgICAgaWYgKGZhbGx0aHJvdWdoID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmYWxsdGhyb3VnaCkgIT0gIltvYmplY3QgQXJyYXldIikKICAgICAgICByZXR1cm4gbG9va3VwKGZhbGx0aHJvdWdoKTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBmYWxsdGhyb3VnaC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICBpZiAobG9va3VwKGZhbGx0aHJvdWdoW2ldKSkgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKGV4dHJhTWFwICYmIGxvb2t1cChleHRyYU1hcCkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGxvb2t1cChtYXApOwogIH0KICBmdW5jdGlvbiBpc01vZGlmaWVyS2V5KGV2ZW50KSB7CiAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChldmVudCwgImtleUNvZGUiKV07CiAgICByZXR1cm4gbmFtZSA9PSAiQ3RybCIgfHwgbmFtZSA9PSAiQWx0IiB8fCBuYW1lID09ICJTaGlmdCIgfHwgbmFtZSA9PSAiTW9kIjsKICB9CgogIENvZGVNaXJyb3IuZnJvbVRleHRBcmVhID0gZnVuY3Rpb24odGV4dGFyZWEsIG9wdGlvbnMpIHsKICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9OwogICAgb3B0aW9ucy52YWx1ZSA9IHRleHRhcmVhLnZhbHVlOwogICAgaWYgKCFvcHRpb25zLnRhYmluZGV4ICYmIHRleHRhcmVhLnRhYmluZGV4KQogICAgICBvcHRpb25zLnRhYmluZGV4ID0gdGV4dGFyZWEudGFiaW5kZXg7CiAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCAmJiB0ZXh0YXJlYS5nZXRBdHRyaWJ1dGUoImF1dG9mb2N1cyIpICE9IG51bGwpCiAgICAgIG9wdGlvbnMuYXV0b2ZvY3VzID0gdHJ1ZTsKCiAgICBmdW5jdGlvbiBzYXZlKCkge3RleHRhcmVhLnZhbHVlID0gaW5zdGFuY2UuZ2V0VmFsdWUoKTt9CiAgICBpZiAodGV4dGFyZWEuZm9ybSkgewogICAgICAvLyBEZXBsb3JhYmxlIGhhY2sgdG8gbWFrZSB0aGUgc3VibWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgIHZhciBybVN1Ym1pdCA9IGNvbm5lY3QodGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUsIHRydWUpOwogICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YXIgcmVhbFN1Ym1pdCA9IHRleHRhcmVhLmZvcm0uc3VibWl0OwogICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRTdWJtaXQoKSB7CiAgICAgICAgICBzYXZlKCk7CiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7CiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCgpOwogICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSB3cmFwcGVkU3VibWl0OwogICAgICAgIH0KICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7CiAgICAgIH0KICAgIH0KCiAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgdmFyIGluc3RhbmNlID0gQ29kZU1pcnJvcihmdW5jdGlvbihub2RlKSB7CiAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHRleHRhcmVhLm5leHRTaWJsaW5nKTsKICAgIH0sIG9wdGlvbnMpOwogICAgaW5zdGFuY2Uuc2F2ZSA9IHNhdmU7CiAgICBpbnN0YW5jZS5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGV4dGFyZWE7IH07CiAgICBpbnN0YW5jZS50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7CiAgICAgIHNhdmUoKTsKICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICAgICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICBpZiAodGV4dGFyZWEuZm9ybSkgewogICAgICAgIHJtU3VibWl0KCk7CiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rpb24iKQogICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGluc3RhbmNlOwogIH07CgogIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggc3RhdGUuIEV4cG9ydGVkIGJlY2F1c2UgbW9kZXMKICAvLyBzb21ldGltZXMgbmVlZCB0byBkbyB0aGlzLgogIGZ1bmN0aW9uIGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSkgewogICAgaWYgKHN0YXRlID09PSB0cnVlKSByZXR1cm4gc3RhdGU7CiAgICBpZiAobW9kZS5jb3B5U3RhdGUpIHJldHVybiBtb2RlLmNvcHlTdGF0ZShzdGF0ZSk7CiAgICB2YXIgbnN0YXRlID0ge307CiAgICBmb3IgKHZhciBuIGluIHN0YXRlKSB7CiAgICAgIHZhciB2YWwgPSBzdGF0ZVtuXTsKICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEFycmF5KSB2YWwgPSB2YWwuY29uY2F0KFtdKTsKICAgICAgbnN0YXRlW25dID0gdmFsOwogICAgfQogICAgcmV0dXJuIG5zdGF0ZTsKICB9CiAgQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBjb3B5U3RhdGU7CiAgZnVuY3Rpb24gc3RhcnRTdGF0ZShtb2RlLCBhMSwgYTIpIHsKICAgIHJldHVybiBtb2RlLnN0YXJ0U3RhdGUgPyBtb2RlLnN0YXJ0U3RhdGUoYTEsIGEyKSA6IHRydWU7CiAgfQogIENvZGVNaXJyb3Iuc3RhcnRTdGF0ZSA9IHN0YXJ0U3RhdGU7CgogIC8vIFRoZSBjaGFyYWN0ZXIgc3RyZWFtIHVzZWQgYnkgYSBtb2RlJ3MgcGFyc2VyLgogIGZ1bmN0aW9uIFN0cmluZ1N0cmVhbShzdHJpbmcsIHRhYlNpemUpIHsKICAgIHRoaXMucG9zID0gdGhpcy5zdGFydCA9IDA7CiAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKICAgIHRoaXMudGFiU2l6ZSA9IHRhYlNpemUgfHwgODsKICB9CiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZSA9IHsKICAgIGVvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAogICAgc29sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPT0gMDt9LAogICAgcGVlazogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7fSwKICAgIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5wb3MgPCB0aGlzLnN0cmluZy5sZW5ndGgpCiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKTsKICAgIH0sCiAgICBlYXQ6IGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHZhciBjaCA9IHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7CiAgICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgICBlbHNlIHZhciBvayA9IGNoICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOwogICAgICBpZiAob2spIHsrK3RoaXMucG9zOyByZXR1cm4gY2g7fQogICAgfSwKICAgIGVhdFdoaWxlOiBmdW5jdGlvbihtYXRjaCkgewogICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSl7fQogICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydDsKICAgIH0sCiAgICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgICB3aGlsZSAoL1tcc1x1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpICsrdGhpcy5wb3M7CiAgICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0OwogICAgfSwKICAgIHNraXBUb0VuZDogZnVuY3Rpb24oKSB7dGhpcy5wb3MgPSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICAgIHNraXBUbzogZnVuY3Rpb24oY2gpIHsKICAgICAgdmFyIGZvdW5kID0gdGhpcy5zdHJpbmcuaW5kZXhPZihjaCwgdGhpcy5wb3MpOwogICAgICBpZiAoZm91bmQgPiAtMSkge3RoaXMucG9zID0gZm91bmQ7IHJldHVybiB0cnVlO30KICAgIH0sCiAgICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgICBjb2x1bW46IGZ1bmN0aW9uKCkge3JldHVybiBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5zdGFydCwgdGhpcy50YWJTaXplKTt9LAogICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKCkge3JldHVybiBjb3VudENvbHVtbih0aGlzLnN0cmluZywgbnVsbCwgdGhpcy50YWJTaXplKTt9LAogICAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VJbnNlbnNpdGl2ZSkgewogICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT0gInN0cmluZyIpIHsKICAgICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICAgIGlmIChjYXNlZCh0aGlzLnN0cmluZykuaW5kZXhPZihjYXNlZChwYXR0ZXJuKSwgdGhpcy5wb3MpID09IHRoaXMucG9zKSB7CiAgICAgICAgICBpZiAoY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IHBhdHRlcm4ubGVuZ3RoOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgICBpZiAobWF0Y2ggJiYgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgIH0KICAgIH0sCiAgICBjdXJyZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcyk7fQogIH07CiAgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0gPSBTdHJpbmdTdHJlYW07CgogIGZ1bmN0aW9uIE1hcmtlZFRleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSwgbWFya2VyKSB7CiAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87IHRoaXMuc3R5bGUgPSBjbGFzc05hbWU7IHRoaXMubWFya2VyID0gbWFya2VyOwogIH0KICBNYXJrZWRUZXh0LnByb3RvdHlwZSA9IHsKICAgIGF0dGFjaDogZnVuY3Rpb24obGluZSkgeyB0aGlzLm1hcmtlci5zZXQucHVzaChsaW5lKTsgfSwKICAgIGRldGFjaDogZnVuY3Rpb24obGluZSkgewogICAgICB2YXIgaXggPSBpbmRleE9mKHRoaXMubWFya2VyLnNldCwgbGluZSk7CiAgICAgIGlmIChpeCA+IC0xKSB0aGlzLm1hcmtlci5zZXQuc3BsaWNlKGl4LCAxKTsKICAgIH0sCiAgICBzcGxpdDogZnVuY3Rpb24ocG9zLCBsZW5CZWZvcmUpIHsKICAgICAgaWYgKHRoaXMudG8gPD0gcG9zICYmIHRoaXMudG8gIT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBmcm9tID0gdGhpcy5mcm9tIDwgcG9zIHx8IHRoaXMuZnJvbSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZnJvbSAtIHBvcyArIGxlbkJlZm9yZTsKICAgICAgdmFyIHRvID0gdGhpcy50byA9PSBudWxsID8gbnVsbCA6IHRoaXMudG8gLSBwb3MgKyBsZW5CZWZvcmU7CiAgICAgIHJldHVybiBuZXcgTWFya2VkVGV4dChmcm9tLCB0bywgdGhpcy5zdHlsZSwgdGhpcy5tYXJrZXIpOwogICAgfSwKICAgIGR1cDogZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgTWFya2VkVGV4dChudWxsLCBudWxsLCB0aGlzLnN0eWxlLCB0aGlzLm1hcmtlcik7IH0sCiAgICBjbGlwVG86IGZ1bmN0aW9uKGZyb21PcGVuLCBmcm9tLCB0b09wZW4sIHRvLCBkaWZmKSB7CiAgICAgIGlmIChmcm9tT3BlbiAmJiB0byA+IHRoaXMuZnJvbSAmJiAodG8gPCB0aGlzLnRvIHx8IHRoaXMudG8gPT0gbnVsbCkpCiAgICAgICAgdGhpcy5mcm9tID0gbnVsbDsKICAgICAgZWxzZSBpZiAodGhpcy5mcm9tICE9IG51bGwgJiYgdGhpcy5mcm9tID49IGZyb20pCiAgICAgICAgdGhpcy5mcm9tID0gTWF0aC5tYXgodG8sIHRoaXMuZnJvbSkgKyBkaWZmOwogICAgICBpZiAodG9PcGVuICYmIChmcm9tIDwgdGhpcy50byB8fCB0aGlzLnRvID09IG51bGwpICYmIChmcm9tID4gdGhpcy5mcm9tIHx8IHRoaXMuZnJvbSA9PSBudWxsKSkKICAgICAgICB0aGlzLnRvID0gbnVsbDsKICAgICAgZWxzZSBpZiAodGhpcy50byAhPSBudWxsICYmIHRoaXMudG8gPiBmcm9tKQogICAgICAgIHRoaXMudG8gPSB0byA8IHRoaXMudG8gPyB0aGlzLnRvICsgZGlmZiA6IGZyb207CiAgICB9LAogICAgaXNEZWFkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZnJvbSAhPSBudWxsICYmIHRoaXMudG8gIT0gbnVsbCAmJiB0aGlzLmZyb20gPj0gdGhpcy50bzsgfSwKICAgIHNhbWVTZXQ6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHRoaXMubWFya2VyID09IHgubWFya2VyOyB9CiAgfTsKCiAgZnVuY3Rpb24gQm9va21hcmsocG9zKSB7CiAgICB0aGlzLmZyb20gPSBwb3M7IHRoaXMudG8gPSBwb3M7IHRoaXMubGluZSA9IG51bGw7CiAgfQogIEJvb2ttYXJrLnByb3RvdHlwZSA9IHsKICAgIGF0dGFjaDogZnVuY3Rpb24obGluZSkgeyB0aGlzLmxpbmUgPSBsaW5lOyB9LAogICAgZGV0YWNoOiBmdW5jdGlvbihsaW5lKSB7IGlmICh0aGlzLmxpbmUgPT0gbGluZSkgdGhpcy5saW5lID0gbnVsbDsgfSwKICAgIHNwbGl0OiBmdW5jdGlvbihwb3MsIGxlbkJlZm9yZSkgewogICAgICBpZiAocG9zIDwgdGhpcy5mcm9tKSB7CiAgICAgICAgdGhpcy5mcm9tID0gdGhpcy50byA9ICh0aGlzLmZyb20gLSBwb3MpICsgbGVuQmVmb3JlOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LAogICAgaXNEZWFkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZnJvbSA+IHRoaXMudG87IH0sCiAgICBjbGlwVG86IGZ1bmN0aW9uKGZyb21PcGVuLCBmcm9tLCB0b09wZW4sIHRvLCBkaWZmKSB7CiAgICAgIGlmICgoZnJvbU9wZW4gfHwgZnJvbSA8IHRoaXMuZnJvbSkgJiYgKHRvT3BlbiB8fCB0byA+IHRoaXMudG8pKSB7CiAgICAgICAgdGhpcy5mcm9tID0gMDsgdGhpcy50byA9IC0xOwogICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbSA+IGZyb20pIHsKICAgICAgICB0aGlzLmZyb20gPSB0aGlzLnRvID0gTWF0aC5tYXgodG8sIHRoaXMuZnJvbSkgKyBkaWZmOwogICAgICB9CiAgICB9LAogICAgc2FtZVNldDogZnVuY3Rpb24oeCkgeyByZXR1cm4gZmFsc2U7IH0sCiAgICBmaW5kOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKCF0aGlzLmxpbmUgfHwgIXRoaXMubGluZS5wYXJlbnQpIHJldHVybiBudWxsOwogICAgICByZXR1cm4ge2xpbmU6IGxpbmVObyh0aGlzLmxpbmUpLCBjaDogdGhpcy5mcm9tfTsKICAgIH0sCiAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLmxpbmUpIHsKICAgICAgICB2YXIgZm91bmQgPSBpbmRleE9mKHRoaXMubGluZS5tYXJrZWQsIHRoaXMpOwogICAgICAgIGlmIChmb3VuZCAhPSAtMSkgdGhpcy5saW5lLm1hcmtlZC5zcGxpY2UoZm91bmQsIDEpOwogICAgICAgIHRoaXMubGluZSA9IG51bGw7CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBMaW5lIG9iamVjdHMuIFRoZXNlIGhvbGQgc3RhdGUgcmVsYXRlZCB0byBhIGxpbmUsIGluY2x1ZGluZwogIC8vIGhpZ2hsaWdodGluZyBpbmZvICh0aGUgc3R5bGVzIGFycmF5KS4KICBmdW5jdGlvbiBMaW5lKHRleHQsIHN0eWxlcykgewogICAgdGhpcy5zdHlsZXMgPSBzdHlsZXMgfHwgW3RleHQsIG51bGxdOwogICAgdGhpcy50ZXh0ID0gdGV4dDsKICAgIHRoaXMuaGVpZ2h0ID0gMTsKICAgIHRoaXMubWFya2VkID0gdGhpcy5ndXR0ZXJNYXJrZXIgPSB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuYmdDbGFzc05hbWUgPSB0aGlzLmhhbmRsZXJzID0gbnVsbDsKICAgIHRoaXMuc3RhdGVBZnRlciA9IHRoaXMucGFyZW50ID0gdGhpcy5oaWRkZW4gPSBudWxsOwogIH0KICBMaW5lLmluaGVyaXRNYXJrcyA9IGZ1bmN0aW9uKHRleHQsIG9yaWcpIHsKICAgIHZhciBsbiA9IG5ldyBMaW5lKHRleHQpLCBtayA9IG9yaWcgJiYgb3JpZy5tYXJrZWQ7CiAgICBpZiAobWspIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgIGlmIChta1tpXS50byA9PSBudWxsICYmIG1rW2ldLnN0eWxlKSB7CiAgICAgICAgICB2YXIgbmV3bWsgPSBsbi5tYXJrZWQgfHwgKGxuLm1hcmtlZCA9IFtdKSwgbWFyayA9IG1rW2ldOwogICAgICAgICAgdmFyIG5tYXJrID0gbWFyay5kdXAoKTsgbmV3bWsucHVzaChubWFyayk7IG5tYXJrLmF0dGFjaChsbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbG47CiAgfQogIExpbmUucHJvdG90eXBlID0gewogICAgLy8gUmVwbGFjZSBhIHBpZWNlIG9mIGEgbGluZSwga2VlcGluZyB0aGUgc3R5bGVzIGFyb3VuZCBpdCBpbnRhY3QuCiAgICByZXBsYWNlOiBmdW5jdGlvbihmcm9tLCB0b18sIHRleHQpIHsKICAgICAgdmFyIHN0ID0gW10sIG1rID0gdGhpcy5tYXJrZWQsIHRvID0gdG9fID09IG51bGwgPyB0aGlzLnRleHQubGVuZ3RoIDogdG9fOwogICAgICBjb3B5U3R5bGVzKDAsIGZyb20sIHRoaXMuc3R5bGVzLCBzdCk7CiAgICAgIGlmICh0ZXh0KSBzdC5wdXNoKHRleHQsIG51bGwpOwogICAgICBjb3B5U3R5bGVzKHRvLCB0aGlzLnRleHQubGVuZ3RoLCB0aGlzLnN0eWxlcywgc3QpOwogICAgICB0aGlzLnN0eWxlcyA9IHN0OwogICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc2xpY2UoMCwgZnJvbSkgKyB0ZXh0ICsgdGhpcy50ZXh0LnNsaWNlKHRvKTsKICAgICAgdGhpcy5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICAgaWYgKG1rKSB7CiAgICAgICAgdmFyIGRpZmYgPSB0ZXh0Lmxlbmd0aCAtICh0byAtIGZyb20pOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWsubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHZhciBtYXJrID0gbWtbaV07CiAgICAgICAgICBtYXJrLmNsaXBUbyhmcm9tID09IG51bGwsIGZyb20gfHwgMCwgdG9fID09IG51bGwsIHRvLCBkaWZmKTsKICAgICAgICAgIGlmIChtYXJrLmlzRGVhZCgpKSB7bWFyay5kZXRhY2godGhpcyk7IG1rLnNwbGljZShpLS0sIDEpO30KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvLyBTcGxpdCBhIHBhcnQgb2ZmIGEgbGluZSwga2VlcGluZyBzdHlsZXMgYW5kIG1hcmtlcnMgaW50YWN0LgogICAgc3BsaXQ6IGZ1bmN0aW9uKHBvcywgdGV4dEJlZm9yZSkgewogICAgICB2YXIgc3QgPSBbdGV4dEJlZm9yZSwgbnVsbF0sIG1rID0gdGhpcy5tYXJrZWQ7CiAgICAgIGNvcHlTdHlsZXMocG9zLCB0aGlzLnRleHQubGVuZ3RoLCB0aGlzLnN0eWxlcywgc3QpOwogICAgICB2YXIgdGFrZW4gPSBuZXcgTGluZSh0ZXh0QmVmb3JlICsgdGhpcy50ZXh0LnNsaWNlKHBvcyksIHN0KTsKICAgICAgaWYgKG1rKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyIG1hcmsgPSBta1tpXTsKICAgICAgICAgIHZhciBuZXdtYXJrID0gbWFyay5zcGxpdChwb3MsIHRleHRCZWZvcmUubGVuZ3RoKTsKICAgICAgICAgIGlmIChuZXdtYXJrKSB7CiAgICAgICAgICAgIGlmICghdGFrZW4ubWFya2VkKSB0YWtlbi5tYXJrZWQgPSBbXTsKICAgICAgICAgICAgdGFrZW4ubWFya2VkLnB1c2gobmV3bWFyayk7IG5ld21hcmsuYXR0YWNoKHRha2VuKTsKICAgICAgICAgICAgaWYgKG5ld21hcmsgPT0gbWFyaykgbWsuc3BsaWNlKGktLSwgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0YWtlbjsKICAgIH0sCiAgICBhcHBlbmQ6IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgdmFyIG15bGVuID0gdGhpcy50ZXh0Lmxlbmd0aCwgbWsgPSBsaW5lLm1hcmtlZCwgbXltayA9IHRoaXMubWFya2VkOwogICAgICB0aGlzLnRleHQgKz0gbGluZS50ZXh0OwogICAgICBjb3B5U3R5bGVzKDAsIGxpbmUudGV4dC5sZW5ndGgsIGxpbmUuc3R5bGVzLCB0aGlzLnN0eWxlcyk7CiAgICAgIGlmIChteW1rKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBteW1rLmxlbmd0aDsgKytpKQogICAgICAgICAgaWYgKG15bWtbaV0udG8gPT0gbnVsbCkgbXlta1tpXS50byA9IG15bGVuOwogICAgICB9CiAgICAgIGlmIChtayAmJiBtay5sZW5ndGgpIHsKICAgICAgICBpZiAoIW15bWspIHRoaXMubWFya2VkID0gbXltayA9IFtdOwogICAgICAgIG91dGVyOiBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICB2YXIgbWFyayA9IG1rW2ldOwogICAgICAgICAgaWYgKCFtYXJrLmZyb20pIHsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBteW1rLmxlbmd0aDsgKytqKSB7CiAgICAgICAgICAgICAgdmFyIG15bWFyayA9IG15bWtbal07CiAgICAgICAgICAgICAgaWYgKG15bWFyay50byA9PSBteWxlbiAmJiBteW1hcmsuc2FtZVNldChtYXJrKSkgewogICAgICAgICAgICAgICAgbXltYXJrLnRvID0gbWFyay50byA9PSBudWxsID8gbnVsbCA6IG1hcmsudG8gKyBteWxlbjsKICAgICAgICAgICAgICAgIGlmIChteW1hcmsuaXNEZWFkKCkpIHsKICAgICAgICAgICAgICAgICAgbXltYXJrLmRldGFjaCh0aGlzKTsKICAgICAgICAgICAgICAgICAgbWsuc3BsaWNlKGktLSwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG15bWsucHVzaChtYXJrKTsKICAgICAgICAgIG1hcmsuYXR0YWNoKHRoaXMpOwogICAgICAgICAgbWFyay5mcm9tICs9IG15bGVuOwogICAgICAgICAgaWYgKG1hcmsudG8gIT0gbnVsbCkgbWFyay50byArPSBteWxlbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmaXhNYXJrRW5kczogZnVuY3Rpb24ob3RoZXIpIHsKICAgICAgdmFyIG1rID0gdGhpcy5tYXJrZWQsIG9tayA9IG90aGVyLm1hcmtlZDsKICAgICAgaWYgKCFtaykgcmV0dXJuOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIG1hcmsgPSBta1tpXSwgY2xvc2UgPSBtYXJrLnRvID09IG51bGw7CiAgICAgICAgaWYgKGNsb3NlICYmIG9taykgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvbWsubGVuZ3RoOyArK2opCiAgICAgICAgICAgIGlmIChvbWtbal0uc2FtZVNldChtYXJrKSkge2Nsb3NlID0gZmFsc2U7IGJyZWFrO30KICAgICAgICB9CiAgICAgICAgaWYgKGNsb3NlKSBtYXJrLnRvID0gdGhpcy50ZXh0Lmxlbmd0aDsKICAgICAgfQogICAgfSwKICAgIGZpeE1hcmtTdGFydHM6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWsgPSB0aGlzLm1hcmtlZDsKICAgICAgaWYgKCFtaykgcmV0dXJuOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKQogICAgICAgIGlmIChta1tpXS5mcm9tID09IG51bGwpIG1rW2ldLmZyb20gPSAwOwogICAgfSwKICAgIGFkZE1hcms6IGZ1bmN0aW9uKG1hcmspIHsKICAgICAgbWFyay5hdHRhY2godGhpcyk7CiAgICAgIGlmICh0aGlzLm1hcmtlZCA9PSBudWxsKSB0aGlzLm1hcmtlZCA9IFtdOwogICAgICB0aGlzLm1hcmtlZC5wdXNoKG1hcmspOwogICAgICB0aGlzLm1hcmtlZC5zb3J0KGZ1bmN0aW9uKGEsIGIpe3JldHVybiAoYS5mcm9tIHx8IDApIC0gKGIuZnJvbSB8fCAwKTt9KTsKICAgIH0sCiAgICAvLyBSdW4gdGhlIGdpdmVuIG1vZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIHVwZGF0ZSB0aGUgc3R5bGVzCiAgICAvLyBhcnJheSwgd2hpY2ggY29udGFpbnMgYWx0ZXJuYXRpbmcgZnJhZ21lbnRzIG9mIHRleHQgYW5kIENTUwogICAgLy8gY2xhc3Nlcy4KICAgIGhpZ2hsaWdodDogZnVuY3Rpb24obW9kZSwgc3RhdGUsIHRhYlNpemUpIHsKICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGhpcy50ZXh0LCB0YWJTaXplKSwgc3QgPSB0aGlzLnN0eWxlcywgcG9zID0gMDsKICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwgY3VyV29yZCA9IHN0WzBdLCBwcmV2V29yZDsKICAgICAgaWYgKHRoaXMudGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOwogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgdmFyIHN1YnN0ciA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0uc3RhcnQsIHN0cmVhbS5wb3MpOwogICAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICAgICAgaWYgKHBvcyAmJiBzdFtwb3MtMV0gPT0gc3R5bGUpCiAgICAgICAgICBzdFtwb3MtMl0gKz0gc3Vic3RyOwogICAgICAgIGVsc2UgaWYgKHN1YnN0cikgewogICAgICAgICAgaWYgKCFjaGFuZ2VkICYmIChzdFtwb3MrMV0gIT0gc3R5bGUgfHwgKHBvcyAmJiBzdFtwb3MtMl0gIT0gcHJldldvcmQpKSkgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICBzdFtwb3MrK10gPSBzdWJzdHI7IHN0W3BvcysrXSA9IHN0eWxlOwogICAgICAgICAgcHJldldvcmQgPSBjdXJXb3JkOyBjdXJXb3JkID0gc3RbcG9zXTsKICAgICAgICB9CiAgICAgICAgLy8gR2l2ZSB1cCB3aGVuIGxpbmUgaXMgcmlkaWN1bG91c2x5IGxvbmcKICAgICAgICBpZiAoc3RyZWFtLnBvcyA+IDUwMDApIHsKICAgICAgICAgIHN0W3BvcysrXSA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0ucG9zKTsgc3RbcG9zKytdID0gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3QubGVuZ3RoICE9IHBvcykge3N0Lmxlbmd0aCA9IHBvczsgY2hhbmdlZCA9IHRydWU7fQogICAgICBpZiAocG9zICYmIHN0W3Bvcy0yXSAhPSBwcmV2V29yZCkgY2hhbmdlZCA9IHRydWU7CiAgICAgIC8vIFNob3J0IGxpbmVzIHdpdGggc2ltcGxlIGhpZ2hsaWdodHMgcmV0dXJuIG51bGwsIGFuZCBhcmUKICAgICAgLy8gY291bnRlZCBhcyBjaGFuZ2VkIGJ5IHRoZSBkcml2ZXIgYmVjYXVzZSB0aGV5IGFyZSBsaWtlbHkgdG8KICAgICAgLy8gaGlnaGxpZ2h0IHRoZSBzYW1lIHdheSBpbiB2YXJpb3VzIGNvbnRleHRzLgogICAgICByZXR1cm4gY2hhbmdlZCB8fCAoc3QubGVuZ3RoIDwgNSAmJiB0aGlzLnRleHQubGVuZ3RoIDwgMTAgPyBudWxsIDogZmFsc2UpOwogICAgfSwKICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCiAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCiAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihtb2RlLCBzdGF0ZSwgY2gpIHsKICAgICAgdmFyIHR4dCA9IHRoaXMudGV4dCwgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0eHQpOwogICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IGNoICYmICFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LAogICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZSB8fCBudWxsLAogICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZX07CiAgICB9LAogICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKHRhYlNpemUpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy50ZXh0LCBudWxsLCB0YWJTaXplKTt9LAogICAgLy8gUHJvZHVjZXMgYW4gSFRNTCBmcmFnbWVudCBmb3IgdGhlIGxpbmUsIHRha2luZyBzZWxlY3Rpb24sCiAgICAvLyBtYXJraW5nLCBhbmQgaGlnaGxpZ2h0aW5nIGludG8gYWNjb3VudC4KICAgIGdldEhUTUw6IGZ1bmN0aW9uKG1ha2VUYWIsIHdyYXBBdCwgd3JhcElkLCB3cmFwV0JSKSB7CiAgICAgIHZhciBodG1sID0gW10sIGZpcnN0ID0gdHJ1ZSwgY29sID0gMDsKICAgICAgZnVuY3Rpb24gc3Bhbl8odGV4dCwgc3R5bGUpIHsKICAgICAgICBpZiAoIXRleHQpIHJldHVybjsKICAgICAgICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyB3aGVyZSwgaW4gc29tZSBjb21wYXQgbW9kZXMsIElFIGlnbm9yZXMgbGVhZGluZyBzcGFjZXMKICAgICAgICBpZiAoZmlyc3QgJiYgaWUgJiYgdGV4dC5jaGFyQXQoMCkgPT0gIiAiKSB0ZXh0ID0gIlx1MDBhMCIgKyB0ZXh0LnNsaWNlKDEpOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgaWYgKHRleHQuaW5kZXhPZigiXHQiKSA9PSAtMSkgewogICAgICAgICAgY29sICs9IHRleHQubGVuZ3RoOwogICAgICAgICAgdmFyIGVzY2FwZWQgPSBodG1sRXNjYXBlKHRleHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgZXNjYXBlZCA9ICIiOwogICAgICAgICAgZm9yICh2YXIgcG9zID0gMDs7KSB7CiAgICAgICAgICAgIHZhciBpZHggPSB0ZXh0LmluZGV4T2YoIlx0IiwgcG9zKTsKICAgICAgICAgICAgaWYgKGlkeCA9PSAtMSkgewogICAgICAgICAgICAgIGVzY2FwZWQgKz0gaHRtbEVzY2FwZSh0ZXh0LnNsaWNlKHBvcykpOwogICAgICAgICAgICAgIGNvbCArPSB0ZXh0Lmxlbmd0aCAtIHBvczsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb2wgKz0gaWR4IC0gcG9zOwogICAgICAgICAgICAgIHZhciB0YWIgPSBtYWtlVGFiKGNvbCk7CiAgICAgICAgICAgICAgZXNjYXBlZCArPSBodG1sRXNjYXBlKHRleHQuc2xpY2UocG9zLCBpZHgpKSArIHRhYi5odG1sOwogICAgICAgICAgICAgIGNvbCArPSB0YWIud2lkdGg7CiAgICAgICAgICAgICAgcG9zID0gaWR4ICsgMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc3R5bGUpIGh0bWwucHVzaCgnPHNwYW4gY2xhc3M9IicsIHN0eWxlLCAnIj4nLCBlc2NhcGVkLCAiPC9zcGFuPiIpOwogICAgICAgIGVsc2UgaHRtbC5wdXNoKGVzY2FwZWQpOwogICAgICB9CiAgICAgIHZhciBzcGFuID0gc3Bhbl87CiAgICAgIGlmICh3cmFwQXQgIT0gbnVsbCkgewogICAgICAgIHZhciBvdXRQb3MgPSAwLCBvcGVuID0gIjxzcGFuIGlkPVwiIiArIHdyYXBJZCArICJcIj4iOwogICAgICAgIHNwYW4gPSBmdW5jdGlvbih0ZXh0LCBzdHlsZSkgewogICAgICAgICAgdmFyIGwgPSB0ZXh0Lmxlbmd0aDsKICAgICAgICAgIGlmICh3cmFwQXQgPj0gb3V0UG9zICYmIHdyYXBBdCA8IG91dFBvcyArIGwpIHsKICAgICAgICAgICAgaWYgKHdyYXBBdCA+IG91dFBvcykgewogICAgICAgICAgICAgIHNwYW5fKHRleHQuc2xpY2UoMCwgd3JhcEF0IC0gb3V0UG9zKSwgc3R5bGUpOwogICAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGF0IHRoZSBkZWZpbml0aW9uIG9mIHNwYW5BZmZlY3RzV3JhcHBpbmcKICAgICAgICAgICAgICBpZiAod3JhcFdCUikgaHRtbC5wdXNoKCI8d2JyPiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGh0bWwucHVzaChvcGVuKTsKICAgICAgICAgICAgdmFyIGN1dCA9IHdyYXBBdCAtIG91dFBvczsKICAgICAgICAgICAgc3Bhbl8ob3BlcmEgPyB0ZXh0LnNsaWNlKGN1dCwgY3V0ICsgMSkgOiB0ZXh0LnNsaWNlKGN1dCksIHN0eWxlKTsKICAgICAgICAgICAgaHRtbC5wdXNoKCI8L3NwYW4+Iik7CiAgICAgICAgICAgIGlmIChvcGVyYSkgc3Bhbl8odGV4dC5zbGljZShjdXQgKyAxKSwgc3R5bGUpOwogICAgICAgICAgICB3cmFwQXQtLTsKICAgICAgICAgICAgb3V0UG9zICs9IGw7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvdXRQb3MgKz0gbDsKICAgICAgICAgICAgc3Bhbl8odGV4dCwgc3R5bGUpOwogICAgICAgICAgICAvLyBPdXRwdXQgZW1wdHkgd3JhcHBlciB3aGVuIGF0IGVuZCBvZiBsaW5lCiAgICAgICAgICAgIGlmIChvdXRQb3MgPT0gd3JhcEF0ICYmIG91dFBvcyA9PSBsZW4pIGh0bWwucHVzaChvcGVuICsgIiA8L3NwYW4+Iik7CiAgICAgICAgICAgIC8vIFN0b3Agb3V0cHV0dGluZyBIVE1MIHdoZW4gZ29uZSBzdWZmaWNpZW50bHkgZmFyIGJleW9uZCBtZWFzdXJlCiAgICAgICAgICAgIGVsc2UgaWYgKG91dFBvcyA+IHdyYXBBdCArIDEwICYmIC9ccy8udGVzdCh0ZXh0KSkgc3BhbiA9IGZ1bmN0aW9uKCl7fTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBzdCA9IHRoaXMuc3R5bGVzLCBhbGxUZXh0ID0gdGhpcy50ZXh0LCBtYXJrZWQgPSB0aGlzLm1hcmtlZDsKICAgICAgdmFyIGxlbiA9IGFsbFRleHQubGVuZ3RoOwogICAgICBmdW5jdGlvbiBzdHlsZVRvQ2xhc3Moc3R5bGUpIHsKICAgICAgICBpZiAoIXN0eWxlKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gImNtLSIgKyBzdHlsZS5yZXBsYWNlKC8gKy9nLCAiIGNtLSIpOwogICAgICB9CgogICAgICBpZiAoIWFsbFRleHQgJiYgd3JhcEF0ID09IG51bGwpIHsKICAgICAgICBzcGFuKCIgIik7CiAgICAgIH0gZWxzZSBpZiAoIW1hcmtlZCB8fCAhbWFya2VkLmxlbmd0aCkgewogICAgICAgIGZvciAodmFyIGkgPSAwLCBjaCA9IDA7IGNoIDwgbGVuOyBpKz0yKSB7CiAgICAgICAgICB2YXIgc3RyID0gc3RbaV0sIHN0eWxlID0gc3RbaSsxXSwgbCA9IHN0ci5sZW5ndGg7CiAgICAgICAgICBpZiAoY2ggKyBsID4gbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgbGVuIC0gY2gpOwogICAgICAgICAgY2ggKz0gbDsKICAgICAgICAgIHNwYW4oc3RyLCBzdHlsZVRvQ2xhc3Moc3R5bGUpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHBvcyA9IDAsIGkgPSAwLCB0ZXh0ID0gIiIsIHN0eWxlLCBzZyA9IDA7CiAgICAgICAgdmFyIG5leHRDaGFuZ2UgPSBtYXJrZWRbMF0uZnJvbSB8fCAwLCBtYXJrcyA9IFtdLCBtYXJrcG9zID0gMDsKICAgICAgICBmdW5jdGlvbiBhZHZhbmNlTWFya3MoKSB7CiAgICAgICAgICB2YXIgbTsKICAgICAgICAgIHdoaWxlIChtYXJrcG9zIDwgbWFya2VkLmxlbmd0aCAmJgogICAgICAgICAgICAgICAgICgobSA9IG1hcmtlZFttYXJrcG9zXSkuZnJvbSA9PSBwb3MgfHwgbS5mcm9tID09IG51bGwpKSB7CiAgICAgICAgICAgIGlmIChtLnN0eWxlICE9IG51bGwpIG1hcmtzLnB1c2gobSk7CiAgICAgICAgICAgICsrbWFya3BvczsKICAgICAgICAgIH0KICAgICAgICAgIG5leHRDaGFuZ2UgPSBtYXJrcG9zIDwgbWFya2VkLmxlbmd0aCA/IG1hcmtlZFttYXJrcG9zXS5mcm9tIDogSW5maW5pdHk7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIHZhciB0byA9IG1hcmtzW2ldLnRvIHx8IEluZmluaXR5OwogICAgICAgICAgICBpZiAodG8gPT0gcG9zKSBtYXJrcy5zcGxpY2UoaS0tLCAxKTsKICAgICAgICAgICAgZWxzZSBuZXh0Q2hhbmdlID0gTWF0aC5taW4odG8sIG5leHRDaGFuZ2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbSA9IDA7CiAgICAgICAgd2hpbGUgKHBvcyA8IGxlbikgewogICAgICAgICAgaWYgKG5leHRDaGFuZ2UgPT0gcG9zKSBhZHZhbmNlTWFya3MoKTsKICAgICAgICAgIHZhciB1cHRvID0gTWF0aC5taW4obGVuLCBuZXh0Q2hhbmdlKTsKICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgICAgICAgdmFyIGVuZCA9IHBvcyArIHRleHQubGVuZ3RoOwogICAgICAgICAgICAgIHZhciBhcHBsaWVkU3R5bGUgPSBzdHlsZTsKICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcmtzLmxlbmd0aDsgKytqKQogICAgICAgICAgICAgICAgYXBwbGllZFN0eWxlID0gKGFwcGxpZWRTdHlsZSA/IGFwcGxpZWRTdHlsZSArICIgIiA6ICIiKSArIG1hcmtzW2pdLnN0eWxlOwogICAgICAgICAgICAgIHNwYW4oZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwgdXB0byAtIHBvcykgOiB0ZXh0LCBhcHBsaWVkU3R5bGUpOwogICAgICAgICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVhazt9CiAgICAgICAgICAgICAgcG9zID0gZW5kOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRleHQgPSBzdFtpKytdOyBzdHlsZSA9IHN0eWxlVG9DbGFzcyhzdFtpKytdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGh0bWwuam9pbigiIik7CiAgICB9LAogICAgY2xlYW5VcDogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgICAgaWYgKHRoaXMubWFya2VkKQogICAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5tYXJrZWQubGVuZ3RoOyBpIDwgZTsgKytpKSB0aGlzLm1hcmtlZFtpXS5kZXRhY2godGhpcyk7CiAgICB9CiAgfTsKICAvLyBVdGlsaXR5IHVzZWQgYnkgcmVwbGFjZSBhbmQgc3BsaXQgYWJvdmUKICBmdW5jdGlvbiBjb3B5U3R5bGVzKGZyb20sIHRvLCBzb3VyY2UsIGRlc3QpIHsKICAgIGZvciAodmFyIGkgPSAwLCBwb3MgPSAwLCBzdGF0ZSA9IDA7IHBvcyA8IHRvOyBpKz0yKSB7CiAgICAgIHZhciBwYXJ0ID0gc291cmNlW2ldLCBlbmQgPSBwb3MgKyBwYXJ0Lmxlbmd0aDsKICAgICAgaWYgKHN0YXRlID09IDApIHsKICAgICAgICBpZiAoZW5kID4gZnJvbSkgZGVzdC5wdXNoKHBhcnQuc2xpY2UoZnJvbSAtIHBvcywgTWF0aC5taW4ocGFydC5sZW5ndGgsIHRvIC0gcG9zKSksIHNvdXJjZVtpKzFdKTsKICAgICAgICBpZiAoZW5kID49IGZyb20pIHN0YXRlID0gMTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAxKSB7CiAgICAgICAgaWYgKGVuZCA+IHRvKSBkZXN0LnB1c2gocGFydC5zbGljZSgwLCB0byAtIHBvcyksIHNvdXJjZVtpKzFdKTsKICAgICAgICBlbHNlIGRlc3QucHVzaChwYXJ0LCBzb3VyY2VbaSsxXSk7CiAgICAgIH0KICAgICAgcG9zID0gZW5kOwogICAgfQogIH0KCiAgLy8gRGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgc2VxdWVuY2Ugb2YgbGluZXMuCiAgZnVuY3Rpb24gTGVhZkNodW5rKGxpbmVzKSB7CiAgICB0aGlzLmxpbmVzID0gbGluZXM7CiAgICB0aGlzLnBhcmVudCA9IG51bGw7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aCwgaGVpZ2h0ID0gMDsgaSA8IGU7ICsraSkgewogICAgICBsaW5lc1tpXS5wYXJlbnQgPSB0aGlzOwogICAgICBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OwogICAgfQogICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7CiAgfQogIExlYWZDaHVuay5wcm90b3R5cGUgPSB7CiAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGg7IH0sCiAgICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuLCBjYWxsYmFja3MpIHsKICAgICAgZm9yICh2YXIgaSA9IGF0LCBlID0gYXQgKyBuOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwogICAgICAgIHRoaXMuaGVpZ2h0IC09IGxpbmUuaGVpZ2h0OwogICAgICAgIGxpbmUuY2xlYW5VcCgpOwogICAgICAgIGlmIChsaW5lLmhhbmRsZXJzKQogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmhhbmRsZXJzLmxlbmd0aDsgKytqKSBjYWxsYmFja3MucHVzaChsaW5lLmhhbmRsZXJzW2pdKTsKICAgICAgfQogICAgICB0aGlzLmxpbmVzLnNwbGljZShhdCwgbik7CiAgICB9LAogICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7CiAgICAgIGxpbmVzLnNwbGljZS5hcHBseShsaW5lcywgW2xpbmVzLmxlbmd0aCwgMF0uY29uY2F0KHRoaXMubGluZXMpKTsKICAgIH0sCiAgICBpbnNlcnRIZWlnaHQ6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7CiAgICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDsKICAgICAgdGhpcy5saW5lcyA9IHRoaXMubGluZXMuc2xpY2UoMCwgYXQpLmNvbmNhdChsaW5lcykuY29uY2F0KHRoaXMubGluZXMuc2xpY2UoYXQpKTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGg7IGkgPCBlOyArK2kpIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7CiAgICB9LAogICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBvcCkgewogICAgICBmb3IgKHZhciBlID0gYXQgKyBuOyBhdCA8IGU7ICsrYXQpCiAgICAgICAgaWYgKG9wKHRoaXMubGluZXNbYXRdKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBCcmFuY2hDaHVuayhjaGlsZHJlbikgewogICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwogICAgdmFyIHNpemUgPSAwLCBoZWlnaHQgPSAwOwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgdmFyIGNoID0gY2hpbGRyZW5baV07CiAgICAgIHNpemUgKz0gY2guY2h1bmtTaXplKCk7IGhlaWdodCArPSBjaC5oZWlnaHQ7CiAgICAgIGNoLnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0aGlzLnNpemUgPSBzaXplOwogICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICB0aGlzLnBhcmVudCA9IG51bGw7CiAgfQogIEJyYW5jaENodW5rLnByb3RvdHlwZSA9IHsKICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNpemU7IH0sCiAgICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuLCBjYWxsYmFja3MpIHsKICAgICAgdGhpcy5zaXplIC09IG47CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKGF0IDwgc3opIHsKICAgICAgICAgIHZhciBybSA9IE1hdGgubWluKG4sIHN6IC0gYXQpLCBvbGRIZWlnaHQgPSBjaGlsZC5oZWlnaHQ7CiAgICAgICAgICBjaGlsZC5yZW1vdmUoYXQsIHJtLCBjYWxsYmFja3MpOwogICAgICAgICAgdGhpcy5oZWlnaHQgLT0gb2xkSGVpZ2h0IC0gY2hpbGQuaGVpZ2h0OwogICAgICAgICAgaWYgKHN6ID09IHJtKSB7IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGktLSwgMSk7IGNoaWxkLnBhcmVudCA9IG51bGw7IH0KICAgICAgICAgIGlmICgobiAtPSBybSkgPT0gMCkgYnJlYWs7CiAgICAgICAgICBhdCA9IDA7CiAgICAgICAgfSBlbHNlIGF0IC09IHN6OwogICAgICB9CiAgICAgIGlmICh0aGlzLnNpemUgLSBuIDwgMjUpIHsKICAgICAgICB2YXIgbGluZXMgPSBbXTsKICAgICAgICB0aGlzLmNvbGxhcHNlKGxpbmVzKTsKICAgICAgICB0aGlzLmNoaWxkcmVuID0gW25ldyBMZWFmQ2h1bmsobGluZXMpXTsKICAgICAgICB0aGlzLmNoaWxkcmVuWzBdLnBhcmVudCA9IHRoaXM7CiAgICAgIH0KICAgIH0sCiAgICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgdGhpcy5jaGlsZHJlbltpXS5jb2xsYXBzZShsaW5lcyk7CiAgICB9LAogICAgaW5zZXJ0OiBmdW5jdGlvbihhdCwgbGluZXMpIHsKICAgICAgdmFyIGhlaWdodCA9IDA7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OwogICAgICB0aGlzLmluc2VydEhlaWdodChhdCwgbGluZXMsIGhlaWdodCk7CiAgICB9LAogICAgaW5zZXJ0SGVpZ2h0OiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkgewogICAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoOwogICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChhdCA8PSBzeikgewogICAgICAgICAgY2hpbGQuaW5zZXJ0SGVpZ2h0KGF0LCBsaW5lcywgaGVpZ2h0KTsKICAgICAgICAgIGlmIChjaGlsZC5saW5lcyAmJiBjaGlsZC5saW5lcy5sZW5ndGggPiA1MCkgewogICAgICAgICAgICB3aGlsZSAoY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHsKICAgICAgICAgICAgICB2YXIgc3BpbGxlZCA9IGNoaWxkLmxpbmVzLnNwbGljZShjaGlsZC5saW5lcy5sZW5ndGggLSAyNSwgMjUpOwogICAgICAgICAgICAgIHZhciBuZXdsZWFmID0gbmV3IExlYWZDaHVuayhzcGlsbGVkKTsKICAgICAgICAgICAgICBjaGlsZC5oZWlnaHQgLT0gbmV3bGVhZi5oZWlnaHQ7CiAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaSArIDEsIDAsIG5ld2xlYWYpOwogICAgICAgICAgICAgIG5ld2xlYWYucGFyZW50ID0gdGhpczsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm1heWJlU3BpbGwoKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBhdCAtPSBzejsKICAgICAgfQogICAgfSwKICAgIG1heWJlU3BpbGw6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMTApIHJldHVybjsKICAgICAgdmFyIG1lID0gdGhpczsKICAgICAgZG8gewogICAgICAgIHZhciBzcGlsbGVkID0gbWUuY2hpbGRyZW4uc3BsaWNlKG1lLmNoaWxkcmVuLmxlbmd0aCAtIDUsIDUpOwogICAgICAgIHZhciBzaWJsaW5nID0gbmV3IEJyYW5jaENodW5rKHNwaWxsZWQpOwogICAgICAgIGlmICghbWUucGFyZW50KSB7IC8vIEJlY29tZSB0aGUgcGFyZW50IG5vZGUKICAgICAgICAgIHZhciBjb3B5ID0gbmV3IEJyYW5jaENodW5rKG1lLmNoaWxkcmVuKTsKICAgICAgICAgIGNvcHkucGFyZW50ID0gbWU7CiAgICAgICAgICBtZS5jaGlsZHJlbiA9IFtjb3B5LCBzaWJsaW5nXTsKICAgICAgICAgIG1lID0gY29weTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWUuc2l6ZSAtPSBzaWJsaW5nLnNpemU7CiAgICAgICAgICBtZS5oZWlnaHQgLT0gc2libGluZy5oZWlnaHQ7CiAgICAgICAgICB2YXIgbXlJbmRleCA9IGluZGV4T2YobWUucGFyZW50LmNoaWxkcmVuLCBtZSk7CiAgICAgICAgICBtZS5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKG15SW5kZXggKyAxLCAwLCBzaWJsaW5nKTsKICAgICAgICB9CiAgICAgICAgc2libGluZy5wYXJlbnQgPSBtZS5wYXJlbnQ7CiAgICAgIH0gd2hpbGUgKG1lLmNoaWxkcmVuLmxlbmd0aCA+IDEwKTsKICAgICAgbWUucGFyZW50Lm1heWJlU3BpbGwoKTsKICAgIH0sCiAgICBpdGVyOiBmdW5jdGlvbihmcm9tLCB0bywgb3ApIHsgdGhpcy5pdGVyTihmcm9tLCB0byAtIGZyb20sIG9wKTsgfSwKICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKGF0IDwgc3opIHsKICAgICAgICAgIHZhciB1c2VkID0gTWF0aC5taW4obiwgc3ogLSBhdCk7CiAgICAgICAgICBpZiAoY2hpbGQuaXRlck4oYXQsIHVzZWQsIG9wKSkgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAoKG4gLT0gdXNlZCkgPT0gMCkgYnJlYWs7CiAgICAgICAgICBhdCA9IDA7CiAgICAgICAgfSBlbHNlIGF0IC09IHN6OwogICAgICB9CiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gZ2V0TGluZUF0KGNodW5rLCBuKSB7CiAgICB3aGlsZSAoIWNodW5rLmxpbmVzKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOzsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKG4gPCBzeikgeyBjaHVuayA9IGNoaWxkOyBicmVhazsgfQogICAgICAgIG4gLT0gc3o7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjaHVuay5saW5lc1tuXTsKICB9CiAgZnVuY3Rpb24gbGluZU5vKGxpbmUpIHsKICAgIGlmIChsaW5lLnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHZhciBjdXIgPSBsaW5lLnBhcmVudCwgbm8gPSBpbmRleE9mKGN1ci5saW5lcywgbGluZSk7CiAgICBmb3IgKHZhciBjaHVuayA9IGN1ci5wYXJlbnQ7IGNodW5rOyBjdXIgPSBjaHVuaywgY2h1bmsgPSBjaHVuay5wYXJlbnQpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5jaGlsZHJlbi5sZW5ndGg7IDsgKytpKSB7CiAgICAgICAgaWYgKGNodW5rLmNoaWxkcmVuW2ldID09IGN1cikgYnJlYWs7CiAgICAgICAgbm8gKz0gY2h1bmsuY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBubzsKICB9CiAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNodW5rLCBoKSB7CiAgICB2YXIgbiA9IDA7CiAgICBvdXRlcjogZG8gewogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBjaCA9IGNoaWxkLmhlaWdodDsKICAgICAgICBpZiAoaCA8IGNoKSB7IGNodW5rID0gY2hpbGQ7IGNvbnRpbnVlIG91dGVyOyB9CiAgICAgICAgaCAtPSBjaDsKICAgICAgICBuICs9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICB9CiAgICAgIHJldHVybiBuOwogICAgfSB3aGlsZSAoIWNodW5rLmxpbmVzKTsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsubGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgIHZhciBsaW5lID0gY2h1bmsubGluZXNbaV0sIGxoID0gbGluZS5oZWlnaHQ7CiAgICAgIGlmIChoIDwgbGgpIGJyZWFrOwogICAgICBoIC09IGxoOwogICAgfQogICAgcmV0dXJuIG4gKyBpOwogIH0KICBmdW5jdGlvbiBoZWlnaHRBdExpbmUoY2h1bmssIG4pIHsKICAgIHZhciBoID0gMDsKICAgIG91dGVyOiBkbyB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKG4gPCBzeikgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlcjsgfQogICAgICAgIG4gLT0gc3o7CiAgICAgICAgaCArPSBjaGlsZC5oZWlnaHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGg7CiAgICB9IHdoaWxlICghY2h1bmsubGluZXMpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIGggKz0gY2h1bmsubGluZXNbaV0uaGVpZ2h0OwogICAgcmV0dXJuIGg7CiAgfQoKICAvLyBUaGUgaGlzdG9yeSBvYmplY3QgJ2NodW5rcycgY2hhbmdlcyB0aGF0IGFyZSBtYWRlIGNsb3NlIHRvZ2V0aGVyCiAgLy8gYW5kIGF0IGFsbW9zdCB0aGUgc2FtZSB0aW1lIGludG8gYmlnZ2VyIHVuZG9hYmxlIHVuaXRzLgogIGZ1bmN0aW9uIEhpc3RvcnkoKSB7CiAgICB0aGlzLnRpbWUgPSAwOwogICAgdGhpcy5kb25lID0gW107IHRoaXMudW5kb25lID0gW107CiAgICB0aGlzLmNvbXBvdW5kID0gMDsKICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7CiAgfQogIEhpc3RvcnkucHJvdG90eXBlID0gewogICAgYWRkQ2hhbmdlOiBmdW5jdGlvbihzdGFydCwgYWRkZWQsIG9sZCkgewogICAgICB0aGlzLnVuZG9uZS5sZW5ndGggPSAwOwogICAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyID0gdGhpcy5kb25lW3RoaXMuZG9uZS5sZW5ndGggLSAxXSwgbGFzdCA9IGN1ciAmJiBjdXJbY3VyLmxlbmd0aCAtIDFdOwogICAgICB2YXIgZHRpbWUgPSB0aW1lIC0gdGhpcy50aW1lOwoKICAgICAgaWYgKHRoaXMuY29tcG91bmQgJiYgY3VyICYmICF0aGlzLmNsb3NlZCkgewogICAgICAgIGN1ci5wdXNoKHtzdGFydDogc3RhcnQsIGFkZGVkOiBhZGRlZCwgb2xkOiBvbGR9KTsKICAgICAgfSBlbHNlIGlmIChkdGltZSA+IDQwMCB8fCAhbGFzdCB8fCB0aGlzLmNsb3NlZCB8fAogICAgICAgICAgICAgICAgIGxhc3Quc3RhcnQgPiBzdGFydCArIG9sZC5sZW5ndGggfHwgbGFzdC5zdGFydCArIGxhc3QuYWRkZWQgPCBzdGFydCkgewogICAgICAgIHRoaXMuZG9uZS5wdXNoKFt7c3RhcnQ6IHN0YXJ0LCBhZGRlZDogYWRkZWQsIG9sZDogb2xkfV0pOwogICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHN0YXJ0QmVmb3JlID0gTWF0aC5tYXgoMCwgbGFzdC5zdGFydCAtIHN0YXJ0KSwKICAgICAgICAgICAgZW5kQWZ0ZXIgPSBNYXRoLm1heCgwLCAoc3RhcnQgKyBvbGQubGVuZ3RoKSAtIChsYXN0LnN0YXJ0ICsgbGFzdC5hZGRlZCkpOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydEJlZm9yZTsgaSA+IDA7IC0taSkgbGFzdC5vbGQudW5zaGlmdChvbGRbaSAtIDFdKTsKICAgICAgICBmb3IgKHZhciBpID0gZW5kQWZ0ZXI7IGkgPiAwOyAtLWkpIGxhc3Qub2xkLnB1c2gob2xkW29sZC5sZW5ndGggLSBpXSk7CiAgICAgICAgaWYgKHN0YXJ0QmVmb3JlKSBsYXN0LnN0YXJ0ID0gc3RhcnQ7CiAgICAgICAgbGFzdC5hZGRlZCArPSBhZGRlZCAtIChvbGQubGVuZ3RoIC0gc3RhcnRCZWZvcmUgLSBlbmRBZnRlcik7CiAgICAgIH0KICAgICAgdGhpcy50aW1lID0gdGltZTsKICAgIH0sCiAgICBzdGFydENvbXBvdW5kOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKCF0aGlzLmNvbXBvdW5kKyspIHRoaXMuY2xvc2VkID0gdHJ1ZTsKICAgIH0sCiAgICBlbmRDb21wb3VuZDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICghLS10aGlzLmNvbXBvdW5kKSB0aGlzLmNsb3NlZCA9IHRydWU7CiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3RvcE1ldGhvZCgpIHtlX3N0b3AodGhpcyk7fQogIC8vIEVuc3VyZSBhbiBldmVudCBoYXMgYSBzdG9wIG1ldGhvZC4KICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50LnN0b3ApIGV2ZW50LnN0b3AgPSBzdG9wTWV0aG9kOwogICAgcmV0dXJuIGV2ZW50OwogIH0KCiAgZnVuY3Rpb24gZV9wcmV2ZW50RGVmYXVsdChlKSB7CiAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIGVfc3RvcFByb3BhZ2F0aW9uKGUpIHsKICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGVsc2UgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBlX3N0b3AoZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3BhZ2F0aW9uKGUpO30KICBDb2RlTWlycm9yLmVfc3RvcCA9IGVfc3RvcDsKICBDb2RlTWlycm9yLmVfcHJldmVudERlZmF1bHQgPSBlX3ByZXZlbnREZWZhdWx0OwogIENvZGVNaXJyb3IuZV9zdG9wUHJvcGFnYXRpb24gPSBlX3N0b3BQcm9wYWdhdGlvbjsKCiAgZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7fQogIGZ1bmN0aW9uIGVfYnV0dG9uKGUpIHsKICAgIGlmIChlLndoaWNoKSByZXR1cm4gZS53aGljaDsKICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgMSkgcmV0dXJuIDE7CiAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDIpIHJldHVybiAzOwogICAgZWxzZSBpZiAoZS5idXR0b24gJiA0KSByZXR1cm4gMjsKICB9CgogIC8vIEFsbG93IDNyZC1wYXJ0eSBjb2RlIHRvIG92ZXJyaWRlIGV2ZW50IHByb3BlcnRpZXMgYnkgYWRkaW5nIGFuIG92ZXJyaWRlCiAgLy8gb2JqZWN0IHRvIGFuIGV2ZW50IG9iamVjdC4KICBmdW5jdGlvbiBlX3Byb3AoZSwgcHJvcCkgewogICAgdmFyIG92ZXJyaWRkZW4gPSBlLm92ZXJyaWRlICYmIGUub3ZlcnJpZGUuaGFzT3duUHJvcGVydHkocHJvcCk7CiAgICByZXR1cm4gb3ZlcnJpZGRlbiA/IGUub3ZlcnJpZGVbcHJvcF0gOiBlW3Byb3BdOwogIH0KCiAgLy8gRXZlbnQgaGFuZGxlciByZWdpc3RyYXRpb24uIElmIGRpc2Nvbm5lY3QgaXMgdHJ1ZSwgaXQnbGwgcmV0dXJuIGEKICAvLyBmdW5jdGlvbiB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyLgogIGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlciwgZGlzY29ubmVjdCkgewogICAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gImZ1bmN0aW9uIikgewogICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpOwogICAgICBpZiAoZGlzY29ubmVjdCkgcmV0dXJuIGZ1bmN0aW9uKCkge25vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7fTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciB3cmFwSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7aGFuZGxlcihldmVudCB8fCB3aW5kb3cuZXZlbnQpO307CiAgICAgIG5vZGUuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTsKICAgICAgaWYgKGRpc2Nvbm5lY3QpIHJldHVybiBmdW5jdGlvbigpIHtub2RlLmRldGFjaEV2ZW50KCJvbiIgKyB0eXBlLCB3cmFwSGFuZGxlcik7fTsKICAgIH0KICB9CiAgQ29kZU1pcnJvci5jb25uZWN0ID0gY29ubmVjdDsKCiAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVsbDt9CiAgRGVsYXllZC5wcm90b3R5cGUgPSB7c2V0OiBmdW5jdGlvbihtcywgZikge2NsZWFyVGltZW91dCh0aGlzLmlkKTsgdGhpcy5pZCA9IHNldFRpbWVvdXQoZiwgbXMpO319OwoKICB2YXIgUGFzcyA9IENvZGVNaXJyb3IuUGFzcyA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gIkNvZGVNaXJyb3IuUGFzcyI7fX07CgogIHZhciBnZWNrbyA9IC9nZWNrb1wvXGR7N30vaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBpZSA9IC9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBpZV9sdDggPSAvTVNJRSBbMS03XVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBpZV9sdDkgPSAvTVNJRSBbMS04XVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBxdWlya3NNb2RlID0gaWUgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09IDU7CiAgdmFyIHdlYmtpdCA9IC9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgY2hyb21lID0gL0Nocm9tZVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBvcGVyYSA9IC9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBzYWZhcmkgPSAvQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvcik7CiAgdmFyIGtodG1sID0gL0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIG1hY19nZUxpb24gPSAvTWFjIE9TIFggMTBcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwoKICAvLyBEZXRlY3QgZHJhZy1hbmQtZHJvcAogIHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkgewogICAgLy8gVGhlcmUgaXMgKnNvbWUqIGtpbmQgb2YgZHJhZy1hbmQtZHJvcCBzdXBwb3J0IGluIElFNi04LCBidXQgSQogICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgeWV0LgogICAgaWYgKGllX2x0OSkgcmV0dXJuIGZhbHNlOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRpdiB8fCAiZHJhZ0Ryb3AiIGluIGRpdjsKICB9KCk7CgogIC8vIEZlYXR1cmUtZGV0ZWN0IHdoZXRoZXIgbmV3bGluZXMgaW4gdGV4dGFyZWFzIGFyZSBjb252ZXJ0ZWQgdG8gXHJcbgogIHZhciBsaW5lU2VwID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTsKICAgIHRlLnZhbHVlID0gImZvb1xuYmFyIjsKICAgIGlmICh0ZS52YWx1ZS5pbmRleE9mKCJcciIpID4gLTEpIHJldHVybiAiXHJcbiI7CiAgICByZXR1cm4gIlxuIjsKICB9KCk7CgogIC8vIEZvciBhIHJlYXNvbiBJIGhhdmUgeWV0IHRvIGZpZ3VyZSBvdXQsIHNvbWUgYnJvd3NlcnMgZGlzYWxsb3cKICAvLyB3b3JkIHdyYXBwaW5nIGJldHdlZW4gY2VydGFpbiBjaGFyYWN0ZXJzICpvbmx5KiBpZiBhIG5ldyBpbmxpbmUKICAvLyBlbGVtZW50IGlzIHN0YXJ0ZWQgYmV0d2VlbiB0aGVtLiBUaGlzIG1ha2VzIGl0IGhhcmQgdG8gcmVsaWFibHkKICAvLyBtZWFzdXJlIHRoZSBwb3NpdGlvbiBvZiB0aGluZ3MsIHNpbmNlIHRoYXQgcmVxdWlyZXMgaW5zZXJ0aW5nIGFuCiAgLy8gZXh0cmEgc3Bhbi4gVGhpcyB0ZXJyaWJseSBmcmFnaWxlIHNldCBvZiByZWdleHBzIG1hdGNoZXMgdGhlCiAgLy8gY2hhcmFjdGVyIGNvbWJpbmF0aW9ucyB0aGF0IHN1ZmZlciBmcm9tIHRoaXMgcGhlbm9tZW5vbiBvbiB0aGUKICAvLyB2YXJpb3VzIGJyb3dzZXJzLgogIHZhciBzcGFuQWZmZWN0c1dyYXBwaW5nID0gL14kLzsgLy8gV29uJ3QgbWF0Y2ggYW55IHR3by1jaGFyYWN0ZXIgc3RyaW5nCiAgaWYgKGdlY2tvKSBzcGFuQWZmZWN0c1dyYXBwaW5nID0gLyQnLzsKICBlbHNlIGlmIChzYWZhcmkpIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXC1bXiBcLT9dfFw/W14gISdcIlwpLC5cLVwvOjtcP1xdXH1dLzsKICBlbHNlIGlmIChjaHJvbWUpIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXC1bXiBcLVwuP118XD9bXiBcLVwuP1xdXH06OyEnXCJcKSxcL118W1wuIVwiIyYlXCkqKyw6Oz0+XF18XH1+XVtcKFx7XFs8XXxcJCcvOwoKICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KICAvLyBVc2VkIG1vc3RseSB0byBmaW5kIGluZGVudGF0aW9uLgogIGZ1bmN0aW9uIGNvdW50Q29sdW1uKHN0cmluZywgZW5kLCB0YWJTaXplKSB7CiAgICBpZiAoZW5kID09IG51bGwpIHsKICAgICAgZW5kID0gc3RyaW5nLnNlYXJjaCgvW15cc1x1MDBhMF0vKTsKICAgICAgaWYgKGVuZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwLCBuID0gMDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkpID09ICJcdCIpIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7CiAgICAgIGVsc2UgKytuOwogICAgfQogICAgcmV0dXJuIG47CiAgfQoKICBmdW5jdGlvbiBjb21wdXRlZFN0eWxlKGVsdCkgewogICAgaWYgKGVsdC5jdXJyZW50U3R5bGUpIHJldHVybiBlbHQuY3VycmVudFN0eWxlOwogICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsdCwgbnVsbCk7CiAgfQoKICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGJ5IGZvbGxvd2luZyB0aGUgb2Zmc2V0UGFyZW50IGNoYWluLgogIC8vIElmIHNjcmVlbj09dHJ1ZSwgaXQgcmV0dXJucyBzY3JlZW4gKHJhdGhlciB0aGFuIHBhZ2UpIGNvb3JkaW5hdGVzLgogIGZ1bmN0aW9uIGVsdE9mZnNldChub2RlLCBzY3JlZW4pIHsKICAgIHZhciBib2QgPSBub2RlLm93bmVyRG9jdW1lbnQuYm9keTsKICAgIHZhciB4ID0gMCwgeSA9IDAsIHNraXBCb2R5ID0gZmFsc2U7CiAgICBmb3IgKHZhciBuID0gbm9kZTsgbjsgbiA9IG4ub2Zmc2V0UGFyZW50KSB7CiAgICAgIHZhciBvbCA9IG4ub2Zmc2V0TGVmdCwgb3QgPSBuLm9mZnNldFRvcDsKICAgICAgLy8gRmlyZWZveCByZXBvcnRzIHdlaXJkIGludmVydGVkIG9mZnNldHMgd2hlbiB0aGUgYm9keSBoYXMgYSBib3JkZXIuCiAgICAgIGlmIChuID09IGJvZCkgeyB4ICs9IE1hdGguYWJzKG9sKTsgeSArPSBNYXRoLmFicyhvdCk7IH0KICAgICAgZWxzZSB7IHggKz0gb2wsIHkgKz0gb3Q7IH0KICAgICAgaWYgKHNjcmVlbiAmJiBjb21wdXRlZFN0eWxlKG4pLnBvc2l0aW9uID09ICJmaXhlZCIpCiAgICAgICAgc2tpcEJvZHkgPSB0cnVlOwogICAgfQogICAgdmFyIGUgPSBzY3JlZW4gJiYgIXNraXBCb2R5ID8gbnVsbCA6IGJvZDsKICAgIGZvciAodmFyIG4gPSBub2RlLnBhcmVudE5vZGU7IG4gIT0gZTsgbiA9IG4ucGFyZW50Tm9kZSkKICAgICAgaWYgKG4uc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHggLT0gbi5zY3JvbGxMZWZ0OyB5IC09IG4uc2Nyb2xsVG9wO30KICAgIHJldHVybiB7bGVmdDogeCwgdG9wOiB5fTsKICB9CiAgLy8gVXNlIHRoZSBmYXN0ZXIgYW5kIHNhbmVyIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2Qgd2hlbiBwb3NzaWJsZS4KICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPSBudWxsKSBlbHRPZmZzZXQgPSBmdW5jdGlvbihub2RlLCBzY3JlZW4pIHsKICAgIC8vIFRha2UgdGhlIHBhcnRzIG9mIGJvdW5kaW5nIGNsaWVudCByZWN0IHRoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gc28gd2UgYXJlIGFibGUgdG8gZWRpdCBpZiBuZWVkIGJlLAogICAgLy8gc2luY2UgdGhlIHJldHVybmVkIHZhbHVlIGNhbm5vdCBiZSBjaGFuZ2VkIGV4dGVybmFsbHkgKHRoZXkgYXJlIGtlcHQgaW4gc3luYyBhcyB0aGUgZWxlbWVudCBtb3ZlcyB3aXRoaW4gdGhlIHBhZ2UpCiAgICB0cnkgeyB2YXIgYm94ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgYm94ID0geyB0b3A6IGJveC50b3AsIGxlZnQ6IGJveC5sZWZ0IH07IH0KICAgIGNhdGNoKGUpIHsgYm94ID0ge3RvcDogMCwgbGVmdDogMH07IH0KICAgIGlmICghc2NyZWVuKSB7CiAgICAgIC8vIEdldCB0aGUgdG9wbGV2ZWwgc2Nyb2xsLCB3b3JraW5nIGFyb3VuZCBicm93c2VyIGRpZmZlcmVuY2VzLgogICAgICBpZiAod2luZG93LnBhZ2VZT2Zmc2V0ID09IG51bGwpIHsKICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGU7CiAgICAgICAgaWYgKHQuc2Nyb2xsVG9wID09IG51bGwpIHQgPSBkb2N1bWVudC5ib2R5OwogICAgICAgIGJveC50b3AgKz0gdC5zY3JvbGxUb3A7IGJveC5sZWZ0ICs9IHQuc2Nyb2xsTGVmdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBib3gudG9wICs9IHdpbmRvdy5wYWdlWU9mZnNldDsgYm94LmxlZnQgKz0gd2luZG93LnBhZ2VYT2Zmc2V0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYm94OwogIH07CgogIC8vIEdldCBhIG5vZGUncyB0ZXh0IGNvbnRlbnQuCiAgZnVuY3Rpb24gZWx0VGV4dChub2RlKSB7CiAgICByZXR1cm4gbm9kZS50ZXh0Q29udGVudCB8fCBub2RlLmlubmVyVGV4dCB8fCBub2RlLm5vZGVWYWx1ZSB8fCAiIjsKICB9CiAgZnVuY3Rpb24gc2VsZWN0SW5wdXQobm9kZSkgewogICAgaWYgKGlvcykgeyAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEgYnVnIHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi4KICAgICAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IDA7CiAgICAgIG5vZGUuc2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7CiAgICB9IGVsc2Ugbm9kZS5zZWxlY3QoKTsKICB9CgogIC8vIE9wZXJhdGlvbnMgb24ge2xpbmUsIGNofSBvYmplY3RzLgogIGZ1bmN0aW9uIHBvc0VxKGEsIGIpIHtyZXR1cm4gYS5saW5lID09IGIubGluZSAmJiBhLmNoID09IGIuY2g7fQogIGZ1bmN0aW9uIHBvc0xlc3MoYSwgYikge3JldHVybiBhLmxpbmUgPCBiLmxpbmUgfHwgKGEubGluZSA9PSBiLmxpbmUgJiYgYS5jaCA8IGIuY2gpO30KICBmdW5jdGlvbiBjb3B5UG9zKHgpIHtyZXR1cm4ge2xpbmU6IHgubGluZSwgY2g6IHguY2h9O30KCiAgdmFyIGVzY2FwZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKICBmdW5jdGlvbiBodG1sRXNjYXBlKHN0cikgewogICAgZXNjYXBlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0cjsKICAgIHJldHVybiBlc2NhcGVFbGVtZW50LmlubmVySFRNTDsKICB9CiAgLy8gUmVjZW50IChsYXRlIDIwMTEpIE9wZXJhIGJldGFzIGluc2VydCBib2d1cyBuZXdsaW5lcyBhdCB0aGUgc3RhcnQKICAvLyBvZiB0aGUgdGV4dENvbnRlbnQsIHNvIHdlIHN0cmlwIHRob3NlLgogIGlmIChodG1sRXNjYXBlKCJhIikgPT0gIlxuYSIpIHsKICAgIGh0bWxFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgZXNjYXBlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0cjsKICAgICAgcmV0dXJuIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MLnNsaWNlKDEpOwogICAgfTsKICAvLyBTb21lIElFcyBkb24ndCBwcmVzZXJ2ZSB0YWJzIHRocm91Z2ggaW5uZXJIVE1MCiAgfSBlbHNlIGlmIChodG1sRXNjYXBlKCJcdCIpICE9ICJcdCIpIHsKICAgIGh0bWxFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgZXNjYXBlRWxlbWVudC5pbm5lckhUTUwgPSAiIjsKICAgICAgZXNjYXBlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKICAgICAgcmV0dXJuIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MOwogICAgfTsKICB9CiAgQ29kZU1pcnJvci5odG1sRXNjYXBlID0gaHRtbEVzY2FwZTsKCiAgLy8gVXNlZCB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIGFuIHVuZG8vcmVkbyBieSBmaW5kaW5nIHRoZQogIC8vIGxhc3QgZWRpdGVkIGNoYXJhY3Rlci4KICBmdW5jdGlvbiBlZGl0RW5kKGZyb20sIHRvKSB7CiAgICBpZiAoIXRvKSByZXR1cm4gMDsKICAgIGlmICghZnJvbSkgcmV0dXJuIHRvLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA+PSAwICYmIGogPj0gMDsgLS1pLCAtLWopCiAgICAgIGlmIChmcm9tLmNoYXJBdChpKSAhPSB0by5jaGFyQXQoaikpIGJyZWFrOwogICAgcmV0dXJuIGogKyAxOwogIH0KCiAgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbHQpIHsKICAgIGlmIChjb2xsZWN0aW9uLmluZGV4T2YpIHJldHVybiBjb2xsZWN0aW9uLmluZGV4T2YoZWx0KTsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBlOyArK2kpCiAgICAgIGlmIChjb2xsZWN0aW9uW2ldID09IGVsdCkgcmV0dXJuIGk7CiAgICByZXR1cm4gLTE7CiAgfQogIGZ1bmN0aW9uIGlzV29yZENoYXIoY2gpIHsKICAgIHJldHVybiAvXHcvLnRlc3QoY2gpIHx8IGNoLnRvVXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKTsKICB9CgogIC8vIFNlZSBpZiAiIi5zcGxpdCBpcyB0aGUgYnJva2VuIElFIHZlcnNpb24sIGlmIHNvLCBwcm92aWRlIGFuCiAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwbGl0IGxpbmVzLgogIHZhciBzcGxpdExpbmVzID0gIlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGggIT0gMyA/IGZ1bmN0aW9uKHN0cmluZykgewogICAgdmFyIHBvcyA9IDAsIG5sLCByZXN1bHQgPSBbXTsKICAgIHdoaWxlICgobmwgPSBzdHJpbmcuaW5kZXhPZigiXG4iLCBwb3MpKSA+IC0xKSB7CiAgICAgIHJlc3VsdC5wdXNoKHN0cmluZy5zbGljZShwb3MsIHN0cmluZy5jaGFyQXQobmwtMSkgPT0gIlxyIiA/IG5sIC0gMSA6IG5sKSk7CiAgICAgIHBvcyA9IG5sICsgMTsKICAgIH0KICAgIHJlc3VsdC5wdXNoKHN0cmluZy5zbGljZShwb3MpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSA6IGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5zcGxpdCgvXHI/XG4vKTt9OwogIENvZGVNaXJyb3Iuc3BsaXRMaW5lcyA9IHNwbGl0TGluZXM7CgogIHZhciBoYXNTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gZnVuY3Rpb24odGUpIHsKICAgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFydCAhPSB0ZS5zZWxlY3Rpb25FbmQ7IH0KICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlOyB9CiAgfSA6IGZ1bmN0aW9uKHRlKSB7CiAgICB0cnkge3ZhciByYW5nZSA9IHRlLm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fQogICAgY2F0Y2goZSkge30KICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UucGFyZW50RWxlbWVudCgpICE9IHRlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gcmFuZ2UuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsIHJhbmdlKSAhPSAwOwogIH07CgogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgibnVsbCIsIGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHt0b2tlbjogZnVuY3Rpb24oc3RyZWFtKSB7c3RyZWFtLnNraXBUb0VuZCgpO319OwogIH0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsICJudWxsIik7CgogIHZhciBrZXlOYW1lcyA9IHszOiAiRW50ZXIiLCA4OiAiQmFja3NwYWNlIiwgOTogIlRhYiIsIDEzOiAiRW50ZXIiLCAxNjogIlNoaWZ0IiwgMTc6ICJDdHJsIiwgMTg6ICJBbHQiLAogICAgICAgICAgICAgICAgICAxOTogIlBhdXNlIiwgMjA6ICJDYXBzTG9jayIsIDI3OiAiRXNjIiwgMzI6ICJTcGFjZSIsIDMzOiAiUGFnZVVwIiwgMzQ6ICJQYWdlRG93biIsIDM1OiAiRW5kIiwKICAgICAgICAgICAgICAgICAgMzY6ICJIb21lIiwgMzc6ICJMZWZ0IiwgMzg6ICJVcCIsIDM5OiAiUmlnaHQiLCA0MDogIkRvd24iLCA0NDogIlByaW50U2NybiIsIDQ1OiAiSW5zZXJ0IiwKICAgICAgICAgICAgICAgICAgNDY6ICJEZWxldGUiLCA1OTogIjsiLCA5MTogIk1vZCIsIDkyOiAiTW9kIiwgOTM6ICJNb2QiLCAxMDk6ICItIiwgMTA3OiAiPSIsIDEyNzogIkRlbGV0ZSIsCiAgICAgICAgICAgICAgICAgIDE4NjogIjsiLCAxODc6ICI9IiwgMTg4OiAiLCIsIDE4OTogIi0iLCAxOTA6ICIuIiwgMTkxOiAiLyIsIDE5MjogImAiLCAyMTk6ICJbIiwgMjIwOiAiXFwiLAogICAgICAgICAgICAgICAgICAyMjE6ICJdIiwgMjIyOiAiJyIsIDYzMjc2OiAiUGFnZVVwIiwgNjMyNzc6ICJQYWdlRG93biIsIDYzMjc1OiAiRW5kIiwgNjMyNzM6ICJIb21lIiwKICAgICAgICAgICAgICAgICAgNjMyMzQ6ICJMZWZ0IiwgNjMyMzI6ICJVcCIsIDYzMjM1OiAiUmlnaHQiLCA2MzIzMzogIkRvd24iLCA2MzMwMjogIkluc2VydCIsIDYzMjcyOiAiRGVsZXRlIn07CiAgQ29kZU1pcnJvci5rZXlOYW1lcyA9IGtleU5hbWVzOwogIChmdW5jdGlvbigpIHsKICAgIC8vIE51bWJlciBrZXlzCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIGtleU5hbWVzW2kgKyA0OF0gPSBTdHJpbmcoaSk7CiAgICAvLyBBbHBoYWJldGljIGtleXMKICAgIGZvciAodmFyIGkgPSA2NTsgaSA8PSA5MDsgaSsrKSBrZXlOYW1lc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7CiAgICAvLyBGdW5jdGlvbiBrZXlzCiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsrKSBrZXlOYW1lc1tpICsgMTExXSA9IGtleU5hbWVzW2kgKyA2MzIzNV0gPSAiRiIgKyBpOwogIH0pKCk7CgogIHJldHVybiBDb2RlTWlycm9yOwp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/closetag.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqDQogKiBUYWctY2xvc2VyIGV4dGVuc2lvbiBmb3IgQ29kZU1pcnJvci4NCiAqDQogKiBUaGlzIGV4dGVuc2lvbiBhZGRzIGEgImNsb3NlVGFnIiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBrZXkgYmluZGluZ3MgdG8gDQogKiBpbnNlcnQgYSBtYXRjaGluZyBlbmQgdGFnIGFmdGVyIHRoZSAiPiIgY2hhcmFjdGVyIG9mIGEgc3RhcnQgdGFnIGhhcyBiZWVuIHR5cGVkLiAgSXQgY2FuDQogKiBhbHNvIGNvbXBsZXRlICI8LyIgaWYgYSBtYXRjaGluZyBzdGFydCB0YWcgaXMgZm91bmQuICBJdCB3aWxsIGNvcnJlY3RseSBpZ25vcmUgc2lnbmFsDQogKiBjaGFyYWN0ZXJzIGZvciBlbXB0eSB0YWdzLCBjb21tZW50cywgQ0RBVEEsIGV0Yy4NCiAqDQogKiBUaGUgZnVuY3Rpb24gZGVwZW5kcyBvbiBpbnRlcm5hbCBwYXJzZXIgc3RhdGUgdG8gaWRlbnRpZnkgdGFncy4gIEl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUNCiAqIGZvbGxvd2luZyBDb2RlTWlycm9yIG1vZGVzIGFuZCB3aWxsIGlnbm9yZSBhbGwgb3RoZXJzOg0KICogLSBodG1sbWl4ZWQNCiAqIC0geG1sDQogKg0KICogU2VlIGRlbW9zL2Nsb3NldGFnLmh0bWwgZm9yIGEgdXNhZ2UgZXhhbXBsZS4NCiAqIA0KICogQGF1dGhvciBOYXRoYW4gV2lsbGlhbXMgPG5hdGhhbkBubHdpbGxpYS5uZXQ+DQogKiBDb250cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIHRlcm1zIGFzIENvZGVNaXJyb3IuDQogKi8NCihmdW5jdGlvbigpIHsNCgkvKiogT3B0aW9uIHRoYXQgYWxsb3dzIHRhZyBjbG9zaW5nIGJlaGF2aW9yIHRvIGJlIHRvZ2dsZWQuICBEZWZhdWx0IGlzIHRydWUuICovDQoJQ29kZU1pcnJvci5kZWZhdWx0c1snY2xvc2VUYWdFbmFibGVkJ10gPSB0cnVlOw0KCQ0KCS8qKiBBcnJheSBvZiB0YWcgbmFtZXMgdG8gYWRkIGluZGVudGF0aW9uIGFmdGVyIHRoZSBzdGFydCB0YWcgZm9yLiAgRGVmYXVsdCBpcyB0aGUgbGlzdCBvZiBibG9jay1sZXZlbCBodG1sIHRhZ3MuICovDQoJQ29kZU1pcnJvci5kZWZhdWx0c1snY2xvc2VUYWdJbmRlbnQnXSA9IFsnYXBwbGV0JywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdidXR0b24nLCAnZGl2JywgJ2RsJywgJ2ZpZWxkc2V0JywgJ2Zvcm0nLCAnZnJhbWVzZXQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdodG1sJywgJ2lmcmFtZScsICdsYXllcicsICdsZWdlbmQnLCAnb2JqZWN0JywgJ29sJywgJ3AnLCAnc2VsZWN0JywgJ3RhYmxlJywgJ3VsJ107DQoNCgkvKioNCgkgKiBDYWxsIGR1cmluZyBrZXkgcHJvY2Vzc2luZyB0byBjbG9zZSB0YWdzLiAgSGFuZGxlcyB0aGUga2V5IGV2ZW50IGlmIHRoZSB0YWcgaXMgY2xvc2VkLCBvdGhlcndpc2UgdGhyb3dzIENvZGVNaXJyb3IuUGFzcy4NCgkgKiAtIGNtOiBUaGUgZWRpdG9yIGluc3RhbmNlLg0KCSAqIC0gY2g6IFRoZSBjaGFyYWN0ZXIgYmVpbmcgcHJvY2Vzc2VkLg0KCSAqIC0gaW5kZW50OiBPcHRpb25hbC4gIE9taXQgb3IgcGFzcyB0cnVlIHRvIHVzZSB0aGUgZGVmYXVsdCBpbmRlbnRhdGlvbiB0YWcgbGlzdCBkZWZpbmVkIGluIHRoZSAnY2xvc2VUYWdJbmRlbnQnIG9wdGlvbi4NCgkgKiAgIFBhc3MgZmFsc2UgdG8gZGlzYWJsZSBpbmRlbnRhdGlvbi4gIFBhc3MgYW4gYXJyYXkgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbGlzdCBvZiB0YWcgbmFtZXMuDQoJICovDQoJQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImNsb3NlVGFnIiwgZnVuY3Rpb24oY20sIGNoLCBpbmRlbnQpIHsNCgkJaWYgKCFjbS5nZXRPcHRpb24oJ2Nsb3NlVGFnRW5hYmxlZCcpKSB7DQoJCQl0aHJvdyBDb2RlTWlycm9yLlBhc3M7DQoJCX0NCgkJDQoJCXZhciBtb2RlID0gY20uZ2V0T3B0aW9uKCdtb2RlJyk7DQoJCQ0KCQlpZiAobW9kZSA9PSAndGV4dC9odG1sJykgew0KCQkNCgkJCS8qDQoJCQkgKiBSZWxldmFudCBzdHJ1Y3R1cmUgb2YgdG9rZW46DQoJCQkgKg0KCQkJICogaHRtbG1peGVkDQoJCQkgKiAJCWNsYXNzTmFtZQ0KCQkJICogCQlzdGF0ZQ0KCQkJICogCQkJaHRtbFN0YXRlDQoJCQkgKiAJCQkJdHlwZQ0KCQkJICogCQkJCWNvbnRleHQNCgkJCSAqIAkJCQkJdGFnTmFtZQ0KCQkJICogCQkJbW9kZQ0KCQkJICogDQoJCQkgKiB4bWwNCgkJCSAqIAkJY2xhc3NOYW1lDQoJCQkgKiAJCXN0YXRlDQoJCQkgKiAJCQl0YWdOYW1lDQoJCQkgKiAJCQl0eXBlDQoJCQkgKi8NCgkJDQoJCQl2YXIgcG9zID0gY20uZ2V0Q3Vyc29yKCk7DQoJCQl2YXIgdG9rID0gY20uZ2V0VG9rZW5BdChwb3MpOw0KCQkJdmFyIHN0YXRlID0gdG9rLnN0YXRlOw0KCQkJDQoJCQlpZiAoc3RhdGUubW9kZSAmJiBzdGF0ZS5tb2RlICE9ICdodG1sJykgew0KCQkJCXRocm93IENvZGVNaXJyb3IuUGFzczsgLy8gV2l0aCBodG1sbWl4ZWQsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgaHRtbCBzdWItbW9kZS4NCgkJCX0NCgkJCQ0KCQkJaWYgKGNoID09ICc+Jykgew0KCQkJCXZhciB0eXBlID0gc3RhdGUuaHRtbFN0YXRlID8gc3RhdGUuaHRtbFN0YXRlLnR5cGUgOiBzdGF0ZS50eXBlOyAvLyBodG1sbWl4ZWQgOiB4bWwNCgkJCQkNCgkJCQlpZiAodG9rLmNsYXNzTmFtZSA9PSAndGFnJyAmJiB0eXBlID09ICdjbG9zZVRhZycpIHsNCgkJCQkJdGhyb3cgQ29kZU1pcnJvci5QYXNzOyAvLyBEb24ndCBwcm9jZXNzIHRoZSAnPicgYXQgdGhlIGVuZCBvZiBhbiBlbmQtdGFnLg0KCQkJCX0NCgkJCQ0KCQkJCWNtLnJlcGxhY2VTZWxlY3Rpb24oJz4nKTsgLy8gTW9kZSBzdGF0ZSB3b24ndCB1cGRhdGUgdW50aWwgd2UgZmluaXNoIHRoZSB0YWcuDQoJCQkJcG9zID0ge2xpbmU6IHBvcy5saW5lLCBjaDogcG9zLmNoICsgMX07DQoJCQkJY20uc2V0Q3Vyc29yKHBvcyk7DQoJCQ0KCQkJCXRvayA9IGNtLmdldFRva2VuQXQoY20uZ2V0Q3Vyc29yKCkpOw0KCQkJCXN0YXRlID0gdG9rLnN0YXRlOw0KCQkJCXR5cGUgPSBzdGF0ZS5odG1sU3RhdGUgPyBzdGF0ZS5odG1sU3RhdGUudHlwZSA6IHN0YXRlLnR5cGU7IC8vIGh0bWxtaXhlZCA6IHhtbA0KDQoJCQkJaWYgKHRvay5jbGFzc05hbWUgPT0gJ3RhZycgJiYgdHlwZSAhPSAnc2VsZmNsb3NlVGFnJykgew0KCQkJCQl2YXIgdGFnTmFtZSA9IHN0YXRlLmh0bWxTdGF0ZSA/IHN0YXRlLmh0bWxTdGF0ZS5jb250ZXh0LnRhZ05hbWUgOiBzdGF0ZS50YWdOYW1lOyAvLyBodG1sbWl4ZWQgOiB4bWwNCgkJCQkJaWYgKHRhZ05hbWUubGVuZ3RoID4gMCkgew0KCQkJCQkJaW5zZXJ0RW5kVGFnKGNtLCBpbmRlbnQsIHBvcywgdGFnTmFtZSk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuOw0KCQkJCX0NCgkJCQkNCgkJCQkvLyBVbmRvIHRoZSAnPicgaW5zZXJ0IGFuZCBhbGxvdyBjbSB0byBoYW5kbGUgdGhlIGtleSBpbnN0ZWFkLg0KCQkJCWNtLnNldFNlbGVjdGlvbih7bGluZTogcG9zLmxpbmUsIGNoOiBwb3MuY2ggLSAxfSwgcG9zKTsNCgkJCQljbS5yZXBsYWNlU2VsZWN0aW9uKCIiKTsNCgkJCQ0KCQkJfSBlbHNlIGlmIChjaCA9PSAnLycpIHsNCgkJCQlpZiAodG9rLmNsYXNzTmFtZSA9PSAndGFnJyAmJiB0b2suc3RyaW5nID09ICc8Jykgew0KCQkJCQl2YXIgdGFnTmFtZSA9IHN0YXRlLmh0bWxTdGF0ZSA/IChzdGF0ZS5odG1sU3RhdGUuY29udGV4dCA/IHN0YXRlLmh0bWxTdGF0ZS5jb250ZXh0LnRhZ05hbWUgOiAnJykgOiBzdGF0ZS5jb250ZXh0LnRhZ05hbWU7IC8vIGh0bWxtaXhlZCA6IHhtbCAjIGV4dHJhIGh0bWxtaXplZCBjaGVjayBpcyBmb3IgJzwvJyBlZGdlIGNhc2UNCgkJCQkJaWYgKHRhZ05hbWUubGVuZ3RoID4gMCkgew0KCQkJCQkJY29tcGxldGVFbmRUYWcoY20sIHBvcywgdGFnTmFtZSk7DQoJCQkJCQlyZXR1cm47DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQ0KCQl9DQoJCQ0KCQl0aHJvdyBDb2RlTWlycm9yLlBhc3M7IC8vIEJ1YmJsZSBpZiBub3QgaGFuZGxlZA0KCX0pOw0KDQoJZnVuY3Rpb24gaW5zZXJ0RW5kVGFnKGNtLCBpbmRlbnQsIHBvcywgdGFnTmFtZSkgew0KCQlpZiAoc2hvdWxkSW5kZW50KGNtLCBpbmRlbnQsIHRhZ05hbWUpKSB7DQoJCQljbS5yZXBsYWNlU2VsZWN0aW9uKCdcblxuPC8nICsgdGFnTmFtZSArICc+JywgJ2VuZCcpOw0KCQkJY20uaW5kZW50TGluZShwb3MubGluZSArIDEpOw0KCQkJY20uaW5kZW50TGluZShwb3MubGluZSArIDIpOw0KCQkJY20uc2V0Q3Vyc29yKHtsaW5lOiBwb3MubGluZSArIDEsIGNoOiBjbS5nZXRMaW5lKHBvcy5saW5lICsgMSkubGVuZ3RofSk7DQoJCX0gZWxzZSB7DQoJCQljbS5yZXBsYWNlU2VsZWN0aW9uKCc8LycgKyB0YWdOYW1lICsgJz4nKTsNCgkJCWNtLnNldEN1cnNvcihwb3MpOw0KCQl9DQoJfQ0KCQ0KCWZ1bmN0aW9uIHNob3VsZEluZGVudChjbSwgaW5kZW50LCB0YWdOYW1lKSB7DQoJCWlmICh0eXBlb2YgaW5kZW50ID09ICd1bmRlZmluZWQnIHx8IGluZGVudCA9PSBudWxsIHx8IGluZGVudCA9PSB0cnVlKSB7DQoJCQlpbmRlbnQgPSBjbS5nZXRPcHRpb24oJ2Nsb3NlVGFnSW5kZW50Jyk7DQoJCX0NCgkJaWYgKCFpbmRlbnQpIHsNCgkJCWluZGVudCA9IFtdOw0KCQl9DQoJCXJldHVybiBpbmRleE9mKGluZGVudCwgdGFnTmFtZS50b0xvd2VyQ2FzZSgpKSAhPSAtMTsNCgl9DQoJDQoJLy8gQyZQIGZyb20gY29kZW1pcnJvci5qcy4uLndvdWxkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIHZpc2libGUgdG8gdXRpbGl0aWVzLg0KCWZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7DQoJCWlmIChjb2xsZWN0aW9uLmluZGV4T2YpIHJldHVybiBjb2xsZWN0aW9uLmluZGV4T2YoZWx0KTsNCgkJZm9yICh2YXIgaSA9IDAsIGUgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGU7ICsraSkNCgkJCWlmIChjb2xsZWN0aW9uW2ldID09IGVsdCkgcmV0dXJuIGk7DQoJCXJldHVybiAtMTsNCgl9DQoNCglmdW5jdGlvbiBjb21wbGV0ZUVuZFRhZyhjbSwgcG9zLCB0YWdOYW1lKSB7DQoJCWNtLnJlcGxhY2VTZWxlY3Rpb24oJy8nICsgdGFnTmFtZSArICc+Jyk7DQoJCWNtLnNldEN1cnNvcih7bGluZTogcG9zLmxpbmUsIGNoOiBwb3MuY2ggKyB0YWdOYW1lLmxlbmd0aCArIDIgfSk7DQoJfQ0KCQ0KfSkoKTsNCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/dialog.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3ItZGlhbG9nIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5Db2RlTWlycm9yLWRpYWxvZyA+IGRpdiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7CiAgei1pbmRleDogMTU7CiAgcGFkZGluZzogLjFlbSAuOGVtOwogIG92ZXJmbG93OiBoaWRkZW47CiAgY29sb3I6ICMzMzM7Cn0KCi5Db2RlTWlycm9yLWRpYWxvZyBpbnB1dCB7CiAgYm9yZGVyOiBub25lOwogIG91dGxpbmU6IG5vbmU7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgd2lkdGg6IDIwZW07CiAgY29sb3I6IGluaGVyaXQ7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/dialog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gT3BlbiBzaW1wbGUgZGlhbG9ncyBvbiB0b3Agb2YgYW4gZWRpdG9yLiBSZWxpZXMgb24gZGlhbG9nLmNzcy4KCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiBkaWFsb2dEaXYoY20sIHRlbXBsYXRlKSB7CiAgICB2YXIgd3JhcCA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7CiAgICB2YXIgZGlhbG9nID0gd3JhcC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksIHdyYXAuZmlyc3RDaGlsZCk7CiAgICBkaWFsb2cuY2xhc3NOYW1lID0gIkNvZGVNaXJyb3ItZGlhbG9nIjsKICAgIGRpYWxvZy5pbm5lckhUTUwgPSAnPGRpdj4nICsgdGVtcGxhdGUgKyAnPC9kaXY+JzsKICAgIHJldHVybiBkaWFsb2c7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkRpYWxvZyIsIGZ1bmN0aW9uKHRlbXBsYXRlLCBjYWxsYmFjaykgewogICAgdmFyIGRpYWxvZyA9IGRpYWxvZ0Rpdih0aGlzLCB0ZW1wbGF0ZSk7CiAgICB2YXIgY2xvc2VkID0gZmFsc2UsIG1lID0gdGhpczsKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgIGRpYWxvZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7CiAgICB9CiAgICB2YXIgaW5wID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdOwogICAgaWYgKGlucCkgewogICAgICBDb2RlTWlycm9yLmNvbm5lY3QoaW5wLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzIHx8IGUua2V5Q29kZSA9PSAyNykgewogICAgICAgICAgQ29kZU1pcnJvci5lX3N0b3AoZSk7CiAgICAgICAgICBjbG9zZSgpOwogICAgICAgICAgbWUuZm9jdXMoKTsKICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIGNhbGxiYWNrKGlucC52YWx1ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaW5wLmZvY3VzKCk7CiAgICAgIENvZGVNaXJyb3IuY29ubmVjdChpbnAsICJibHVyIiwgY2xvc2UpOwogICAgfQogICAgcmV0dXJuIGNsb3NlOwogIH0pOwoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkNvbmZpcm0iLCBmdW5jdGlvbih0ZW1wbGF0ZSwgY2FsbGJhY2tzKSB7CiAgICB2YXIgZGlhbG9nID0gZGlhbG9nRGl2KHRoaXMsIHRlbXBsYXRlKTsKICAgIHZhciBidXR0b25zID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKTsKICAgIHZhciBjbG9zZWQgPSBmYWxzZSwgbWUgPSB0aGlzLCBibHVycmluZyA9IDE7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGNsb3NlZCkgcmV0dXJuOwogICAgICBjbG9zZWQgPSB0cnVlOwogICAgICBkaWFsb2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaWFsb2cpOwogICAgICBtZS5mb2N1cygpOwogICAgfQogICAgYnV0dG9uc1swXS5mb2N1cygpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBiID0gYnV0dG9uc1tpXTsKICAgICAgKGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICAgICAgQ29kZU1pcnJvci5jb25uZWN0KGIsICJjbGljayIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKG1lKTsKICAgICAgICB9KTsKICAgICAgfSkoY2FsbGJhY2tzW2ldKTsKICAgICAgQ29kZU1pcnJvci5jb25uZWN0KGIsICJibHVyIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgLS1ibHVycmluZzsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBpZiAoYmx1cnJpbmcgPD0gMCkgY2xvc2UoKTsgfSwgMjAwKTsKICAgICAgfSk7CiAgICAgIENvZGVNaXJyb3IuY29ubmVjdChiLCAiZm9jdXMiLCBmdW5jdGlvbigpIHsgKytibHVycmluZzsgfSk7CiAgICB9CiAgfSk7Cn0pKCk7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/foldcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gdGhlIHRhZ1JhbmdlRmluZGVyIGZ1bmN0aW9uIGlzCi8vICAgQ29weXJpZ2h0IChDKSAyMDExIGJ5IERhbmllbCBHbGF6bWFuIDxkYW5pZWxAZ2xhem1hbi5vcmc+Ci8vIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoLi4vLi4vTElDRU5TRSkgbGlrZSB0aGUgcmVzdCBvZiBDb2RlTWlycm9yCkNvZGVNaXJyb3IudGFnUmFuZ2VGaW5kZXIgPSBmdW5jdGlvbihjbSwgbGluZSwgaGlkZUVuZCkgewogIHZhciBuYW1lU3RhcnRDaGFyID0gIkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQiOwogIHZhciBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyAiXC1cOlwuMC05XFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MCI7CiAgdmFyIHhtbE5BTUVSZWdFeHAgPSBuZXcgUmVnRXhwKCJeWyIgKyBuYW1lU3RhcnRDaGFyICsgIl1bIiArIG5hbWVDaGFyICsgIl0qIik7CgogIHZhciBsaW5lVGV4dCA9IGNtLmdldExpbmUobGluZSk7CiAgdmFyIGZvdW5kID0gZmFsc2U7CiAgdmFyIHRhZyA9IG51bGw7CiAgdmFyIHBvcyA9IDA7CiAgd2hpbGUgKCFmb3VuZCkgewogICAgcG9zID0gbGluZVRleHQuaW5kZXhPZigiPCIsIHBvcyk7CiAgICBpZiAoLTEgPT0gcG9zKSAvLyBubyB0YWcgb24gbGluZQogICAgICByZXR1cm47CiAgICBpZiAocG9zICsgMSA8IGxpbmVUZXh0Lmxlbmd0aCAmJiBsaW5lVGV4dFtwb3MgKyAxXSA9PSAiLyIpIHsgLy8gY2xvc2luZyB0YWcKICAgICAgcG9zKys7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgLy8gb2sgd2Ugd2VlbSB0byBoYXZlIGEgc3RhcnQgdGFnCiAgICBpZiAoIWxpbmVUZXh0LnN1YnN0cihwb3MgKyAxKS5tYXRjaCh4bWxOQU1FUmVnRXhwKSkgeyAvLyBub3QgYSB0YWcgbmFtZS4uLgogICAgICBwb3MrKzsKICAgICAgY29udGludWU7CiAgICB9CiAgICB2YXIgZ3RQb3MgPSBsaW5lVGV4dC5pbmRleE9mKCI+IiwgcG9zICsgMSk7CiAgICBpZiAoLTEgPT0gZ3RQb3MpIHsgLy8gZW5kIG9mIHN0YXJ0IHRhZyBub3QgaW4gbGluZQogICAgICB2YXIgbCA9IGxpbmUgKyAxOwogICAgICB2YXIgZm91bmRHdCA9IGZhbHNlOwogICAgICB2YXIgbGFzdExpbmUgPSBjbS5saW5lQ291bnQoKTsKICAgICAgd2hpbGUgKGwgPCBsYXN0TGluZSAmJiAhZm91bmRHdCkgewogICAgICAgIHZhciBsdCA9IGNtLmdldExpbmUobCk7CiAgICAgICAgdmFyIGd0ID0gbHQuaW5kZXhPZigiPiIpOwogICAgICAgIGlmICgtMSAhPSBndCkgeyAvLyBmb3VuZCBhID4KICAgICAgICAgIGZvdW5kR3QgPSB0cnVlOwogICAgICAgICAgdmFyIHNsYXNoID0gbHQubGFzdEluZGV4T2YoIi8iLCBndCk7CiAgICAgICAgICBpZiAoLTEgIT0gc2xhc2ggJiYgc2xhc2ggPCBndCkgewogICAgICAgICAgICB2YXIgc3RyID0gbGluZVRleHQuc3Vic3RyKHNsYXNoLCBndCAtIHNsYXNoICsgMSk7CiAgICAgICAgICAgIGlmICghc3RyLm1hdGNoKCAvXC9ccypcPi8gKSkgeyAvLyB5ZXAsIHRoYXQncyB0aGUgZW5kIG9mIGVtcHR5IHRhZwogICAgICAgICAgICAgIGlmIChoaWRlRW5kID09PSB0cnVlKSBsKys7CiAgICAgICAgICAgICAgcmV0dXJuIGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbCsrOwogICAgICB9CiAgICAgIGZvdW5kID0gdHJ1ZTsKICAgIH0KICAgIGVsc2UgewogICAgICB2YXIgc2xhc2hQb3MgPSBsaW5lVGV4dC5sYXN0SW5kZXhPZigiLyIsIGd0UG9zKTsKICAgICAgaWYgKC0xID09IHNsYXNoUG9zKSB7IC8vIGNhbm5vdCBiZSBlbXB0eSB0YWcKICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgLy8gZG9uJ3QgY29udGludWUKICAgICAgfQogICAgICBlbHNlIHsgLy8gZW1wdHkgdGFnPwogICAgICAgIC8vIGNoZWNrIGlmIHJlYWxseSBlbXB0eSB0YWcKICAgICAgICB2YXIgc3RyID0gbGluZVRleHQuc3Vic3RyKHNsYXNoUG9zLCBndFBvcyAtIHNsYXNoUG9zICsgMSk7CiAgICAgICAgaWYgKCFzdHIubWF0Y2goIC9cL1xzKlw+LyApKSB7IC8vIGZpbmFsbHkgbm90IGVtcHR5CiAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAvLyBkb24ndCBjb250aW51ZQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kKSB7CiAgICAgIHZhciBzdWJMaW5lID0gbGluZVRleHQuc3Vic3RyKHBvcyArIDEpOwogICAgICB0YWcgPSBzdWJMaW5lLm1hdGNoKHhtbE5BTUVSZWdFeHApOwogICAgICBpZiAodGFnKSB7CiAgICAgICAgLy8gd2UgaGF2ZSBhbiBlbGVtZW50IG5hbWUsIHdvb29ob29vICEKICAgICAgICB0YWcgPSB0YWdbMF07CiAgICAgICAgLy8gZG8gd2UgaGF2ZSB0aGUgY2xvc2UgdGFnIG9uIHNhbWUgbGluZSA/Pz8KICAgICAgICBpZiAoLTEgIT0gbGluZVRleHQuaW5kZXhPZigiPC8iICsgdGFnICsgIj4iLCBwb3MpKSAvLyB5ZXAKICAgICAgICB7CiAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyB3ZSBkb24ndCwgc28gd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLgogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgfQogICAgaWYgKCFmb3VuZCkKICAgICAgcG9zKys7CiAgfQoKICBpZiAoZm91bmQpIHsKICAgIHZhciBzdGFydFRhZyA9ICIoXFw8XFwvIiArIHRhZyArICJcXD4pfChcXDwiICsgdGFnICsgIlxcPil8KFxcPCIgKyB0YWcgKyAiXFxzKXwoXFw8IiArIHRhZyArICIkKSI7CiAgICB2YXIgc3RhcnRUYWdSZWdFeHAgPSBuZXcgUmVnRXhwKHN0YXJ0VGFnLCAiZyIpOwogICAgdmFyIGVuZFRhZyA9ICI8LyIgKyB0YWcgKyAiPiI7CiAgICB2YXIgZGVwdGggPSAxOwogICAgdmFyIGwgPSBsaW5lICsgMTsKICAgIHZhciBsYXN0TGluZSA9IGNtLmxpbmVDb3VudCgpOwogICAgd2hpbGUgKGwgPCBsYXN0TGluZSkgewogICAgICBsaW5lVGV4dCA9IGNtLmdldExpbmUobCk7CiAgICAgIHZhciBtYXRjaCA9IGxpbmVUZXh0Lm1hdGNoKHN0YXJ0VGFnUmVnRXhwKTsKICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKG1hdGNoW2ldID09IGVuZFRhZykKICAgICAgICAgICAgZGVwdGgtLTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZGVwdGgrKzsKICAgICAgICAgIGlmICghZGVwdGgpIHsKICAgICAgICAgICAgaWYgKGhpZGVFbmQgPT09IHRydWUpIGwrKzsKICAgICAgICAgICAgcmV0dXJuIGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGwrKzsKICAgIH0KICAgIHJldHVybjsKICB9Cn07CgpDb2RlTWlycm9yLmJyYWNlUmFuZ2VGaW5kZXIgPSBmdW5jdGlvbihjbSwgbGluZSwgaGlkZUVuZCkgewogIHZhciBsaW5lVGV4dCA9IGNtLmdldExpbmUobGluZSksIGF0ID0gbGluZVRleHQubGVuZ3RoLCBzdGFydENoYXIsIHRva2VuVHlwZTsKICBmb3IgKDs7KSB7CiAgICB2YXIgZm91bmQgPSBsaW5lVGV4dC5sYXN0SW5kZXhPZigieyIsIGF0KTsKICAgIGlmIChmb3VuZCA8IDApIGJyZWFrOwogICAgdG9rZW5UeXBlID0gY20uZ2V0VG9rZW5BdCh7bGluZTogbGluZSwgY2g6IGZvdW5kfSkuY2xhc3NOYW1lOwogICAgaWYgKCEvXihjb21tZW50fHN0cmluZykvLnRlc3QodG9rZW5UeXBlKSkgeyBzdGFydENoYXIgPSBmb3VuZDsgYnJlYWs7IH0KICAgIGF0ID0gZm91bmQgLSAxOwogIH0KICBpZiAoc3RhcnRDaGFyID09IG51bGwgfHwgbGluZVRleHQubGFzdEluZGV4T2YoIn0iKSA+IHN0YXJ0Q2hhcikgcmV0dXJuOwogIHZhciBjb3VudCA9IDEsIGxhc3RMaW5lID0gY20ubGluZUNvdW50KCksIGVuZDsKICBvdXRlcjogZm9yICh2YXIgaSA9IGxpbmUgKyAxOyBpIDwgbGFzdExpbmU7ICsraSkgewogICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGkpLCBwb3MgPSAwOwogICAgZm9yICg7OykgewogICAgICB2YXIgbmV4dE9wZW4gPSB0ZXh0LmluZGV4T2YoInsiLCBwb3MpLCBuZXh0Q2xvc2UgPSB0ZXh0LmluZGV4T2YoIn0iLCBwb3MpOwogICAgICBpZiAobmV4dE9wZW4gPCAwKSBuZXh0T3BlbiA9IHRleHQubGVuZ3RoOwogICAgICBpZiAobmV4dENsb3NlIDwgMCkgbmV4dENsb3NlID0gdGV4dC5sZW5ndGg7CiAgICAgIHBvcyA9IE1hdGgubWluKG5leHRPcGVuLCBuZXh0Q2xvc2UpOwogICAgICBpZiAocG9zID09IHRleHQubGVuZ3RoKSBicmVhazsKICAgICAgaWYgKGNtLmdldFRva2VuQXQoe2xpbmU6IGksIGNoOiBwb3MgKyAxfSkuY2xhc3NOYW1lID09IHRva2VuVHlwZSkgewogICAgICAgIGlmIChwb3MgPT0gbmV4dE9wZW4pICsrY291bnQ7CiAgICAgICAgZWxzZSBpZiAoIS0tY291bnQpIHsgZW5kID0gaTsgYnJlYWsgb3V0ZXI7IH0KICAgICAgfQogICAgICArK3BvczsKICAgIH0KICB9CiAgaWYgKGVuZCA9PSBudWxsIHx8IGVuZCA9PSBsaW5lICsgMSkgcmV0dXJuOwogIGlmIChoaWRlRW5kID09PSB0cnVlKSBlbmQrKzsKICByZXR1cm4gZW5kOwp9OwoKQ29kZU1pcnJvci5pbmRlbnRSYW5nZUZpbmRlciA9IGZ1bmN0aW9uKGNtLCBsaW5lKSB7CiAgdmFyIHRhYlNpemUgPSBjbS5nZXRPcHRpb24oInRhYlNpemUiKTsKICB2YXIgbXlJbmRlbnQgPSBjbS5nZXRMaW5lSGFuZGxlKGxpbmUpLmluZGVudGF0aW9uKHRhYlNpemUpLCBsYXN0OwogIGZvciAodmFyIGkgPSBsaW5lICsgMSwgZW5kID0gY20ubGluZUNvdW50KCk7IGkgPCBlbmQ7ICsraSkgewogICAgdmFyIGhhbmRsZSA9IGNtLmdldExpbmVIYW5kbGUoaSk7CiAgICBpZiAoIS9eXHMqJC8udGVzdChoYW5kbGUudGV4dCkpIHsKICAgICAgaWYgKGhhbmRsZS5pbmRlbnRhdGlvbih0YWJTaXplKSA8PSBteUluZGVudCkgYnJlYWs7CiAgICAgIGxhc3QgPSBpOwogICAgfQogIH0KICBpZiAoIWxhc3QpIHJldHVybiBudWxsOwogIHJldHVybiBsYXN0ICsgMTsKfTsKCkNvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uID0gZnVuY3Rpb24ocmFuZ2VGaW5kZXIsIG1hcmtUZXh0LCBoaWRlRW5kKSB7CiAgdmFyIGZvbGRlZCA9IFtdOwogIGlmIChtYXJrVGV4dCA9PSBudWxsKSBtYXJrVGV4dCA9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDJweDsgY29sb3I6IzYwMCI+JiN4MjViYzs8L2Rpdj4lTiUnOwoKICBmdW5jdGlvbiBpc0ZvbGRlZChjbSwgbikgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkZWQubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIHN0YXJ0ID0gY20ubGluZUluZm8oZm9sZGVkW2ldLnN0YXJ0KTsKICAgICAgaWYgKCFzdGFydCkgZm9sZGVkLnNwbGljZShpLS0sIDEpOwogICAgICBlbHNlIGlmIChzdGFydC5saW5lID09IG4pIHJldHVybiB7cG9zOiBpLCByZWdpb246IGZvbGRlZFtpXX07CiAgICB9CiAgfQoKICBmdW5jdGlvbiBleHBhbmQoY20sIHJlZ2lvbikgewogICAgY20uY2xlYXJNYXJrZXIocmVnaW9uLnN0YXJ0KTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVnaW9uLmhpZGRlbi5sZW5ndGg7ICsraSkKICAgICAgY20uc2hvd0xpbmUocmVnaW9uLmhpZGRlbltpXSk7CiAgfQoKICByZXR1cm4gZnVuY3Rpb24oY20sIGxpbmUpIHsKICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgdmFyIGtub3duID0gaXNGb2xkZWQoY20sIGxpbmUpOwogICAgICBpZiAoa25vd24pIHsKICAgICAgICBmb2xkZWQuc3BsaWNlKGtub3duLnBvcywgMSk7CiAgICAgICAgZXhwYW5kKGNtLCBrbm93bi5yZWdpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBlbmQgPSByYW5nZUZpbmRlcihjbSwgbGluZSwgaGlkZUVuZCk7CiAgICAgICAgaWYgKGVuZCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgdmFyIGhpZGRlbiA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSBsaW5lICsgMTsgaSA8IGVuZDsgKytpKSB7CiAgICAgICAgICB2YXIgaGFuZGxlID0gY20uaGlkZUxpbmUoaSk7CiAgICAgICAgICBpZiAoaGFuZGxlKSBoaWRkZW4ucHVzaChoYW5kbGUpOwogICAgICAgIH0KICAgICAgICB2YXIgZmlyc3QgPSBjbS5zZXRNYXJrZXIobGluZSwgbWFya1RleHQpOwogICAgICAgIHZhciByZWdpb24gPSB7c3RhcnQ6IGZpcnN0LCBoaWRkZW46IGhpZGRlbn07CiAgICAgICAgY20ub25EZWxldGVMaW5lKGZpcnN0LCBmdW5jdGlvbigpIHsgZXhwYW5kKGNtLCByZWdpb24pOyB9KTsKICAgICAgICBmb2xkZWQucHVzaChyZWdpb24pOwogICAgICB9CiAgICB9KTsKICB9Owp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/formatting.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gPT09PT09PT09PT09PT0gRm9ybWF0dGluZyBleHRlbnNpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gQSBjb21tb24gc3RvcmFnZSBmb3IgYWxsIG1vZGUtc3BlY2lmaWMgZm9ybWF0dGluZyBmZWF0dXJlcwppZiAoIUNvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMpIENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMgPSB7fTsKCi8vIFJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgZWRpdG9yJ3MgY3VycmVudCBtb2RlCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJnZXRNb2RlRXh0IiwgZnVuY3Rpb24gKCkgewogIHZhciBtbmFtZSA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUodGhpcy5nZXRPcHRpb24oIm1vZGUiKSkubmFtZTsKICB2YXIgZXh0ID0gQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1ttbmFtZV07CiAgaWYgKCFleHQpIHRocm93IG5ldyBFcnJvcigiTm8gZXh0ZW5zaW9ucyBmb3VuZCBmb3IgbW9kZSAiICsgbW5hbWUpOwogIHJldHVybiBleHQ7Cn0pOwoKLy8gSWYgdGhlIGN1cnJlbnQgbW9kZSBpcyAnaHRtbG1peGVkJywgcmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIGEgbW9kZSBsb2NhdGVkIGF0Ci8vIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gKGNhbiBiZSBodG1sbWl4ZWQsIGNzcyBvciBqYXZhc2NyaXB0KS4gT3RoZXJ3aXNlLCBzaW1wbHkKLy8gcmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBlZGl0b3IncyBjdXJyZW50IG1vZGUuCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJnZXRNb2RlRXh0QXRQb3MiLCBmdW5jdGlvbiAocG9zKSB7CiAgdmFyIHRva2VuID0gdGhpcy5nZXRUb2tlbkF0KHBvcyk7CiAgaWYgKHRva2VuICYmIHRva2VuLnN0YXRlICYmIHRva2VuLnN0YXRlLm1vZGUpCiAgICByZXR1cm4gQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1t0b2tlbi5zdGF0ZS5tb2RlID09ICJodG1sIiA/ICJodG1sbWl4ZWQiIDogdG9rZW4uc3RhdGUubW9kZV07CiAgZWxzZQogICAgcmV0dXJuIHRoaXMuZ2V0TW9kZUV4dCgpOwp9KTsKCi8vIENvbW1lbnQvdW5jb21tZW50IHRoZSBzcGVjaWZpZWQgcmFuZ2UKQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImNvbW1lbnRSYW5nZSIsIGZ1bmN0aW9uIChpc0NvbW1lbnQsIGZyb20sIHRvKSB7CiAgdmFyIGN1ck1vZGUgPSB0aGlzLmdldE1vZGVFeHRBdFBvcyh0aGlzLmdldEN1cnNvcigpKTsKICBpZiAoaXNDb21tZW50KSB7IC8vIENvbW1lbnQgcmFuZ2UKICAgIHZhciBjb21tZW50ZWRUZXh0ID0gdGhpcy5nZXRSYW5nZShmcm9tLCB0byk7CiAgICB0aGlzLnJlcGxhY2VSYW5nZShjdXJNb2RlLmNvbW1lbnRTdGFydCArIHRoaXMuZ2V0UmFuZ2UoZnJvbSwgdG8pICsgY3VyTW9kZS5jb21tZW50RW5kCiAgICAgICwgZnJvbSwgdG8pOwogICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGZyb20uY2ggPT0gdG8uY2gpIHsgLy8gQW4gZW1wdHkgY29tbWVudCBpbnNlcnRlZCAtIHB1dCBjdXJzb3IgaW5zaWRlCiAgICAgIHRoaXMuc2V0Q3Vyc29yKGZyb20ubGluZSwgZnJvbS5jaCArIGN1ck1vZGUuY29tbWVudFN0YXJ0Lmxlbmd0aCk7CiAgICB9CiAgfQogIGVsc2UgeyAvLyBVbmNvbW1lbnQgcmFuZ2UKICAgIHZhciBzZWxUZXh0ID0gdGhpcy5nZXRSYW5nZShmcm9tLCB0byk7CiAgICB2YXIgc3RhcnRJbmRleCA9IHNlbFRleHQuaW5kZXhPZihjdXJNb2RlLmNvbW1lbnRTdGFydCk7CiAgICB2YXIgZW5kSW5kZXggPSBzZWxUZXh0Lmxhc3RJbmRleE9mKGN1ck1vZGUuY29tbWVudEVuZCk7CiAgICBpZiAoc3RhcnRJbmRleCA+IC0xICYmIGVuZEluZGV4ID4gLTEgJiYgZW5kSW5kZXggPiBzdGFydEluZGV4KSB7CiAgICAgIC8vIFRha2Ugc3RyaW5nIHRpbGwgY29tbWVudCBzdGFydAogICAgICBzZWxUZXh0ID0gc2VsVGV4dC5zdWJzdHIoMCwgc3RhcnRJbmRleCkKICAgICAgLy8gRnJvbSBjb21tZW50IHN0YXJ0IHRpbGwgY29tbWVudCBlbmQKICAgICAgICArIHNlbFRleHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXggKyBjdXJNb2RlLmNvbW1lbnRTdGFydC5sZW5ndGgsIGVuZEluZGV4KQogICAgICAvLyBGcm9tIGNvbW1lbnQgZW5kIHRpbGwgc3RyaW5nIGVuZAogICAgICAgICsgc2VsVGV4dC5zdWJzdHIoZW5kSW5kZXggKyBjdXJNb2RlLmNvbW1lbnRFbmQubGVuZ3RoKTsKICAgIH0KICAgIHRoaXMucmVwbGFjZVJhbmdlKHNlbFRleHQsIGZyb20sIHRvKTsKICB9Cn0pOwoKLy8gQXBwbGllcyBhdXRvbWF0aWMgbW9kZS1hd2FyZSBpbmRlbnRhdGlvbiB0byB0aGUgc3BlY2lmaWVkIHJhbmdlCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJhdXRvSW5kZW50UmFuZ2UiLCBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKICB2YXIgY21JbnN0YW5jZSA9IHRoaXM7CiAgdGhpcy5vcGVyYXRpb24oZnVuY3Rpb24gKCkgewogICAgZm9yICh2YXIgaSA9IGZyb20ubGluZTsgaSA8PSB0by5saW5lOyBpKyspIHsKICAgICAgY21JbnN0YW5jZS5pbmRlbnRMaW5lKGksICJzbWFydCIpOwogICAgfQogIH0pOwp9KTsKCi8vIEFwcGxpZXMgYXV0b21hdGljIGZvcm1hdHRpbmcgdG8gdGhlIHNwZWNpZmllZCByYW5nZQpDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiYXV0b0Zvcm1hdFJhbmdlIiwgZnVuY3Rpb24gKGZyb20sIHRvKSB7CiAgdmFyIGFic1N0YXJ0ID0gdGhpcy5pbmRleEZyb21Qb3MoZnJvbSk7CiAgdmFyIGFic0VuZCA9IHRoaXMuaW5kZXhGcm9tUG9zKHRvKTsKICAvLyBJbnNlcnQgYWRkaXRpb25hbCBsaW5lIGJyZWFrcyB3aGVyZSBuZWNlc3NhcnkgYWNjb3JkaW5nIHRvIHRoZQogIC8vIG1vZGUncyBzeW50YXgKICB2YXIgcmVzID0gdGhpcy5nZXRNb2RlRXh0KCkuYXV0b0Zvcm1hdExpbmVCcmVha3ModGhpcy5nZXRWYWx1ZSgpLCBhYnNTdGFydCwgYWJzRW5kKTsKICB2YXIgY21JbnN0YW5jZSA9IHRoaXM7CgogIC8vIFJlcGxhY2UgYW5kIGF1dG8taW5kZW50IHRoZSByYW5nZQogIHRoaXMub3BlcmF0aW9uKGZ1bmN0aW9uICgpIHsKICAgIGNtSW5zdGFuY2UucmVwbGFjZVJhbmdlKHJlcywgZnJvbSwgdG8pOwogICAgdmFyIHN0YXJ0TGluZSA9IGNtSW5zdGFuY2UucG9zRnJvbUluZGV4KGFic1N0YXJ0KS5saW5lOwogICAgdmFyIGVuZExpbmUgPSBjbUluc3RhbmNlLnBvc0Zyb21JbmRleChhYnNTdGFydCArIHJlcy5sZW5ndGgpLmxpbmU7CiAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDw9IGVuZExpbmU7IGkrKykgewogICAgICBjbUluc3RhbmNlLmluZGVudExpbmUoaSwgInNtYXJ0Iik7CiAgICB9CiAgfSk7Cn0pOwoKLy8gRGVmaW5lIGV4dGVuc2lvbnMgZm9yIGEgZmV3IG1vZGVzCgpDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zWyJjc3MiXSA9IHsKICBjb21tZW50U3RhcnQ6ICIvKiIsCiAgY29tbWVudEVuZDogIiovIiwKICB3b3JkV3JhcENoYXJzOiBbIjsiLCAiXFx7IiwgIlxcfSJdLAogIGF1dG9Gb3JtYXRMaW5lQnJlYWtzOiBmdW5jdGlvbiAodGV4dCwgc3RhcnRQb3MsIGVuZFBvcykgewogICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MpOwogICAgcmV0dXJuIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKCIoO3xcXHt8XFx9KShbXlxyXG5dKSIsICJnIiksICIkMVxuJDIiKTsKICB9Cn07CgpDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zWyJqYXZhc2NyaXB0Il0gPSB7CiAgY29tbWVudFN0YXJ0OiAiLyoiLAogIGNvbW1lbnRFbmQ6ICIqLyIsCiAgd29yZFdyYXBDaGFyczogWyI7IiwgIlxceyIsICJcXH0iXSwKCiAgZ2V0Tm9uQnJlYWthYmxlQmxvY2tzOiBmdW5jdGlvbiAodGV4dCkgewogICAgdmFyIG5vbkJyZWFrYWJsZVJlZ2V4ZXMgPSBbCiAgICAgICAgbmV3IFJlZ0V4cCgiZm9yXFxzKj9cXCgoW1xcc1xcU10qPylcXCkiKSwKICAgICAgICBuZXcgUmVnRXhwKCInKFtcXHNcXFNdKj8pKCd8JCkiKSwKICAgICAgICBuZXcgUmVnRXhwKCJcIihbXFxzXFxTXSo/KShcInwkKSIpLAogICAgICAgIG5ldyBSZWdFeHAoIi8vLiooW1xyXG5dfCQpIikKICAgICAgXTsKICAgIHZhciBub25CcmVha2FibGVCbG9ja3MgPSBuZXcgQXJyYXkoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uQnJlYWthYmxlUmVnZXhlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY3VyUG9zID0gMDsKICAgICAgd2hpbGUgKGN1clBvcyA8IHRleHQubGVuZ3RoKSB7CiAgICAgICAgdmFyIG0gPSB0ZXh0LnN1YnN0cihjdXJQb3MpLm1hdGNoKG5vbkJyZWFrYWJsZVJlZ2V4ZXNbaV0pOwogICAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICAgIG5vbkJyZWFrYWJsZUJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgc3RhcnQ6IGN1clBvcyArIG0uaW5kZXgsCiAgICAgICAgICAgIGVuZDogY3VyUG9zICsgbS5pbmRleCArIG1bMF0ubGVuZ3RoCiAgICAgICAgICB9KTsKICAgICAgICAgIGN1clBvcyArPSBtLmluZGV4ICsgTWF0aC5tYXgoMSwgbVswXS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsgLy8gTm8gbW9yZSBtYXRjaGVzCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIG5vbkJyZWFrYWJsZUJsb2Nrcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgIHJldHVybiBhLnN0YXJ0IC0gYi5zdGFydDsKICAgIH0pOwoKICAgIHJldHVybiBub25CcmVha2FibGVCbG9ja3M7CiAgfSwKCiAgYXV0b0Zvcm1hdExpbmVCcmVha3M6IGZ1bmN0aW9uICh0ZXh0LCBzdGFydFBvcywgZW5kUG9zKSB7CiAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyk7CiAgICB2YXIgY3VyUG9zID0gMDsKICAgIHZhciByZUxpbmVzU3BsaXR0ZXIgPSBuZXcgUmVnRXhwKCIoO3xcXHt8XFx9KShbXlxyXG5dKSIsICJnIik7CiAgICB2YXIgbm9uQnJlYWthYmxlQmxvY2tzID0gdGhpcy5nZXROb25CcmVha2FibGVCbG9ja3ModGV4dCk7CiAgICBpZiAobm9uQnJlYWthYmxlQmxvY2tzICE9IG51bGwpIHsKICAgICAgdmFyIHJlcyA9ICIiOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkJyZWFrYWJsZUJsb2Nrcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChub25CcmVha2FibGVCbG9ja3NbaV0uc3RhcnQgPiBjdXJQb3MpIHsgLy8gQnJlYWsgbGluZXMgdGlsbCB0aGUgYmxvY2sKICAgICAgICAgIHJlcyArPSB0ZXh0LnN1YnN0cmluZyhjdXJQb3MsIG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5zdGFydCkucmVwbGFjZShyZUxpbmVzU3BsaXR0ZXIsICIkMVxuJDIiKTsKICAgICAgICAgIGN1clBvcyA9IG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5zdGFydDsKICAgICAgICB9CiAgICAgICAgaWYgKG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5zdGFydCA8PSBjdXJQb3MKICAgICAgICAgICYmIG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5lbmQgPj0gY3VyUG9zKSB7IC8vIFNraXAgbm9uLWJyZWFrYWJsZSBibG9jawogICAgICAgICAgcmVzICs9IHRleHQuc3Vic3RyaW5nKGN1clBvcywgbm9uQnJlYWthYmxlQmxvY2tzW2ldLmVuZCk7CiAgICAgICAgICBjdXJQb3MgPSBub25CcmVha2FibGVCbG9ja3NbaV0uZW5kOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY3VyUG9zIDwgdGV4dC5sZW5ndGggLSAxKSB7CiAgICAgICAgcmVzICs9IHRleHQuc3Vic3RyKGN1clBvcykucmVwbGFjZShyZUxpbmVzU3BsaXR0ZXIsICIkMVxuJDIiKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzOwogICAgfQogICAgZWxzZSB7CiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmVMaW5lc1NwbGl0dGVyLCAiJDFcbiQyIik7CiAgICB9CiAgfQp9OwoKQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1sieG1sIl0gPSB7CiAgY29tbWVudFN0YXJ0OiAiPCEtLSIsCiAgY29tbWVudEVuZDogIi0tPiIsCiAgd29yZFdyYXBDaGFyczogWyI+Il0sCgogIGF1dG9Gb3JtYXRMaW5lQnJlYWtzOiBmdW5jdGlvbiAodGV4dCwgc3RhcnRQb3MsIGVuZFBvcykgewogICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MpOwogICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgiXG4iKTsKICAgIHZhciByZVByb2Nlc3NlZFBvcnRpb24gPSBuZXcgUmVnRXhwKCIoXlxccyo/PHxeW148XSo/KSguKykoPlxccyo/JHxbXj5dKj8kKSIpOwogICAgdmFyIHJlT3BlbkJyYWNrZXRzID0gbmV3IFJlZ0V4cCgiPCIsICJnIik7CiAgICB2YXIgcmVDbG9zZUJyYWNrZXRzID0gbmV3IFJlZ0V4cCgiKD4pKFteXHJcbl0pIiwgImciKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIG1Ub1Byb2Nlc3MgPSBsaW5lc1tpXS5tYXRjaChyZVByb2Nlc3NlZFBvcnRpb24pOwogICAgICBpZiAobVRvUHJvY2VzcyAhPSBudWxsICYmIG1Ub1Byb2Nlc3MubGVuZ3RoID4gMykgeyAvLyBUaGUgbGluZSBzdGFydHMgd2l0aCB3aGl0ZXNwYWNlcyBhbmQgZW5kcyB3aXRoIHdoaXRlc3BhY2VzCiAgICAgICAgbGluZXNbaV0gPSBtVG9Qcm9jZXNzWzFdCiAgICAgICAgICAgICsgbVRvUHJvY2Vzc1syXS5yZXBsYWNlKHJlT3BlbkJyYWNrZXRzLCAiXG4kJiIpLnJlcGxhY2UocmVDbG9zZUJyYWNrZXRzLCAiJDFcbiQyIikKICAgICAgICAgICAgKyBtVG9Qcm9jZXNzWzNdOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGxpbmVzLmpvaW4oIlxuIik7CiAgfQp9OwoKQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1siaHRtbG1peGVkIl0gPSB7CiAgY29tbWVudFN0YXJ0OiAiPCEtLSIsCiAgY29tbWVudEVuZDogIi0tPiIsCiAgd29yZFdyYXBDaGFyczogWyI+IiwgIjsiLCAiXFx7IiwgIlxcfSJdLAoKICBnZXRNb2RlSW5mb3M6IGZ1bmN0aW9uICh0ZXh0LCBhYnNQb3MpIHsKICAgIHZhciBtb2RlSW5mb3MgPSBuZXcgQXJyYXkoKTsKICAgIG1vZGVJbmZvc1swXSA9CiAgICAgIHsKICAgICAgICBwb3M6IDAsCiAgICAgICAgbW9kZUV4dDogQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1sieG1sIl0sCiAgICAgICAgbW9kZU5hbWU6ICJ4bWwiCiAgICAgIH07CgogICAgdmFyIG1vZGVNYXRjaGVycyA9IG5ldyBBcnJheSgpOwogICAgbW9kZU1hdGNoZXJzWzBdID0KICAgICAgewogICAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKCI8c3R5bGVbXj5dKj4oW1xcc1xcU10qPykoPC9zdHlsZVtePl0qPnwkKSIsICJpIiksCiAgICAgICAgbW9kZUV4dDogQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1siY3NzIl0sCiAgICAgICAgbW9kZU5hbWU6ICJjc3MiCiAgICAgIH07CiAgICBtb2RlTWF0Y2hlcnNbMV0gPQogICAgICB7CiAgICAgICAgcmVnZXg6IG5ldyBSZWdFeHAoIjxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPykoPC9zY3JpcHRbXj5dKj58JCkiLCAiaSIpLAogICAgICAgIG1vZGVFeHQ6IENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbImphdmFzY3JpcHQiXSwKICAgICAgICBtb2RlTmFtZTogImphdmFzY3JpcHQiCiAgICAgIH07CgogICAgdmFyIGxhc3RDaGFyUG9zID0gKHR5cGVvZiAoYWJzUG9zKSAhPT0gInVuZGVmaW5lZCIgPyBhYnNQb3MgOiB0ZXh0Lmxlbmd0aCAtIDEpOwogICAgLy8gRGV0ZWN0IG1vZGVzIGZvciB0aGUgZW50aXJlIHRleHQKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZU1hdGNoZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjdXJQb3MgPSAwOwogICAgICB3aGlsZSAoY3VyUG9zIDw9IGxhc3RDaGFyUG9zKSB7CiAgICAgICAgdmFyIG0gPSB0ZXh0LnN1YnN0cihjdXJQb3MpLm1hdGNoKG1vZGVNYXRjaGVyc1tpXS5yZWdleCk7CiAgICAgICAgaWYgKG0gIT0gbnVsbCkgewogICAgICAgICAgaWYgKG0ubGVuZ3RoID4gMSAmJiBtWzFdLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgLy8gUHVzaCBibG9jayBiZWdpbiBwb3MKICAgICAgICAgICAgdmFyIGJsb2NrQmVnaW4gPSBjdXJQb3MgKyBtLmluZGV4ICsgbVswXS5pbmRleE9mKG1bMV0pOwogICAgICAgICAgICBtb2RlSW5mb3MucHVzaCgKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb3M6IGJsb2NrQmVnaW4sCiAgICAgICAgICAgICAgICBtb2RlRXh0OiBtb2RlTWF0Y2hlcnNbaV0ubW9kZUV4dCwKICAgICAgICAgICAgICAgIG1vZGVOYW1lOiBtb2RlTWF0Y2hlcnNbaV0ubW9kZU5hbWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gUHVzaCBibG9jayBlbmQgcG9zCiAgICAgICAgICAgIG1vZGVJbmZvcy5wdXNoKAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBvczogYmxvY2tCZWdpbiArIG1bMV0ubGVuZ3RoLAogICAgICAgICAgICAgICAgbW9kZUV4dDogbW9kZUluZm9zWzBdLm1vZGVFeHQsCiAgICAgICAgICAgICAgICBtb2RlTmFtZTogbW9kZUluZm9zWzBdLm1vZGVOYW1lCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGN1clBvcyArPSBtLmluZGV4ICsgbVswXS5sZW5ndGg7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGN1clBvcyArPSBtLmluZGV4ICsgTWF0aC5tYXgobVswXS5sZW5ndGgsIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsgLy8gTm8gbW9yZSBtYXRjaGVzCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIFNvcnQgbW9kZSBpbmZvcwogICAgbW9kZUluZm9zLnNvcnQoZnVuY3Rpb24gc29ydE1vZGVJbmZvKGEsIGIpIHsKICAgICAgcmV0dXJuIGEucG9zIC0gYi5wb3M7CiAgICB9KTsKCiAgICByZXR1cm4gbW9kZUluZm9zOwogIH0sCgogIGF1dG9Gb3JtYXRMaW5lQnJlYWtzOiBmdW5jdGlvbiAodGV4dCwgc3RhcnRQb3MsIGVuZFBvcykgewogICAgdmFyIG1vZGVJbmZvcyA9IHRoaXMuZ2V0TW9kZUluZm9zKHRleHQpOwogICAgdmFyIHJlQmxvY2tTdGFydHNXaXRoTmV3bGluZSA9IG5ldyBSZWdFeHAoIl5cXHMqP1xuIik7CiAgICB2YXIgcmVCbG9ja0VuZHNXaXRoTmV3bGluZSA9IG5ldyBSZWdFeHAoIlxuXFxzKj8kIik7CiAgICB2YXIgcmVzID0gIiI7CiAgICAvLyBVc2UgbW9kZXMgaW5mbyB0byBicmVhayBsaW5lcyBjb3JyZXNwb25kaW5nbHkKICAgIGlmIChtb2RlSW5mb3MubGVuZ3RoID4gMSkgeyAvLyBEZWFsIHdpdGggbXVsdGktbW9kZSB0ZXh0CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG1vZGVJbmZvcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBzZWxTdGFydCA9IG1vZGVJbmZvc1tpIC0gMV0ucG9zOwogICAgICAgIHZhciBzZWxFbmQgPSAoaSA8IG1vZGVJbmZvcy5sZW5ndGggPyBtb2RlSW5mb3NbaV0ucG9zIDogZW5kUG9zKTsKCiAgICAgICAgaWYgKHNlbFN0YXJ0ID49IGVuZFBvcykgeyAvLyBUaGUgYmxvY2sgc3RhcnRzIGxhdGVyIHRoYW4gdGhlIG5lZWRlZCBmcmFnbWVudAogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxTdGFydCA8IHN0YXJ0UG9zKSB7CiAgICAgICAgICBpZiAoc2VsRW5kIDw9IHN0YXJ0UG9zKSB7IC8vIFRoZSBibG9jayBzdGFydHMgZWFybGllciB0aGFuIHRoZSBuZWVkZWQgZnJhZ21lbnQKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxTdGFydCA9IHN0YXJ0UG9zOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsRW5kID4gZW5kUG9zKSB7CiAgICAgICAgICBzZWxFbmQgPSBlbmRQb3M7CiAgICAgICAgfQogICAgICAgIHZhciB0ZXh0UG9ydGlvbiA9IHRleHQuc3Vic3RyaW5nKHNlbFN0YXJ0LCBzZWxFbmQpOwogICAgICAgIGlmIChtb2RlSW5mb3NbaSAtIDFdLm1vZGVOYW1lICE9ICJ4bWwiKSB7IC8vIFN0YXJ0aW5nIGEgQ1NTIG9yIEphdmFTY3JpcHQgYmxvY2sKICAgICAgICAgIGlmICghcmVCbG9ja1N0YXJ0c1dpdGhOZXdsaW5lLnRlc3QodGV4dFBvcnRpb24pCiAgICAgICAgICAgICAgJiYgc2VsU3RhcnQgPiAwKSB7IC8vIFRoZSBibG9jayBkb2VzIG5vdCBzdGFydCB3aXRoIGEgbGluZSBicmVhawogICAgICAgICAgICB0ZXh0UG9ydGlvbiA9ICJcbiIgKyB0ZXh0UG9ydGlvbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghcmVCbG9ja0VuZHNXaXRoTmV3bGluZS50ZXN0KHRleHRQb3J0aW9uKQogICAgICAgICAgICAgICYmIHNlbEVuZCA8IHRleHQubGVuZ3RoIC0gMSkgeyAvLyBUaGUgYmxvY2sgZG9lcyBub3QgZW5kIHdpdGggYSBsaW5lIGJyZWFrCiAgICAgICAgICAgIHRleHRQb3J0aW9uICs9ICJcbiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlcyArPSBtb2RlSW5mb3NbaSAtIDFdLm1vZGVFeHQuYXV0b0Zvcm1hdExpbmVCcmVha3ModGV4dFBvcnRpb24pOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsgLy8gU2luZ2xlLW1vZGUgdGV4dAogICAgICByZXMgPSBtb2RlSW5mb3NbMF0ubW9kZUV4dC5hdXRvRm9ybWF0TGluZUJyZWFrcyh0ZXh0LnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zKSk7CiAgICB9CgogICAgcmV0dXJuIHJlczsKICB9Cn07Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/javascript-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBmb3JFYWNoKGFyciwgZikgewogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7CiAgfQogIAogIGZ1bmN0aW9uIGFycmF5Q29udGFpbnMoYXJyLCBpdGVtKSB7CiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7CiAgICAgIHZhciBpID0gYXJyLmxlbmd0aDsKICAgICAgd2hpbGUgKGktLSkgewogICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gYXJyLmluZGV4T2YoaXRlbSkgIT0gLTE7CiAgfQoKICBmdW5jdGlvbiBzY3JpcHRIaW50KGVkaXRvciwga2V5d29yZHMsIGdldFRva2VuKSB7CiAgICAvLyBGaW5kIHRoZSB0b2tlbiBhdCB0aGUgY3Vyc29yCiAgICB2YXIgY3VyID0gZWRpdG9yLmdldEN1cnNvcigpLCB0b2tlbiA9IGdldFRva2VuKGVkaXRvciwgY3VyKSwgdHByb3AgPSB0b2tlbjsKICAgIC8vIElmIGl0J3Mgbm90IGEgJ3dvcmQtc3R5bGUnIHRva2VuLCBpZ25vcmUgdGhlIHRva2VuLgoJCWlmICghL15bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgIHRva2VuID0gdHByb3AgPSB7c3RhcnQ6IGN1ci5jaCwgZW5kOiBjdXIuY2gsIHN0cmluZzogIiIsIHN0YXRlOiB0b2tlbi5zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRva2VuLnN0cmluZyA9PSAiLiIgPyAicHJvcGVydHkiIDogbnVsbH07CiAgICB9CiAgICAvLyBJZiBpdCBpcyBhIHByb3BlcnR5LCBmaW5kIG91dCB3aGF0IGl0IGlzIGEgcHJvcGVydHkgb2YuCiAgICB3aGlsZSAodHByb3AuY2xhc3NOYW1lID09ICJwcm9wZXJ0eSIpIHsKICAgICAgdHByb3AgPSBnZXRUb2tlbihlZGl0b3IsIHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgIGlmICh0cHJvcC5zdHJpbmcgIT0gIi4iKSByZXR1cm47CiAgICAgIHRwcm9wID0gZ2V0VG9rZW4oZWRpdG9yLCB7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwogICAgICBpZiAodHByb3Auc3RyaW5nID09ICcpJykgewogICAgICAgIHZhciBsZXZlbCA9IDE7CiAgICAgICAgZG8gewogICAgICAgICAgdHByb3AgPSBnZXRUb2tlbihlZGl0b3IsIHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgICAgICBzd2l0Y2ggKHRwcm9wLnN0cmluZykgewogICAgICAgICAgY2FzZSAnKSc6IGxldmVsKys7IGJyZWFrOwogICAgICAgICAgY2FzZSAnKCc6IGxldmVsLS07IGJyZWFrOwogICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAobGV2ZWwgPiAwKQogICAgICAgIHRwcm9wID0gZ2V0VG9rZW4oZWRpdG9yLCB7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwoJCQkJaWYgKHRwcm9wLmNsYXNzTmFtZSA9PSAndmFyaWFibGUnKQoJCQkJCXRwcm9wLmNsYXNzTmFtZSA9ICdmdW5jdGlvbic7CgkJCQllbHNlIHJldHVybjsgLy8gbm8gY2x1ZQogICAgICB9CiAgICAgIGlmICghY29udGV4dCkgdmFyIGNvbnRleHQgPSBbXTsKICAgICAgY29udGV4dC5wdXNoKHRwcm9wKTsKICAgIH0KICAgIHJldHVybiB7bGlzdDogZ2V0Q29tcGxldGlvbnModG9rZW4sIGNvbnRleHQsIGtleXdvcmRzKSwKICAgICAgICAgICAgZnJvbToge2xpbmU6IGN1ci5saW5lLCBjaDogdG9rZW4uc3RhcnR9LAogICAgICAgICAgICB0bzoge2xpbmU6IGN1ci5saW5lLCBjaDogdG9rZW4uZW5kfX07CiAgfQoKICBDb2RlTWlycm9yLmphdmFzY3JpcHRIaW50ID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICByZXR1cm4gc2NyaXB0SGludChlZGl0b3IsIGphdmFzY3JpcHRLZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlLCBjdXIpIHtyZXR1cm4gZS5nZXRUb2tlbkF0KGN1cik7fSk7CiAgfQoKICBmdW5jdGlvbiBnZXRDb2ZmZWVTY3JpcHRUb2tlbihlZGl0b3IsIGN1cikgewogIC8vIFRoaXMgZ2V0VG9rZW4sIGl0IGlzIGZvciBjb2ZmZWVzY3JpcHQsIGltaXRhdGVzIHRoZSBiZWhhdmlvciBvZgogIC8vIGdldFRva2VuQXQgbWV0aG9kIGluIGphdmFzY3JpcHQuanMsIHRoYXQgaXMsIHJldHVybmluZyAicHJvcGVydHkiCiAgLy8gdHlwZSBhbmQgdHJlYXQgIi4iIGFzIGluZGVwZW5lbnQgdG9rZW4uCiAgICB2YXIgdG9rZW4gPSBlZGl0b3IuZ2V0VG9rZW5BdChjdXIpOwogICAgaWYgKGN1ci5jaCA9PSB0b2tlbi5zdGFydCArIDEgJiYgdG9rZW4uc3RyaW5nLmNoYXJBdCgwKSA9PSAnLicpIHsKICAgICAgdG9rZW4uZW5kID0gdG9rZW4uc3RhcnQ7CiAgICAgIHRva2VuLnN0cmluZyA9ICcuJzsKICAgICAgdG9rZW4uY2xhc3NOYW1lID0gInByb3BlcnR5IjsKICAgIH0KICAgIGVsc2UgaWYgKC9eXC5bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgIHRva2VuLmNsYXNzTmFtZSA9ICJwcm9wZXJ0eSI7CiAgICAgIHRva2VuLnN0YXJ0Kys7CiAgICAgIHRva2VuLnN0cmluZyA9IHRva2VuLnN0cmluZy5yZXBsYWNlKC9cLi8sICcnKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIENvZGVNaXJyb3IuY29mZmVlc2NyaXB0SGludCA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgcmV0dXJuIHNjcmlwdEhpbnQoZWRpdG9yLCBjb2ZmZWVzY3JpcHRLZXl3b3JkcywgZ2V0Q29mZmVlU2NyaXB0VG9rZW4pOwogIH0KCiAgdmFyIHN0cmluZ1Byb3BzID0gKCJjaGFyQXQgY2hhckNvZGVBdCBpbmRleE9mIGxhc3RJbmRleE9mIHN1YnN0cmluZyBzdWJzdHIgc2xpY2UgdHJpbSB0cmltTGVmdCB0cmltUmlnaHQgIiArCiAgICAgICAgICAgICAgICAgICAgICJ0b1VwcGVyQ2FzZSB0b0xvd2VyQ2FzZSBzcGxpdCBjb25jYXQgbWF0Y2ggcmVwbGFjZSBzZWFyY2giKS5zcGxpdCgiICIpOwogIHZhciBhcnJheVByb3BzID0gKCJsZW5ndGggY29uY2F0IGpvaW4gc3BsaWNlIHB1c2ggcG9wIHNoaWZ0IHVuc2hpZnQgc2xpY2UgcmV2ZXJzZSBzb3J0IGluZGV4T2YgIiArCiAgICAgICAgICAgICAgICAgICAgImxhc3RJbmRleE9mIGV2ZXJ5IHNvbWUgZmlsdGVyIGZvckVhY2ggbWFwIHJlZHVjZSByZWR1Y2VSaWdodCAiKS5zcGxpdCgiICIpOwogIHZhciBmdW5jUHJvcHMgPSAicHJvdG90eXBlIGFwcGx5IGNhbGwgYmluZCIuc3BsaXQoIiAiKTsKICB2YXIgamF2YXNjcmlwdEtleXdvcmRzID0gKCJicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZGVsZXRlIGRvIGVsc2UgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgICJpZiBpbiBpbnN0YW5jZW9mIG5ldyBudWxsIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHZhciB2b2lkIHdoaWxlIHdpdGgiKS5zcGxpdCgiICIpOwogIHZhciBjb2ZmZWVzY3JpcHRLZXl3b3JkcyA9ICgiYW5kIGJyZWFrIGNhdGNoIGNsYXNzIGNvbnRpbnVlIGRlbGV0ZSBkbyBlbHNlIGV4dGVuZHMgZmFsc2UgZmluYWxseSBmb3IgIiArCiAgICAgICAgICAgICAgICAgICJpZiBpbiBpbnN0YW5jZW9mIGlzbnQgbmV3IG5vIG5vdCBudWxsIG9mIG9mZiBvbiBvciByZXR1cm4gc3dpdGNoIHRoZW4gdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVudGlsIHZvaWQgd2hpbGUgd2l0aCB5ZXMiKS5zcGxpdCgiICIpOwoKICBmdW5jdGlvbiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCwga2V5d29yZHMpIHsKICAgIHZhciBmb3VuZCA9IFtdLCBzdGFydCA9IHRva2VuLnN0cmluZzsKICAgIGZ1bmN0aW9uIG1heWJlQWRkKHN0cikgewogICAgICBpZiAoc3RyLmluZGV4T2Yoc3RhcnQpID09IDAgJiYgIWFycmF5Q29udGFpbnMoZm91bmQsIHN0cikpIGZvdW5kLnB1c2goc3RyKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdhdGhlckNvbXBsZXRpb25zKG9iaikgewogICAgICBpZiAodHlwZW9mIG9iaiA9PSAic3RyaW5nIikgZm9yRWFjaChzdHJpbmdQcm9wcywgbWF5YmVBZGQpOwogICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkgZm9yRWFjaChhcnJheVByb3BzLCBtYXliZUFkZCk7CiAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSBmb3JFYWNoKGZ1bmNQcm9wcywgbWF5YmVBZGQpOwogICAgICBmb3IgKHZhciBuYW1lIGluIG9iaikgbWF5YmVBZGQobmFtZSk7CiAgICB9CgogICAgaWYgKGNvbnRleHQpIHsKICAgICAgLy8gSWYgdGhpcyBpcyBhIHByb3BlcnR5LCBzZWUgaWYgaXQgYmVsb25ncyB0byBzb21lIG9iamVjdCB3ZSBjYW4KICAgICAgLy8gZmluZCBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4KICAgICAgdmFyIG9iaiA9IGNvbnRleHQucG9wKCksIGJhc2U7CiAgICAgIGlmIChvYmouY2xhc3NOYW1lID09ICJ2YXJpYWJsZSIpCiAgICAgICAgYmFzZSA9IHdpbmRvd1tvYmouc3RyaW5nXTsKICAgICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAic3RyaW5nIikKICAgICAgICBiYXNlID0gIiI7CiAgICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gImF0b20iKQogICAgICAgIGJhc2UgPSAxOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJmdW5jdGlvbiIpIHsKICAgICAgICBpZiAod2luZG93LmpRdWVyeSAhPSBudWxsICYmIChvYmouc3RyaW5nID09ICckJyB8fCBvYmouc3RyaW5nID09ICdqUXVlcnknKSAmJgogICAgICAgICAgICAodHlwZW9mIHdpbmRvdy5qUXVlcnkgPT0gJ2Z1bmN0aW9uJykpCiAgICAgICAgICBiYXNlID0gd2luZG93LmpRdWVyeSgpOwogICAgICAgIGVsc2UgaWYgKHdpbmRvdy5fICE9IG51bGwgJiYgKG9iai5zdHJpbmcgPT0gJ18nKSAmJiAodHlwZW9mIHdpbmRvdy5fID09ICdmdW5jdGlvbicpKQogICAgICAgICAgYmFzZSA9IHdpbmRvdy5fKCk7CiAgICAgIH0KICAgICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgICBiYXNlID0gYmFzZVtjb250ZXh0LnBvcCgpLnN0cmluZ107CiAgICAgIGlmIChiYXNlICE9IG51bGwpIGdhdGhlckNvbXBsZXRpb25zKGJhc2UpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIElmIG5vdCwganVzdCBsb29rIGluIHRoZSB3aW5kb3cgb2JqZWN0IGFuZCBhbnkgbG9jYWwgc2NvcGUKICAgICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgICAgZm9yICh2YXIgdiA9IHRva2VuLnN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkgbWF5YmVBZGQodi5uYW1lKTsKICAgICAgZ2F0aGVyQ29tcGxldGlvbnMod2luZG93KTsKICAgICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogICAgfQogICAgcmV0dXJuIGZvdW5kOwogIH0KfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/loadmode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIGlmICghQ29kZU1pcnJvci5tb2RlVVJMKSBDb2RlTWlycm9yLm1vZGVVUkwgPSAiLi4vbW9kZS8lTi8lTi5qcyI7CgogIHZhciBsb2FkaW5nID0ge307CiAgZnVuY3Rpb24gc3BsaXRDYWxsYmFjayhjb250LCBuKSB7CiAgICB2YXIgY291bnREb3duID0gbjsKICAgIHJldHVybiBmdW5jdGlvbigpIHsgaWYgKC0tY291bnREb3duID09IDApIGNvbnQoKTsgfQogIH0KICBmdW5jdGlvbiBlbnN1cmVEZXBzKG1vZGUsIGNvbnQpIHsKICAgIHZhciBkZXBzID0gQ29kZU1pcnJvci5tb2Rlc1ttb2RlXS5kZXBlbmRlbmNpZXM7CiAgICBpZiAoIWRlcHMpIHJldHVybiBjb250KCk7CiAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBzLmxlbmd0aDsgKytpKSB7CiAgICAgIGlmICghQ29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eShkZXBzW2ldKSkKICAgICAgICBtaXNzaW5nLnB1c2goZGVwc1tpXSk7CiAgICB9CiAgICBpZiAoIW1pc3NpbmcubGVuZ3RoKSByZXR1cm4gY29udCgpOwogICAgdmFyIHNwbGl0ID0gc3BsaXRDYWxsYmFjayhjb250LCBtaXNzaW5nLmxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pc3NpbmcubGVuZ3RoOyArK2kpCiAgICAgIENvZGVNaXJyb3IucmVxdWlyZU1vZGUobWlzc2luZ1tpXSwgc3BsaXQpOwogIH0KCiAgQ29kZU1pcnJvci5yZXF1aXJlTW9kZSA9IGZ1bmN0aW9uKG1vZGUsIGNvbnQpIHsKICAgIGlmICh0eXBlb2YgbW9kZSAhPSAic3RyaW5nIikgbW9kZSA9IG1vZGUubmFtZTsKICAgIGlmIChDb2RlTWlycm9yLm1vZGVzLmhhc093blByb3BlcnR5KG1vZGUpKSByZXR1cm4gZW5zdXJlRGVwcyhtb2RlLCBjb250KTsKICAgIGlmIChsb2FkaW5nLmhhc093blByb3BlcnR5KG1vZGUpKSByZXR1cm4gbG9hZGluZ1ttb2RlXS5wdXNoKGNvbnQpOwoKICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgIHNjcmlwdC5zcmMgPSBDb2RlTWlycm9yLm1vZGVVUkwucmVwbGFjZSgvJU4vZywgbW9kZSk7CiAgICB2YXIgb3RoZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdOwogICAgb3RoZXJzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNjcmlwdCwgb3RoZXJzKTsKICAgIHZhciBsaXN0ID0gbG9hZGluZ1ttb2RlXSA9IFtjb250XTsKICAgIHZhciBjb3VudCA9IDAsIHBvbGwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgaWYgKCsrY291bnQgPiAxMDApIHJldHVybiBjbGVhckludGVydmFsKHBvbGwpOwogICAgICBpZiAoQ29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eShtb2RlKSkgewogICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbCk7CiAgICAgICAgbG9hZGluZ1ttb2RlXSA9IG51bGw7CiAgICAgICAgZW5zdXJlRGVwcyhtb2RlLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkgbGlzdFtpXSgpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9LCAyMDApOwogIH07CgogIENvZGVNaXJyb3IuYXV0b0xvYWRNb2RlID0gZnVuY3Rpb24oaW5zdGFuY2UsIG1vZGUpIHsKICAgIGlmICghQ29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eShtb2RlKSkKICAgICAgQ29kZU1pcnJvci5yZXF1aXJlTW9kZShtb2RlLCBmdW5jdGlvbigpIHsKICAgICAgICBpbnN0YW5jZS5zZXRPcHRpb24oIm1vZGUiLCBpbnN0YW5jZS5nZXRPcHRpb24oIm1vZGUiKSk7CiAgICAgIH0pOwogIH07Cn0oKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/match-highlighter.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gRGVmaW5lIG1hdGNoLWhpZ2hsaWdodGVyIGNvbW1hbmRzLiBEZXBlbmRzIG9uIHNlYXJjaGN1cnNvci5qcwovLyBVc2UgYnkgYXR0YWNoaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCB0byB0aGUgb25DdXJzb3JBY3Rpdml0eSBldmVudDoKCS8vbXlDb2RlTWlycm9yLm1hdGNoSGlnaGxpZ2h0KG1pbkNoYXJzKTsKLy8gQW5kIGluY2x1ZGluZyBhIHNwZWNpYWwgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaGlnaGxpZ2h0IGNzcyBjbGFzcyAoYWxzbyBvcHRpb25hbGx5IGEgc2VwYXJhdGUgb25lIGZvciAuQ29kZU1pcnJvci1mb2N1c2VkIC0tIHNlZSBkZW1vIG1hdGNoaGlnaGxpZ2h0ZXIuaHRtbCkKCihmdW5jdGlvbigpIHsKICB2YXIgREVGQVVMVF9NSU5fQ0hBUlMgPSAyOwogIAogIGZ1bmN0aW9uIE1hdGNoSGlnaGxpZ2h0U3RhdGUoKSB7Cgl0aGlzLm1hcmtlZCA9IFtdOwogIH0KICBmdW5jdGlvbiBnZXRNYXRjaEhpZ2hsaWdodFN0YXRlKGNtKSB7CglyZXR1cm4gY20uX21hdGNoSGlnaGxpZ2h0U3RhdGUgfHwgKGNtLl9tYXRjaEhpZ2hsaWdodFN0YXRlID0gbmV3IE1hdGNoSGlnaGxpZ2h0U3RhdGUoKSk7CiAgfQogIAogIGZ1bmN0aW9uIGNsZWFyTWFya3MoY20pIHsKCXZhciBzdGF0ZSA9IGdldE1hdGNoSGlnaGxpZ2h0U3RhdGUoY20pOwoJZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5tYXJrZWQubGVuZ3RoOyArK2kpCgkJc3RhdGUubWFya2VkW2ldLmNsZWFyKCk7CglzdGF0ZS5tYXJrZWQgPSBbXTsKICB9CiAgCiAgZnVuY3Rpb24gbWFya0RvY3VtZW50KGNtLCBjbGFzc05hbWUsIG1pbkNoYXJzKSB7CiAgICBjbGVhck1hcmtzKGNtKTsKCW1pbkNoYXJzID0gKHR5cGVvZiBtaW5DaGFycyAhPT0gJ3VuZGVmaW5lZCcgPyBtaW5DaGFycyA6IERFRkFVTFRfTUlOX0NIQVJTKTsKCWlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpICYmIGNtLmdldFNlbGVjdGlvbigpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAiIikubGVuZ3RoID49IG1pbkNoYXJzKSB7CgkJdmFyIHN0YXRlID0gZ2V0TWF0Y2hIaWdobGlnaHRTdGF0ZShjbSk7CgkJdmFyIHF1ZXJ5ID0gY20uZ2V0U2VsZWN0aW9uKCk7CgkJY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewoJCQlpZiAoY20ubGluZUNvdW50KCkgPCAyMDAwKSB7IC8vIFRoaXMgaXMgdG9vIGV4cGVuc2l2ZSBvbiBiaWcgZG9jdW1lbnRzLgoJCQkgIGZvciAodmFyIGN1cnNvciA9IGNtLmdldFNlYXJjaEN1cnNvcihxdWVyeSk7IGN1cnNvci5maW5kTmV4dCgpOykgewoJCQkJLy9Pbmx5IGFwcGx5IG1hdGNoaGlnaGxpZ2h0IHRvIHRoZSBtYXRjaGVzIG90aGVyIHRoYW4gdGhlIG9uZSBhY3R1YWxseSBzZWxlY3RlZAoJCQkJaWYgKCEoY3Vyc29yLmZyb20oKS5saW5lID09PSBjbS5nZXRDdXJzb3IodHJ1ZSkubGluZSAmJiBjdXJzb3IuZnJvbSgpLmNoID09PSBjbS5nZXRDdXJzb3IodHJ1ZSkuY2gpKQoJCQkJCXN0YXRlLm1hcmtlZC5wdXNoKGNtLm1hcmtUZXh0KGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpLCBjbGFzc05hbWUpKTsKCQkJICB9CgkJCX0KCQkgIH0pOwoJfQogIH0KCiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oIm1hdGNoSGlnaGxpZ2h0IiwgZnVuY3Rpb24oY2xhc3NOYW1lLCBtaW5DaGFycykgewogICAgbWFya0RvY3VtZW50KHRoaXMsIGNsYXNzTmFtZSwgbWluQ2hhcnMpOwogIH0pOwp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/multiplex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5tdWx0aXBsZXhpbmdNb2RlID0gZnVuY3Rpb24ob3V0ZXIgLyosIG90aGVycyAqLykgewogIC8vIE90aGVycyBzaG91bGQgYmUge29wZW4sIGNsb3NlLCBtb2RlIFssIGRlbGltU3R5bGVdfSBvYmplY3RzCiAgdmFyIG90aGVycyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAgdmFyIG5fb3RoZXJzID0gb3RoZXJzLmxlbmd0aDsKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIG91dGVyOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUob3V0ZXIpLAogICAgICAgIGlubmVyQWN0aXZlOiBudWxsLAogICAgICAgIGlubmVyOiBudWxsCiAgICAgIH07CiAgICB9LAoKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBvdXRlcjogQ29kZU1pcnJvci5jb3B5U3RhdGUob3V0ZXIsIHN0YXRlLm91dGVyKSwKICAgICAgICBpbm5lckFjdGl2ZTogc3RhdGUuaW5uZXJBY3RpdmUsCiAgICAgICAgaW5uZXI6IHN0YXRlLmlubmVyQWN0aXZlICYmIENvZGVNaXJyb3IuY29weVN0YXRlKHN0YXRlLmlubmVyQWN0aXZlLm1vZGUsIHN0YXRlLmlubmVyKQogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoIXN0YXRlLmlubmVyQWN0aXZlKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuX290aGVyczsgKytpKSB7CiAgICAgICAgICB2YXIgb3RoZXIgPSBvdGhlcnNbaV07CiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKG90aGVyLm9wZW4pKSB7CiAgICAgICAgICAgIHN0YXRlLmlubmVyQWN0aXZlID0gb3RoZXI7CiAgICAgICAgICAgIHN0YXRlLmlubmVyID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKG90aGVyLm1vZGUpOwogICAgICAgICAgICByZXR1cm4gb3RoZXIuZGVsaW1TdHlsZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIG91dGVyVG9rZW4gPSBvdXRlci50b2tlbihzdHJlYW0sIHN0YXRlLm91dGVyKTsKICAgICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5fb3RoZXJzOyArK2kpIHsKICAgICAgICAgIHZhciBvdGhlciA9IG90aGVyc1tpXSwgZm91bmQgPSBjdXIuaW5kZXhPZihvdGhlci5vcGVuKTsKICAgICAgICAgIGlmIChmb3VuZCA+IC0xKSB7CiAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIGZvdW5kKTsKICAgICAgICAgICAgY3VyID0gY3VyLnNsaWNlKDAsIGZvdW5kKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dGVyVG9rZW47CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGN1cklubmVyID0gc3RhdGUuaW5uZXJBY3RpdmU7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChjdXJJbm5lci5jbG9zZSkpIHsKICAgICAgICAgIHN0YXRlLmlubmVyQWN0aXZlID0gc3RhdGUuaW5uZXIgPSBudWxsOwogICAgICAgICAgcmV0dXJuIGN1cklubmVyLmRlbGltU3R5bGU7CiAgICAgICAgfQogICAgICAgIHZhciBpbm5lclRva2VuID0gY3VySW5uZXIubW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmlubmVyKTsKICAgICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKSwgZm91bmQgPSBjdXIuaW5kZXhPZihjdXJJbm5lci5jbG9zZSk7CiAgICAgICAgaWYgKGZvdW5kID4gLTEpIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIGZvdW5kKTsKICAgICAgICByZXR1cm4gaW5uZXJUb2tlbjsKICAgICAgfQogICAgfSwKICAgIAogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBtb2RlID0gc3RhdGUuaW5uZXJBY3RpdmUgfHwgb3V0ZXI7CiAgICAgIGlmICghbW9kZS5pbmRlbnQpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CiAgICAgIHJldHVybiBtb2RlLmluZGVudChzdGF0ZS5pbm5lckFjdGl2ZSA/IHN0YXRlLmlubmVyIDogc3RhdGUub3V0ZXIsIHRleHRBZnRlcik7CiAgICB9LAoKICAgIGNvbXBhcmVTdGF0ZXM6IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgaWYgKGEuaW5uZXJBY3RpdmUgIT0gYi5pbm5lckFjdGl2ZSkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgbW9kZSA9IGEuaW5uZXJBY3RpdmUgfHwgb3V0ZXI7CiAgICAgIGlmICghbW9kZS5jb21wYXJlU3RhdGVzKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwogICAgICByZXR1cm4gbW9kZS5jb21wYXJlU3RhdGVzKGEuaW5uZXJBY3RpdmUgPyBhLmlubmVyIDogYS5vdXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLmlubmVyQWN0aXZlID8gYi5pbm5lciA6IGIub3V0ZXIpOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiBvdXRlci5lbGVjdHJpY0NoYXJzCiAgfTsKfTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/overlay.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW4KLy8gYXMgdGhlIGJhc2UgYXJndW1lbnQgdGFrZXMgY2FyZSBvZiBtb3N0IG9mIHRoZSBub3JtYWwgbW9kZQovLyBmdW5jdGlvbmFsaXR5LCBidXQgYSBzZWNvbmQgKHR5cGljYWxseSBzaW1wbGUpIG1vZGUgaXMgdXNlZCwgd2hpY2gKLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlCi8vIHRleHQsIGJ1dCB3aGVuIGJvdGggYXNzaWduIGEgbm9uLW51bGwgc3R5bGUgdG8gYSBwaWVjZSBvZiBjb2RlLCB0aGUKLy8gb3ZlcmxheSB3aW5zLCB1bmxlc3MgdGhlIGNvbWJpbmUgYXJndW1lbnQgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UKLy8gdGhlIHN0eWxlcyBhcmUgY29tYmluZWQuCgovLyBvdmVybGF5UGFyc2VyIGlzIHRoZSBvbGQsIGRlcHJlY2F0ZWQgbmFtZQpDb2RlTWlycm9yLm92ZXJsYXlNb2RlID0gQ29kZU1pcnJvci5vdmVybGF5UGFyc2VyID0gZnVuY3Rpb24oYmFzZSwgb3ZlcmxheSwgY29tYmluZSkgewogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiYXNlOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoYmFzZSksCiAgICAgICAgb3ZlcmxheTogQ29kZU1pcnJvci5zdGFydFN0YXRlKG92ZXJsYXkpLAogICAgICAgIGJhc2VQb3M6IDAsIGJhc2VDdXI6IG51bGwsCiAgICAgICAgb3ZlcmxheVBvczogMCwgb3ZlcmxheUN1cjogbnVsbAogICAgICB9OwogICAgfSwKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiYXNlOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShiYXNlLCBzdGF0ZS5iYXNlKSwKICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLmNvcHlTdGF0ZShvdmVybGF5LCBzdGF0ZS5vdmVybGF5KSwKICAgICAgICBiYXNlUG9zOiBzdGF0ZS5iYXNlUG9zLCBiYXNlQ3VyOiBudWxsLAogICAgICAgIG92ZXJsYXlQb3M6IHN0YXRlLm92ZXJsYXlQb3MsIG92ZXJsYXlDdXI6IG51bGwKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zdGFydCA9PSBzdGF0ZS5iYXNlUG9zKSB7CiAgICAgICAgc3RhdGUuYmFzZUN1ciA9IGJhc2UudG9rZW4oc3RyZWFtLCBzdGF0ZS5iYXNlKTsKICAgICAgICBzdGF0ZS5iYXNlUG9zID0gc3RyZWFtLnBvczsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLm92ZXJsYXlQb3MpIHsKICAgICAgICBzdHJlYW0ucG9zID0gc3RyZWFtLnN0YXJ0OwogICAgICAgIHN0YXRlLm92ZXJsYXlDdXIgPSBvdmVybGF5LnRva2VuKHN0cmVhbSwgc3RhdGUub3ZlcmxheSk7CiAgICAgICAgc3RhdGUub3ZlcmxheVBvcyA9IHN0cmVhbS5wb3M7CiAgICAgIH0KICAgICAgc3RyZWFtLnBvcyA9IE1hdGgubWluKHN0YXRlLmJhc2VQb3MsIHN0YXRlLm92ZXJsYXlQb3MpOwogICAgICBpZiAoc3RyZWFtLmVvbCgpKSBzdGF0ZS5iYXNlUG9zID0gc3RhdGUub3ZlcmxheVBvcyA9IDA7CgogICAgICBpZiAoc3RhdGUub3ZlcmxheUN1ciA9PSBudWxsKSByZXR1cm4gc3RhdGUuYmFzZUN1cjsKICAgICAgaWYgKHN0YXRlLmJhc2VDdXIgIT0gbnVsbCAmJiBjb21iaW5lKSByZXR1cm4gc3RhdGUuYmFzZUN1ciArICIgIiArIHN0YXRlLm92ZXJsYXlDdXI7CiAgICAgIGVsc2UgcmV0dXJuIHN0YXRlLm92ZXJsYXlDdXI7CiAgICB9LAogICAgCiAgICBpbmRlbnQ6IGJhc2UuaW5kZW50ICYmIGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgcmV0dXJuIGJhc2UuaW5kZW50KHN0YXRlLmJhc2UsIHRleHRBZnRlcik7CiAgICB9LAogICAgZWxlY3RyaWNDaGFyczogYmFzZS5lbGVjdHJpY0NoYXJzCiAgfTsKfTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/pig-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBmb3JFYWNoKGFyciwgZikgewogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7CiAgfQogIAogIGZ1bmN0aW9uIGFycmF5Q29udGFpbnMoYXJyLCBpdGVtKSB7CiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7CiAgICAgIHZhciBpID0gYXJyLmxlbmd0aDsKICAgICAgd2hpbGUgKGktLSkgewogICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gYXJyLmluZGV4T2YoaXRlbSkgIT0gLTE7CiAgfQoKICBmdW5jdGlvbiBzY3JpcHRIaW50KGVkaXRvciwga2V5d29yZHMsIGdldFRva2VuKSB7CiAgICAvLyBGaW5kIHRoZSB0b2tlbiBhdCB0aGUgY3Vyc29yCiAgICB2YXIgY3VyID0gZWRpdG9yLmdldEN1cnNvcigpLCB0b2tlbiA9IGdldFRva2VuKGVkaXRvciwgY3VyKSwgdHByb3AgPSB0b2tlbjsKICAgIC8vIElmIGl0J3Mgbm90IGEgJ3dvcmQtc3R5bGUnIHRva2VuLCBpZ25vcmUgdGhlIHRva2VuLgoKICAgIGlmICghL15bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgICAgdG9rZW4gPSB0cHJvcCA9IHtzdGFydDogY3VyLmNoLCBlbmQ6IGN1ci5jaCwgc3RyaW5nOiAiIiwgc3RhdGU6IHRva2VuLnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0b2tlbi5zdHJpbmcgPT0gIjoiID8gInBpZy10eXBlIiA6IG51bGx9OwogICAgfQogICAgICAKICAgIGlmICghY29udGV4dCkgdmFyIGNvbnRleHQgPSBbXTsKICAgIGNvbnRleHQucHVzaCh0cHJvcCk7CiAgICAKICAgIGNvbXBsZXRpb25MaXN0ID0gZ2V0Q29tcGxldGlvbnModG9rZW4sIGNvbnRleHQpOyAKICAgIGNvbXBsZXRpb25MaXN0ID0gY29tcGxldGlvbkxpc3Quc29ydCgpOwogICAgLy9wcmV2ZW50IGF1dG9jb21wbGV0ZSBmb3IgbGFzdCB3b3JkLCBpbnN0ZWFkIHNob3cgZHJvcGRvd24gd2l0aCBvbmUgd29yZAogICAgaWYoY29tcGxldGlvbkxpc3QubGVuZ3RoID09IDEpIHsKICAgICAgY29tcGxldGlvbkxpc3QucHVzaCgiICIpOwogICAgfQoKICAgIHJldHVybiB7bGlzdDogY29tcGxldGlvbkxpc3QsCiAgICAgICAgICAgICAgZnJvbToge2xpbmU6IGN1ci5saW5lLCBjaDogdG9rZW4uc3RhcnR9LAogICAgICAgICAgICAgIHRvOiB7bGluZTogY3VyLmxpbmUsIGNoOiB0b2tlbi5lbmR9fTsKICB9CiAgCiAgQ29kZU1pcnJvci5waWdIaW50ID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICByZXR1cm4gc2NyaXB0SGludChlZGl0b3IsIHBpZ0tleXdvcmRzVSwgZnVuY3Rpb24gKGUsIGN1cikge3JldHVybiBlLmdldFRva2VuQXQoY3VyKTt9KTsKICB9CiAKIGZ1bmN0aW9uIHRvVGl0bGVDYXNlKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oPzpefFxzKVx3L2csIGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7CiAgICB9KTsKIH0KICAKICB2YXIgcGlnS2V5d29yZHMgPSAiVk9JRCBJTVBPUlQgUkVUVVJOUyBERUZJTkUgTE9BRCBGSUxURVIgRk9SRUFDSCBPUkRFUiBDVUJFIERJU1RJTkNUIENPR1JPVVAgIgogICsgIkpPSU4gQ1JPU1MgVU5JT04gU1BMSVQgSU5UTyBJRiBPVEhFUldJU0UgQUxMIEFTIEJZIFVTSU5HIElOTkVSIE9VVEVSIE9OU0NIRU1BIFBBUkFMTEVMICIKICArICJQQVJUSVRJT04gR1JPVVAgQU5EIE9SIE5PVCBHRU5FUkFURSBGTEFUVEVOIEFTQyBERVNDIElTIFNUUkVBTSBUSFJPVUdIIFNUT1JFIE1BUFJFRFVDRSAiCiAgKyAiU0hJUCBDQUNIRSBJTlBVVCBPVVRQVVQgU1RERVJST1IgU1RESU4gU1RET1VUIExJTUlUIFNBTVBMRSBMRUZUIFJJR0hUIEZVTEwgRVEgR1QgTFQgR1RFIExURSAiIAogICsgIk5FUSBNQVRDSEVTIFRSVUUgRkFMU0UiOwogIHZhciBwaWdLZXl3b3Jkc1UgPSBwaWdLZXl3b3Jkcy5zcGxpdCgiICIpOwogIHZhciBwaWdLZXl3b3Jkc0wgPSBwaWdLZXl3b3Jkcy50b0xvd2VyQ2FzZSgpLnNwbGl0KCIgIik7CiAgCiAgdmFyIHBpZ1R5cGVzID0gIkJPT0xFQU4gSU5UIExPTkcgRkxPQVQgRE9VQkxFIENIQVJBUlJBWSBCWVRFQVJSQVkgQkFHIFRVUExFIE1BUCI7CiAgdmFyIHBpZ1R5cGVzVSA9IHBpZ1R5cGVzLnNwbGl0KCIgIik7CiAgdmFyIHBpZ1R5cGVzTCA9IHBpZ1R5cGVzLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKTsKICAKICB2YXIgcGlnQnVpbHRpbnMgPSAiQUJTIEFDT1MgQVJJVFkgQVNJTiBBVEFOIEFWRyBCQUdTSVpFIEJJTlNUT1JBR0UgQkxPT00gQlVJTERCTE9PTSBDQlJUIENFSUwgIiAKICArICJDT05DQVQgQ09SIENPUyBDT1NIIENPVU5UIENPVU5UX1NUQVIgQ09WIENPTlNUQU5UU0laRSBDVUJFRElNRU5TSU9OUyBESUZGIERJU1RJTkNUIERPVUJMRUFCUyAiCiAgKyAiRE9VQkxFQVZHIERPVUJMRUJBU0UgRE9VQkxFTUFYIERPVUJMRU1JTiBET1VCTEVST1VORCBET1VCTEVTVU0gRVhQIEZMT09SIEZMT0FUQUJTIEZMT0FUQVZHICIKICArICJGTE9BVE1BWCBGTE9BVE1JTiBGTE9BVFJPVU5EIEZMT0FUU1VNIEdFTkVSSUNJTlZPS0VSIElOREVYT0YgSU5UQUJTIElOVEFWRyBJTlRNQVggSU5UTUlOICIKICArICJJTlRTVU0gSU5WT0tFRk9SRE9VQkxFIElOVk9LRUZPUkZMT0FUIElOVk9LRUZPUklOVCBJTlZPS0VGT1JMT05HIElOVk9LRUZPUlNUUklORyBJTlZPS0VSICIKICArICJJU0VNUFRZIEpTT05MT0FERVIgSlNPTk1FVEFEQVRBIEpTT05TVE9SQUdFIExBU1RfSU5ERVhfT0YgTENGSVJTVCBMT0cgTE9HMTAgTE9XRVIgTE9OR0FCUyAiCiAgKyAiTE9OR0FWRyBMT05HTUFYIExPTkdNSU4gTE9OR1NVTSBNQVggTUlOIE1BUFNJWkUgTU9OSVRPUkVEVURGIE5PTkRFVEVSTUlOSVNUSUMgT1VUUFVUU0NIRU1BICAiCiAgKyAiUElHU1RPUkFHRSBQSUdTVFJFQU1JTkcgUkFORE9NIFJFR0VYX0VYVFJBQ1QgUkVHRVhfRVhUUkFDVF9BTEwgUkVQTEFDRSBST1VORCBTSU4gU0lOSCBTSVpFICIKICArICJTUVJUIFNUUlNQTElUIFNVQlNUUklORyBTVU0gU1RSSU5HQ09OQ0FUIFNUUklOR01BWCBTVFJJTkdNSU4gU1RSSU5HU0laRSBUQU4gVEFOSCBUT0JBRyAiCiAgKyAiVE9LRU5JWkUgVE9NQVAgVE9QIFRPVFVQTEUgVFJJTSBURVhUTE9BREVSIFRVUExFU0laRSBVQ0ZJUlNUIFVQUEVSIFVURjhTVE9SQUdFQ09OVkVSVEVSIjsgIAogIHZhciBwaWdCdWlsdGluc1UgPSBwaWdCdWlsdGlucy5zcGxpdCgiICIpLmpvaW4oIigpICIpLnNwbGl0KCIgIik7ICAKICB2YXIgcGlnQnVpbHRpbnNMID0gcGlnQnVpbHRpbnMudG9Mb3dlckNhc2UoKS5zcGxpdCgiICIpLmpvaW4oIigpICIpLnNwbGl0KCIgIik7ICAgCiAgdmFyIHBpZ0J1aWx0aW5zQyA9ICgiQmFnU2l6ZSBCaW5TdG9yYWdlIEJsb29tIEJ1aWxkQmxvb20gQ29uc3RhbnRTaXplIEN1YmVEaW1lbnNpb25zIERvdWJsZUFicyAiCiAgKyAiRG91YmxlQXZnIERvdWJsZUJhc2UgRG91YmxlTWF4IERvdWJsZU1pbiBEb3VibGVSb3VuZCBEb3VibGVTdW0gRmxvYXRBYnMgRmxvYXRBdmcgRmxvYXRNYXggIgogICsgIkZsb2F0TWluIEZsb2F0Um91bmQgRmxvYXRTdW0gR2VuZXJpY0ludm9rZXIgSW50QWJzIEludEF2ZyBJbnRNYXggSW50TWluIEludFN1bSAiCiAgKyAiSW52b2tlRm9yRG91YmxlIEludm9rZUZvckZsb2F0IEludm9rZUZvckludCBJbnZva2VGb3JMb25nIEludm9rZUZvclN0cmluZyBJbnZva2VyICIKICArICJJc0VtcHR5IEpzb25Mb2FkZXIgSnNvbk1ldGFkYXRhIEpzb25TdG9yYWdlIExvbmdBYnMgTG9uZ0F2ZyBMb25nTWF4IExvbmdNaW4gTG9uZ1N1bSBNYXBTaXplICIKICArICJNb25pdG9yZWRVREYgTm9uZGV0ZXJtaW5pc3RpYyBPdXRwdXRTY2hlbWEgUGlnU3RvcmFnZSBQaWdTdHJlYW1pbmcgU3RyaW5nQ29uY2F0IFN0cmluZ01heCAiCiAgKyAiU3RyaW5nTWluIFN0cmluZ1NpemUgVGV4dExvYWRlciBUdXBsZVNpemUgVXRmOFN0b3JhZ2VDb252ZXJ0ZXIiKS5zcGxpdCgiICIpLmpvaW4oIigpICIpLnNwbGl0KCIgIik7CiAgICAgICAgICAgICAgICAgICAgCiAgZnVuY3Rpb24gZ2V0Q29tcGxldGlvbnModG9rZW4sIGNvbnRleHQpIHsKICAgIHZhciBmb3VuZCA9IFtdLCBzdGFydCA9IHRva2VuLnN0cmluZzsKICAgIGZ1bmN0aW9uIG1heWJlQWRkKHN0cikgewogICAgICBpZiAoc3RyLmluZGV4T2Yoc3RhcnQpID09IDAgJiYgIWFycmF5Q29udGFpbnMoZm91bmQsIHN0cikpIGZvdW5kLnB1c2goc3RyKTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZ2F0aGVyQ29tcGxldGlvbnMob2JqKSB7CiAgICAgIGlmKG9iaiA9PSAiOiIpIHsKICAgICAgICBmb3JFYWNoKHBpZ1R5cGVzTCwgbWF5YmVBZGQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGZvckVhY2gocGlnQnVpbHRpbnNVLCBtYXliZUFkZCk7CiAgICAgICAgZm9yRWFjaChwaWdCdWlsdGluc0wsIG1heWJlQWRkKTsKICAgICAgICBmb3JFYWNoKHBpZ0J1aWx0aW5zQywgbWF5YmVBZGQpOwogICAgICAgIGZvckVhY2gocGlnVHlwZXNVLCBtYXliZUFkZCk7CiAgICAgICAgZm9yRWFjaChwaWdUeXBlc0wsIG1heWJlQWRkKTsKICAgICAgICBmb3JFYWNoKHBpZ0tleXdvcmRzVSwgbWF5YmVBZGQpOwogICAgICAgIGZvckVhY2gocGlnS2V5d29yZHNMLCBtYXliZUFkZCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoY29udGV4dCkgewogICAgICAvLyBJZiB0aGlzIGlzIGEgcHJvcGVydHksIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNvbWUgb2JqZWN0IHdlIGNhbgogICAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICB2YXIgb2JqID0gY29udGV4dC5wb3AoKSwgYmFzZTsKCiAgICAgIGlmIChvYmouY2xhc3NOYW1lID09ICJwaWctd29yZCIpIAogICAgICAgICAgYmFzZSA9IG9iai5zdHJpbmc7CiAgICAgIGVsc2UgaWYob2JqLmNsYXNzTmFtZSA9PSAicGlnLXR5cGUiKQogICAgICAgICAgYmFzZSA9ICI6IiArIG9iai5zdHJpbmc7CiAgICAgICAgCiAgICAgIHdoaWxlIChiYXNlICE9IG51bGwgJiYgY29udGV4dC5sZW5ndGgpCiAgICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgICBpZiAoYmFzZSAhPSBudWxsKSBnYXRoZXJDb21wbGV0aW9ucyhiYXNlKTsKICAgIH0KICAgIHJldHVybiBmb3VuZDsKICB9Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/runmode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5ydW5Nb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBtb2Rlc3BlYywgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICB2YXIgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShDb2RlTWlycm9yLmRlZmF1bHRzLCBtb2Rlc3BlYyk7CiAgdmFyIGlzTm9kZSA9IGNhbGxiYWNrLm5vZGVUeXBlID09IDE7CiAgdmFyIHRhYlNpemUgPSAob3B0aW9ucyAmJiBvcHRpb25zLnRhYlNpemUpIHx8IENvZGVNaXJyb3IuZGVmYXVsdHMudGFiU2l6ZTsKICBpZiAoaXNOb2RlKSB7CiAgICB2YXIgbm9kZSA9IGNhbGxiYWNrLCBhY2N1bSA9IFtdLCBjb2wgPSAwOwogICAgY2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0LCBzdHlsZSkgewogICAgICBpZiAodGV4dCA9PSAiXG4iKSB7CiAgICAgICAgYWNjdW0ucHVzaCgiPGJyPiIpOwogICAgICAgIGNvbCA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBlc2NhcGVkID0gIiI7CiAgICAgIC8vIEhUTUwtZXNjYXBlIGFuZCByZXBsYWNlIHRhYnMKICAgICAgZm9yICh2YXIgcG9zID0gMDs7KSB7CiAgICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZigiXHQiLCBwb3MpOwogICAgICAgIGlmIChpZHggPT0gLTEpIHsKICAgICAgICAgIGVzY2FwZWQgKz0gQ29kZU1pcnJvci5odG1sRXNjYXBlKHRleHQuc2xpY2UocG9zKSk7CiAgICAgICAgICBjb2wgKz0gdGV4dC5sZW5ndGggLSBwb3M7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29sICs9IGlkeCAtIHBvczsKICAgICAgICAgIGVzY2FwZWQgKz0gQ29kZU1pcnJvci5odG1sRXNjYXBlKHRleHQuc2xpY2UocG9zLCBpZHgpKTsKICAgICAgICAgIHZhciBzaXplID0gdGFiU2l6ZSAtIGNvbCAlIHRhYlNpemU7CiAgICAgICAgICBjb2wgKz0gc2l6ZTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSBlc2NhcGVkICs9ICIgIjsKICAgICAgICAgIHBvcyA9IGlkeCArIDE7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoc3R5bGUpIAogICAgICAgIGFjY3VtLnB1c2goIjxzcGFuIGNsYXNzPVwiY20tIiArIENvZGVNaXJyb3IuaHRtbEVzY2FwZShzdHlsZSkgKyAiXCI+IiArIGVzY2FwZWQgKyAiPC9zcGFuPiIpOwogICAgICBlbHNlCiAgICAgICAgYWNjdW0ucHVzaChlc2NhcGVkKTsKICAgIH0KICB9CiAgdmFyIGxpbmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzKHN0cmluZyksIHN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKG1vZGUpOwogIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICBpZiAoaSkgY2FsbGJhY2soIlxuIik7CiAgICB2YXIgc3RyZWFtID0gbmV3IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtKGxpbmVzW2ldKTsKICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGNhbGxiYWNrKHN0cmVhbS5jdXJyZW50KCksIHN0eWxlLCBpLCBzdHJlYW0uc3RhcnQpOwogICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgfQogIH0KICBpZiAoaXNOb2RlKQogICAgbm9kZS5pbm5lckhUTUwgPSBhY2N1bS5qb2luKCIiKTsKfTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/search.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gRGVmaW5lIHNlYXJjaCBjb21tYW5kcy4gRGVwZW5kcyBvbiBkaWFsb2cuanMgb3IgYW5vdGhlcgovLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlbkRpYWxvZyBtZXRob2QuCgovLyBSZXBsYWNlIHdvcmtzIGEgbGl0dGxlIG9kZGx5IC0tIGl0IHdpbGwgZG8gdGhlIHJlcGxhY2Ugb24gdGhlIG5leHQKLy8gQ3RybC1HIChvciB3aGF0ZXZlciBpcyBib3VuZCB0byBmaW5kTmV4dCkgcHJlc3MuIFlvdSBwcmV2ZW50IGEKLy8gcmVwbGFjZSBieSBtYWtpbmcgc3VyZSB0aGUgbWF0Y2ggaXMgbm8gbG9uZ2VyIHNlbGVjdGVkIHdoZW4gaGl0dGluZwovLyBDdHJsLUcuCgooZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24gU2VhcmNoU3RhdGUoKSB7CiAgICB0aGlzLnBvc0Zyb20gPSB0aGlzLnBvc1RvID0gdGhpcy5xdWVyeSA9IG51bGw7CiAgICB0aGlzLm1hcmtlZCA9IFtdOwogIH0KICBmdW5jdGlvbiBnZXRTZWFyY2hTdGF0ZShjbSkgewogICAgcmV0dXJuIGNtLl9zZWFyY2hTdGF0ZSB8fCAoY20uX3NlYXJjaFN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCkpOwogIH0KICBmdW5jdGlvbiBnZXRTZWFyY2hDdXJzb3IoY20sIHF1ZXJ5LCBwb3MpIHsKICAgIC8vIEhldXJpc3RpYzogaWYgdGhlIHF1ZXJ5IHN0cmluZyBpcyBhbGwgbG93ZXJjYXNlLCBkbyBhIGNhc2UgaW5zZW5zaXRpdmUgc2VhcmNoLgogICAgcmV0dXJuIGNtLmdldFNlYXJjaEN1cnNvcihxdWVyeSwgcG9zLCB0eXBlb2YgcXVlcnkgPT0gInN0cmluZyIgJiYgcXVlcnkgPT0gcXVlcnkudG9Mb3dlckNhc2UoKSk7CiAgfQogIGZ1bmN0aW9uIGRpYWxvZyhjbSwgdGV4dCwgc2hvcnRUZXh0LCBmKSB7CiAgICBpZiAoY20ub3BlbkRpYWxvZykgY20ub3BlbkRpYWxvZyh0ZXh0LCBmKTsKICAgIGVsc2UgZihwcm9tcHQoc2hvcnRUZXh0LCAiIikpOwogIH0KICBmdW5jdGlvbiBjb25maXJtRGlhbG9nKGNtLCB0ZXh0LCBzaG9ydFRleHQsIGZzKSB7CiAgICBpZiAoY20ub3BlbkNvbmZpcm0pIGNtLm9wZW5Db25maXJtKHRleHQsIGZzKTsKICAgIGVsc2UgaWYgKGNvbmZpcm0oc2hvcnRUZXh0KSkgZnNbMF0oKTsKICB9CiAgZnVuY3Rpb24gcGFyc2VRdWVyeShxdWVyeSkgewogICAgdmFyIGlzUkUgPSBxdWVyeS5tYXRjaCgvXlwvKC4qKVwvKFthLXpdKikkLyk7CiAgICByZXR1cm4gaXNSRSA/IG5ldyBSZWdFeHAoaXNSRVsxXSwgaXNSRVsyXS5pbmRleE9mKCJpIikgPT0gLTEgPyAiIiA6ICJpIikgOiBxdWVyeTsKICB9CiAgdmFyIHF1ZXJ5RGlhbG9nID0KICAgICdTZWFyY2g6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwZW0iLz4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjODg4Ij4oVXNlIC9yZS8gc3ludGF4IGZvciByZWdleHAgc2VhcmNoKTwvc3Bhbj4nOwogIGZ1bmN0aW9uIGRvU2VhcmNoKGNtLCByZXYpIHsKICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgIGlmIChzdGF0ZS5xdWVyeSkgcmV0dXJuIGZpbmROZXh0KGNtLCByZXYpOwogICAgZGlhbG9nKGNtLCBxdWVyeURpYWxvZywgIlNlYXJjaCBmb3I6IiwgZnVuY3Rpb24ocXVlcnkpIHsKICAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghcXVlcnkgfHwgc3RhdGUucXVlcnkpIHJldHVybjsKICAgICAgICBzdGF0ZS5xdWVyeSA9IHBhcnNlUXVlcnkocXVlcnkpOwogICAgICAgIGlmIChjbS5saW5lQ291bnQoKSA8IDIwMDApIHsgLy8gVGhpcyBpcyB0b28gZXhwZW5zaXZlIG9uIGJpZyBkb2N1bWVudHMuCiAgICAgICAgICBmb3IgKHZhciBjdXJzb3IgPSBnZXRTZWFyY2hDdXJzb3IoY20sIHF1ZXJ5KTsgY3Vyc29yLmZpbmROZXh0KCk7KQogICAgICAgICAgICBzdGF0ZS5tYXJrZWQucHVzaChjbS5tYXJrVGV4dChjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSwgIkNvZGVNaXJyb3Itc2VhcmNoaW5nIikpOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5wb3NGcm9tID0gc3RhdGUucG9zVG8gPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgICBmaW5kTmV4dChjbSwgcmV2KTsKICAgICAgfSk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZmluZE5leHQoY20sIHJldikge2NtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgIHZhciBjdXJzb3IgPSBnZXRTZWFyY2hDdXJzb3IoY20sIHN0YXRlLnF1ZXJ5LCByZXYgPyBzdGF0ZS5wb3NGcm9tIDogc3RhdGUucG9zVG8pOwogICAgaWYgKCFjdXJzb3IuZmluZChyZXYpKSB7CiAgICAgIGN1cnNvciA9IGdldFNlYXJjaEN1cnNvcihjbSwgc3RhdGUucXVlcnksIHJldiA/IHtsaW5lOiBjbS5saW5lQ291bnQoKSAtIDF9IDoge2xpbmU6IDAsIGNoOiAwfSk7CiAgICAgIGlmICghY3Vyc29yLmZpbmQocmV2KSkgcmV0dXJuOwogICAgfQogICAgY20uc2V0U2VsZWN0aW9uKGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpKTsKICAgIHN0YXRlLnBvc0Zyb20gPSBjdXJzb3IuZnJvbSgpOyBzdGF0ZS5wb3NUbyA9IGN1cnNvci50bygpOwogIH0pfQogIGZ1bmN0aW9uIGNsZWFyU2VhcmNoKGNtKSB7Y20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgdmFyIHN0YXRlID0gZ2V0U2VhcmNoU3RhdGUoY20pOwogICAgaWYgKCFzdGF0ZS5xdWVyeSkgcmV0dXJuOwogICAgc3RhdGUucXVlcnkgPSBudWxsOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5tYXJrZWQubGVuZ3RoOyArK2kpIHN0YXRlLm1hcmtlZFtpXS5jbGVhcigpOwogICAgc3RhdGUubWFya2VkLmxlbmd0aCA9IDA7CiAgfSl9CgogIHZhciByZXBsYWNlUXVlcnlEaWFsb2cgPQogICAgJ1JlcGxhY2U6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwZW0iLz4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjODg4Ij4oVXNlIC9yZS8gc3ludGF4IGZvciByZWdleHAgc2VhcmNoKTwvc3Bhbj4nOwogIHZhciByZXBsYWNlbWVudFF1ZXJ5RGlhbG9nID0gJ1dpdGg6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwZW0iLz4nOwogIHZhciBkb1JlcGxhY2VDb25maXJtID0gIlJlcGxhY2U/IDxidXR0b24+WWVzPC9idXR0b24+IDxidXR0b24+Tm88L2J1dHRvbj4gPGJ1dHRvbj5TdG9wPC9idXR0b24+IjsKICBmdW5jdGlvbiByZXBsYWNlKGNtLCBhbGwpIHsKICAgIGRpYWxvZyhjbSwgcmVwbGFjZVF1ZXJ5RGlhbG9nLCAiUmVwbGFjZToiLCBmdW5jdGlvbihxdWVyeSkgewogICAgICBpZiAoIXF1ZXJ5KSByZXR1cm47CiAgICAgIHF1ZXJ5ID0gcGFyc2VRdWVyeShxdWVyeSk7CiAgICAgIGRpYWxvZyhjbSwgcmVwbGFjZW1lbnRRdWVyeURpYWxvZywgIlJlcGxhY2Ugd2l0aDoiLCBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgaWYgKGFsbCkgewogICAgICAgICAgY20uY29tcG91bmRDaGFuZ2UoZnVuY3Rpb24oKSB7IGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gZ2V0U2VhcmNoQ3Vyc29yKGNtLCBxdWVyeSk7IGN1cnNvci5maW5kTmV4dCgpOykgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgcXVlcnkgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGNtLmdldFJhbmdlKGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpKS5tYXRjaChxdWVyeSk7CiAgICAgICAgICAgICAgICBjdXJzb3IucmVwbGFjZSh0ZXh0LnJlcGxhY2UoL1wkKFxkKS8sIGZ1bmN0aW9uKHcsIGkpIHtyZXR1cm4gbWF0Y2hbaV07fSkpOwogICAgICAgICAgICAgIH0gZWxzZSBjdXJzb3IucmVwbGFjZSh0ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSl9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2xlYXJTZWFyY2goY20pOwogICAgICAgICAgdmFyIGN1cnNvciA9IGdldFNlYXJjaEN1cnNvcihjbSwgcXVlcnksIGNtLmdldEN1cnNvcigpKTsKICAgICAgICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7CiAgICAgICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5mcm9tKCksIG1hdGNoOwogICAgICAgICAgICBpZiAoIShtYXRjaCA9IGN1cnNvci5maW5kTmV4dCgpKSkgewogICAgICAgICAgICAgIGN1cnNvciA9IGdldFNlYXJjaEN1cnNvcihjbSwgcXVlcnkpOwogICAgICAgICAgICAgIGlmICghKG1hdGNoID0gY3Vyc29yLmZpbmROZXh0KCkpIHx8CiAgICAgICAgICAgICAgICAgIChzdGFydCAmJiBjdXJzb3IuZnJvbSgpLmxpbmUgPT0gc3RhcnQubGluZSAmJiBjdXJzb3IuZnJvbSgpLmNoID09IHN0YXJ0LmNoKSkgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNtLnNldFNlbGVjdGlvbihjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSk7CiAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coY20sIGRvUmVwbGFjZUNvbmZpcm0sICJSZXBsYWNlPyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Z1bmN0aW9uKCkge2RvUmVwbGFjZShtYXRjaCk7fSwgYWR2YW5jZV0pOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gZG9SZXBsYWNlKG1hdGNoKSB7CiAgICAgICAgICAgIGN1cnNvci5yZXBsYWNlKHR5cGVvZiBxdWVyeSA9PSAic3RyaW5nIiA/IHRleHQgOgogICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoL1wkKFxkKS8sIGZ1bmN0aW9uKHcsIGkpIHtyZXR1cm4gbWF0Y2hbaV07fSkpOwogICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KCiAgQ29kZU1pcnJvci5jb21tYW5kcy5maW5kID0gZnVuY3Rpb24oY20pIHtjbGVhclNlYXJjaChjbSk7IGRvU2VhcmNoKGNtKTt9OwogIENvZGVNaXJyb3IuY29tbWFuZHMuZmluZE5leHQgPSBkb1NlYXJjaDsKICBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmRQcmV2ID0gZnVuY3Rpb24oY20pIHtkb1NlYXJjaChjbSwgdHJ1ZSk7fTsKICBDb2RlTWlycm9yLmNvbW1hbmRzLmNsZWFyU2VhcmNoID0gY2xlYXJTZWFyY2g7CiAgQ29kZU1pcnJvci5jb21tYW5kcy5yZXBsYWNlID0gcmVwbGFjZTsKICBDb2RlTWlycm9yLmNvbW1hbmRzLnJlcGxhY2VBbGwgPSBmdW5jdGlvbihjbSkge3JlcGxhY2UoY20sIHRydWUpO307Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/searchcursor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7CiAgZnVuY3Rpb24gU2VhcmNoQ3Vyc29yKGNtLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCkgewogICAgdGhpcy5hdE9jY3VycmVuY2UgPSBmYWxzZTsgdGhpcy5jbSA9IGNtOwogICAgaWYgKGNhc2VGb2xkID09IG51bGwgJiYgdHlwZW9mIHF1ZXJ5ID09ICJzdHJpbmciKSBjYXNlRm9sZCA9IGZhbHNlOwoKICAgIHBvcyA9IHBvcyA/IGNtLmNsaXBQb3MocG9zKSA6IHtsaW5lOiAwLCBjaDogMH07CiAgICB0aGlzLnBvcyA9IHtmcm9tOiBwb3MsIHRvOiBwb3N9OwoKICAgIC8vIFRoZSBtYXRjaGVzIG1ldGhvZCBpcyBmaWxsZWQgaW4gYmFzZWQgb24gdGhlIHR5cGUgb2YgcXVlcnkuCiAgICAvLyBJdCB0YWtlcyBhIHBvc2l0aW9uIGFuZCBhIGRpcmVjdGlvbiwgYW5kIHJldHVybnMgYW4gb2JqZWN0CiAgICAvLyBkZXNjcmliaW5nIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIHF1ZXJ5LCBvciBudWxsIGlmIG5vCiAgICAvLyBtb3JlIG1hdGNoZXMgd2VyZSBmb3VuZC4KICAgIGlmICh0eXBlb2YgcXVlcnkgIT0gInN0cmluZyIpIC8vIFJlZ2V4cCBtYXRjaAogICAgICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihyZXZlcnNlLCBwb3MpIHsKICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKHBvcy5saW5lKS5zbGljZSgwLCBwb3MuY2gpLCBtYXRjaCA9IGxpbmUubWF0Y2gocXVlcnkpLCBzdGFydCA9IDA7CiAgICAgICAgICB3aGlsZSAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGluZCA9IGxpbmUuaW5kZXhPZihtYXRjaFswXSk7CiAgICAgICAgICAgIHN0YXJ0ICs9IGluZDsKICAgICAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoaW5kICsgMSk7CiAgICAgICAgICAgIHZhciBuZXdtYXRjaCA9IGxpbmUubWF0Y2gocXVlcnkpOwogICAgICAgICAgICBpZiAobmV3bWF0Y2gpIG1hdGNoID0gbmV3bWF0Y2g7CiAgICAgICAgICAgIGVsc2UgYnJlYWs7CiAgICAgICAgICAgIHN0YXJ0Kys7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKHBvcy5saW5lKS5zbGljZShwb3MuY2gpLCBtYXRjaCA9IGxpbmUubWF0Y2gocXVlcnkpLAogICAgICAgICAgc3RhcnQgPSBtYXRjaCAmJiBwb3MuY2ggKyBsaW5lLmluZGV4T2YobWF0Y2hbMF0pOwogICAgICAgIH0KICAgICAgICBpZiAobWF0Y2gpCiAgICAgICAgICByZXR1cm4ge2Zyb206IHtsaW5lOiBwb3MubGluZSwgY2g6IHN0YXJ0fSwKICAgICAgICAgICAgICAgICAgdG86IHtsaW5lOiBwb3MubGluZSwgY2g6IHN0YXJ0ICsgbWF0Y2hbMF0ubGVuZ3RofSwKICAgICAgICAgICAgICAgICAgbWF0Y2g6IG1hdGNofTsKICAgICAgfTsKICAgIGVsc2UgeyAvLyBTdHJpbmcgcXVlcnkKICAgICAgaWYgKGNhc2VGb2xkKSBxdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7CiAgICAgIHZhciBmb2xkID0gY2FzZUZvbGQgPyBmdW5jdGlvbihzdHIpe3JldHVybiBzdHIudG9Mb3dlckNhc2UoKTt9IDogZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyO307CiAgICAgIHZhciB0YXJnZXQgPSBxdWVyeS5zcGxpdCgiXG4iKTsKICAgICAgLy8gRGlmZmVyZW50IG1ldGhvZHMgZm9yIHNpbmdsZS1saW5lIGFuZCBtdWx0aS1saW5lIHF1ZXJpZXMKICAgICAgaWYgKHRhcmdldC5sZW5ndGggPT0gMSkKICAgICAgICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihyZXZlcnNlLCBwb3MpIHsKICAgICAgICAgIHZhciBsaW5lID0gZm9sZChjbS5nZXRMaW5lKHBvcy5saW5lKSksIGxlbiA9IHF1ZXJ5Lmxlbmd0aCwgbWF0Y2g7CiAgICAgICAgICBpZiAocmV2ZXJzZSA/IChwb3MuY2ggPj0gbGVuICYmIChtYXRjaCA9IGxpbmUubGFzdEluZGV4T2YocXVlcnksIHBvcy5jaCAtIGxlbikpICE9IC0xKQogICAgICAgICAgICAgIDogKG1hdGNoID0gbGluZS5pbmRleE9mKHF1ZXJ5LCBwb3MuY2gpKSAhPSAtMSkKICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiB7bGluZTogcG9zLmxpbmUsIGNoOiBtYXRjaH0sCiAgICAgICAgICAgICAgICAgICAgdG86IHtsaW5lOiBwb3MubGluZSwgY2g6IG1hdGNoICsgbGVufX07CiAgICAgICAgfTsKICAgICAgZWxzZQogICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykgewogICAgICAgICAgdmFyIGxuID0gcG9zLmxpbmUsIGlkeCA9IChyZXZlcnNlID8gdGFyZ2V0Lmxlbmd0aCAtIDEgOiAwKSwgbWF0Y2ggPSB0YXJnZXRbaWR4XSwgbGluZSA9IGZvbGQoY20uZ2V0TGluZShsbikpOwogICAgICAgICAgdmFyIG9mZnNldEEgPSAocmV2ZXJzZSA/IGxpbmUuaW5kZXhPZihtYXRjaCkgKyBtYXRjaC5sZW5ndGggOiBsaW5lLmxhc3RJbmRleE9mKG1hdGNoKSk7CiAgICAgICAgICBpZiAocmV2ZXJzZSA/IG9mZnNldEEgPj0gcG9zLmNoIHx8IG9mZnNldEEgIT0gbWF0Y2gubGVuZ3RoCiAgICAgICAgICAgICAgOiBvZmZzZXRBIDw9IHBvcy5jaCB8fCBvZmZzZXRBICE9IGxpbmUubGVuZ3RoIC0gbWF0Y2gubGVuZ3RoKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgIGlmIChyZXZlcnNlID8gIWxuIDogbG4gPT0gY20ubGluZUNvdW50KCkgLSAxKSByZXR1cm47CiAgICAgICAgICAgIGxpbmUgPSBmb2xkKGNtLmdldExpbmUobG4gKz0gcmV2ZXJzZSA/IC0xIDogMSkpOwogICAgICAgICAgICBtYXRjaCA9IHRhcmdldFtyZXZlcnNlID8gLS1pZHggOiArK2lkeF07CiAgICAgICAgICAgIGlmIChpZHggPiAwICYmIGlkeCA8IHRhcmdldC5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgaWYgKGxpbmUgIT0gbWF0Y2gpIHJldHVybjsKICAgICAgICAgICAgICBlbHNlIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBvZmZzZXRCID0gKHJldmVyc2UgPyBsaW5lLmxhc3RJbmRleE9mKG1hdGNoKSA6IGxpbmUuaW5kZXhPZihtYXRjaCkgKyBtYXRjaC5sZW5ndGgpOwogICAgICAgICAgICBpZiAocmV2ZXJzZSA/IG9mZnNldEIgIT0gbGluZS5sZW5ndGggLSBtYXRjaC5sZW5ndGggOiBvZmZzZXRCICE9IG1hdGNoLmxlbmd0aCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHZhciBzdGFydCA9IHtsaW5lOiBwb3MubGluZSwgY2g6IG9mZnNldEF9LCBlbmQgPSB7bGluZTogbG4sIGNoOiBvZmZzZXRCfTsKICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiByZXZlcnNlID8gZW5kIDogc3RhcnQsIHRvOiByZXZlcnNlID8gc3RhcnQgOiBlbmR9OwogICAgICAgICAgfQogICAgICAgIH07CiAgICB9CiAgfQoKICBTZWFyY2hDdXJzb3IucHJvdG90eXBlID0gewogICAgZmluZE5leHQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpbmQoZmFsc2UpO30sCiAgICBmaW5kUHJldmlvdXM6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpbmQodHJ1ZSk7fSwKCiAgICBmaW5kOiBmdW5jdGlvbihyZXZlcnNlKSB7CiAgICAgIHZhciBzZWxmID0gdGhpcywgcG9zID0gdGhpcy5jbS5jbGlwUG9zKHJldmVyc2UgPyB0aGlzLnBvcy5mcm9tIDogdGhpcy5wb3MudG8pOwogICAgICBmdW5jdGlvbiBzYXZlUG9zQW5kRmFpbChsaW5lKSB7CiAgICAgICAgdmFyIHBvcyA9IHtsaW5lOiBsaW5lLCBjaDogMH07CiAgICAgICAgc2VsZi5wb3MgPSB7ZnJvbTogcG9zLCB0bzogcG9zfTsKICAgICAgICBzZWxmLmF0T2NjdXJyZW5jZSA9IGZhbHNlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgZm9yICg7OykgewogICAgICAgIGlmICh0aGlzLnBvcyA9IHRoaXMubWF0Y2hlcyhyZXZlcnNlLCBwb3MpKSB7CiAgICAgICAgICB0aGlzLmF0T2NjdXJyZW5jZSA9IHRydWU7CiAgICAgICAgICByZXR1cm4gdGhpcy5wb3MubWF0Y2ggfHwgdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHJldmVyc2UpIHsKICAgICAgICAgIGlmICghcG9zLmxpbmUpIHJldHVybiBzYXZlUG9zQW5kRmFpbCgwKTsKICAgICAgICAgIHBvcyA9IHtsaW5lOiBwb3MubGluZS0xLCBjaDogdGhpcy5jbS5nZXRMaW5lKHBvcy5saW5lLTEpLmxlbmd0aH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgdmFyIG1heExpbmUgPSB0aGlzLmNtLmxpbmVDb3VudCgpOwogICAgICAgICAgaWYgKHBvcy5saW5lID09IG1heExpbmUgLSAxKSByZXR1cm4gc2F2ZVBvc0FuZEZhaWwobWF4TGluZSk7CiAgICAgICAgICBwb3MgPSB7bGluZTogcG9zLmxpbmUrMSwgY2g6IDB9OwogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICBmcm9tOiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiB0aGlzLnBvcy5mcm9tO30sCiAgICB0bzogZnVuY3Rpb24oKSB7aWYgKHRoaXMuYXRPY2N1cnJlbmNlKSByZXR1cm4gdGhpcy5wb3MudG87fSwKCiAgICByZXBsYWNlOiBmdW5jdGlvbihuZXdUZXh0KSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgaWYgKHRoaXMuYXRPY2N1cnJlbmNlKQogICAgICAgIHNlbGYucG9zLnRvID0gdGhpcy5jbS5yZXBsYWNlUmFuZ2UobmV3VGV4dCwgc2VsZi5wb3MuZnJvbSwgc2VsZi5wb3MudG8pOwogICAgfQogIH07CgogIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJnZXRTZWFyY2hDdXJzb3IiLCBmdW5jdGlvbihxdWVyeSwgcG9zLCBjYXNlRm9sZCkgewogICAgcmV0dXJuIG5ldyBTZWFyY2hDdXJzb3IodGhpcywgcXVlcnksIHBvcywgY2FzZUZvbGQpOwogIH0pOwp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/simple-hint.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3ItY29tcGxldGlvbnMgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIC13ZWJraXQtYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7CiAgLW1vei1ib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsKICBib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsKfQouQ29kZU1pcnJvci1jb21wbGV0aW9ucyBzZWxlY3QgewogIGJhY2tncm91bmQ6ICNmYWZhZmE7CiAgb3V0bGluZTogbm9uZTsKICBib3JkZXI6IG5vbmU7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDA7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/simple-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIENvZGVNaXJyb3Iuc2ltcGxlSGludCA9IGZ1bmN0aW9uKGVkaXRvciwgZ2V0SGludHMpIHsKICAgIC8vIFdlIHdhbnQgYSBzaW5nbGUgY3Vyc29yIHBvc2l0aW9uLgogICAgaWYgKGVkaXRvci5zb21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm47CiAgICB2YXIgcmVzdWx0ID0gZ2V0SGludHMoZWRpdG9yKTsKICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubGlzdC5sZW5ndGgpIHJldHVybjsKICAgIHZhciBjb21wbGV0aW9ucyA9IHJlc3VsdC5saXN0OwogICAgZnVuY3Rpb24gaW5zZXJ0KHN0cikgewogICAgICBlZGl0b3IucmVwbGFjZVJhbmdlKHN0ciwgcmVzdWx0LmZyb20sIHJlc3VsdC50byk7CiAgICB9CiAgICAvLyBXaGVuIHRoZXJlIGlzIG9ubHkgb25lIGNvbXBsZXRpb24sIHVzZSBpdCBkaXJlY3RseS4KICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPT0gMSkge2luc2VydChjb21wbGV0aW9uc1swXSk7IHJldHVybiB0cnVlO30KCiAgICAvLyBCdWlsZCB0aGUgc2VsZWN0IHdpZGdldAogICAgdmFyIGNvbXBsZXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjb21wbGV0ZS5jbGFzc05hbWUgPSAiQ29kZU1pcnJvci1jb21wbGV0aW9ucyI7CiAgICB2YXIgc2VsID0gY29tcGxldGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IikpOwogICAgLy8gT3BlcmEgZG9lc24ndCBtb3ZlIHRoZSBzZWxlY3Rpb24gd2hlbiBwcmVzc2luZyB1cC9kb3duIGluIGEKICAgIC8vIG11bHRpLXNlbGVjdCwgYnV0IGl0IGRvZXMgcHJvcGVybHkgc3VwcG9ydCB0aGUgc2l6ZSBwcm9wZXJ0eSBvbgogICAgLy8gc2luZ2xlLXNlbGVjdHMsIHNvIG5vIG11bHRpLXNlbGVjdCBpcyBuZWNlc3NhcnkuCiAgICBpZiAoIXdpbmRvdy5vcGVyYSkgc2VsLm11bHRpcGxlID0gdHJ1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIG9wdCA9IHNlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7CiAgICAgIG9wdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb21wbGV0aW9uc1tpXSkpOwogICAgfQogICAgc2VsLmZpcnN0Q2hpbGQuc2VsZWN0ZWQgPSB0cnVlOwogICAgc2VsLnNpemUgPSBNYXRoLm1pbigxMCwgY29tcGxldGlvbnMubGVuZ3RoKTsKICAgIHZhciBwb3MgPSBlZGl0b3IuY3Vyc29yQ29vcmRzKCk7CiAgICBjb21wbGV0ZS5zdHlsZS5sZWZ0ID0gcG9zLnggKyAicHgiOwogICAgY29tcGxldGUuc3R5bGUudG9wID0gcG9zLnlCb3QgKyAicHgiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb21wbGV0ZSk7CiAgICAvLyBJZiB3ZSdyZSBhdCB0aGUgZWRnZSBvZiB0aGUgc2NyZWVuLCB0aGVuIHdlIHdhbnQgdGhlIG1lbnUgdG8gYXBwZWFyIG9uIHRoZSBsZWZ0IG9mIHRoZSBjdXJzb3IuCiAgICB2YXIgd2luVyA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IE1hdGgubWF4KGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCk7CiAgICBpZih3aW5XIC0gcG9zLnggPCBzZWwuY2xpZW50V2lkdGgpCiAgICAgIGNvbXBsZXRlLnN0eWxlLmxlZnQgPSAocG9zLnggLSBzZWwuY2xpZW50V2lkdGgpICsgInB4IjsKICAgIC8vIEhhY2sgdG8gaGlkZSB0aGUgc2Nyb2xsYmFyLgogICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA8PSAxMCkKICAgICAgY29tcGxldGUuc3R5bGUud2lkdGggPSAoc2VsLmNsaWVudFdpZHRoIC0gMSkgKyAicHgiOwoKICAgIHZhciBkb25lID0gZmFsc2U7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGRvbmUpIHJldHVybjsKICAgICAgZG9uZSA9IHRydWU7CiAgICAgIGNvbXBsZXRlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29tcGxldGUpOwogICAgfQogICAgZnVuY3Rpb24gcGljaygpIHsKICAgICAgaW5zZXJ0KGNvbXBsZXRpb25zW3NlbC5zZWxlY3RlZEluZGV4XSk7CiAgICAgIGNsb3NlKCk7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlZGl0b3IuZm9jdXMoKTt9LCA1MCk7CiAgICB9CiAgICBDb2RlTWlycm9yLmNvbm5lY3Qoc2VsLCAiYmx1ciIsIGNsb3NlKTsKICAgIENvZGVNaXJyb3IuY29ubmVjdChzZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgdmFyIGNvZGUgPSBldmVudC5rZXlDb2RlOwogICAgICAvLyBFbnRlcgogICAgICBpZiAoY29kZSA9PSAxMykge0NvZGVNaXJyb3IuZV9zdG9wKGV2ZW50KTsgcGljaygpO30KICAgICAgLy8gRXNjYXBlCiAgICAgIGVsc2UgaWYgKGNvZGUgPT0gMjcpIHtDb2RlTWlycm9yLmVfc3RvcChldmVudCk7IGNsb3NlKCk7IGVkaXRvci5mb2N1cygpO30KICAgICAgZWxzZSBpZiAoY29kZSAhPSAzOCAmJiBjb2RlICE9IDQwKSB7CiAgICAgICAgY2xvc2UoKTsgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgLy8gUGFzcyB0aGUgZXZlbnQgdG8gdGhlIENvZGVNaXJyb3IgaW5zdGFuY2Ugc28gdGhhdCBpdCBjYW4gaGFuZGxlIHRoaW5ncyBsaWtlIGJhY2tzcGFjZSBwcm9wZXJseS4KICAgICAgICBlZGl0b3IudHJpZ2dlck9uS2V5RG93bihldmVudCk7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe0NvZGVNaXJyb3Iuc2ltcGxlSGludChlZGl0b3IsIGdldEhpbnRzKTt9LCA1MCk7CiAgICAgIH0KICAgIH0pOwogICAgQ29kZU1pcnJvci5jb25uZWN0KHNlbCwgImRibGNsaWNrIiwgcGljayk7CgogICAgc2VsLmZvY3VzKCk7CiAgICAvLyBPcGVyYSBzb21ldGltZXMgaWdub3JlcyBmb2N1c2luZyBhIGZyZXNobHkgY3JlYXRlZCBub2RlCiAgICBpZiAod2luZG93Lm9wZXJhKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYgKCFkb25lKSBzZWwuZm9jdXMoKTt9LCAxMDApOwogICAgcmV0dXJuIHRydWU7CiAgfTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDEyIGJ5IE1hcmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KClBsZWFzZSBub3RlIHRoYXQgc29tZSBzdWJkaXJlY3RvcmllcyBvZiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24KaW5jbHVkZSB0aGVpciBvd24gTElDRU5TRSBmaWxlcywgYW5kIGFyZSByZWxlYXNlZCB1bmRlciBkaWZmZXJlbnQKbGljZW5jZXMuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/clike.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbGlrZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMgfHwge30sCiAgICAgIGJsb2NrS2V5d29yZHMgPSBwYXJzZXJDb25maWcuYmxvY2tLZXl3b3JkcyB8fCB7fSwKICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sCiAgICAgIGhvb2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LAogICAgICBtdWx0aUxpbmVTdHJpbmdzID0gcGFyc2VyQ29uZmlnLm11bHRpTGluZVN0cmluZ3M7CiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xcL10vOwoKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoaG9va3NbY2hdKSB7CiAgICAgIHZhciByZXN1bHQgPSBob29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfQogICAgaWYgKGNoID09ICIvIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiKiIpKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7CiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgewogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7CiAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9CiAgICBpZiAoYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuICJhdG9tIjsKICAgIHJldHVybiAid29yZCI7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7CiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO30KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQgfHwgIShlc2NhcGVkIHx8IG11bHRpTGluZVN0cmluZ3MpKQogICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmFsaWduID0gYWxpZ247CiAgICB0aGlzLnByZXYgPSBwcmV2OwogIH0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTsKICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiB8fCB0ID09ICJ9IikKICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkOwogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICAvLyBJbnRlcmZhY2UKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogbnVsbCwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJ0b3AiLCBmYWxzZSksCiAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IiB8fCBzdHlsZSA9PSAibWV0YSIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IikgewogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkKICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIDA7CiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiICYmIGZpcnN0Q2hhciA9PSAifSIpIGN0eCA9IGN0eC5wcmV2OwogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7CiAgICAgIGVsc2UgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZSByZXR1cm4gY3R4LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ7fSIKICB9Owp9KTsKCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGNLZXl3b3JkcyA9ICJhdXRvIGlmIGJyZWFrIGludCBjYXNlIGxvbmcgY2hhciByZWdpc3RlciBjb250aW51ZSByZXR1cm4gZGVmYXVsdCBzaG9ydCBkbyBzaXplb2YgIiArCiAgICAiZG91YmxlIHN0YXRpYyBlbHNlIHN0cnVjdCBlbnRyeSBzd2l0Y2ggZXh0ZXJuIHR5cGVkZWYgZmxvYXQgdW5pb24gZm9yIHVuc2lnbmVkICIgKwogICAgImdvdG8gd2hpbGUgZW51bSB2b2lkIGNvbnN0IHNpZ25lZCB2b2xhdGlsZSI7CgogIGZ1bmN0aW9uIGNwcEhvb2soc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKCFzdGF0ZS5zdGFydE9mTGluZSkgcmV0dXJuIGZhbHNlOwogICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgcmV0dXJuICJtZXRhIjsKICB9CgogIC8vIEMjLXN0eWxlIHN0cmluZ3Mgd2hlcmUgIiIgZXNjYXBlcyBhIHF1b3RlLgogIGZ1bmN0aW9uIHRva2VuQXRTdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG5leHQ7CiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChuZXh0ID09ICciJyAmJiAhc3RyZWFtLmVhdCgnIicpKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gInN0cmluZyI7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jc3JjIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcyhjS2V5d29yZHMpLAogICAgYmxvY2tLZXl3b3Jkczogd29yZHMoImNhc2UgZG8gZWxzZSBmb3IgaWYgc3dpdGNoIHdoaWxlIHN0cnVjdCIpLAogICAgYXRvbXM6IHdvcmRzKCJudWxsIiksCiAgICBob29rczogeyIjIjogY3BwSG9va30KICB9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jKytzcmMiLCB7CiAgICBuYW1lOiAiY2xpa2UiLAogICAga2V5d29yZHM6IHdvcmRzKGNLZXl3b3JkcyArICIgYXNtIGR5bmFtaWNfY2FzdCBuYW1lc3BhY2UgcmVpbnRlcnByZXRfY2FzdCB0cnkgYm9vbCBleHBsaWNpdCBuZXcgIiArCiAgICAgICAgICAgICAgICAgICAgInN0YXRpY19jYXN0IHR5cGVpZCBjYXRjaCBvcGVyYXRvciB0ZW1wbGF0ZSB0eXBlbmFtZSBjbGFzcyBmcmllbmQgcHJpdmF0ZSAiICsKICAgICAgICAgICAgICAgICAgICAidGhpcyB1c2luZyBjb25zdF9jYXN0IGlubGluZSBwdWJsaWMgdGhyb3cgdmlydHVhbCBkZWxldGUgbXV0YWJsZSBwcm90ZWN0ZWQgIiArCiAgICAgICAgICAgICAgICAgICAgIndjaGFyX3QiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN0cnVjdCBzd2l0Y2ggdHJ5IHdoaWxlIiksCiAgICBhdG9tczogd29yZHMoInRydWUgZmFsc2UgbnVsbCIpLAogICAgaG9va3M6IHsiIyI6IGNwcEhvb2t9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtamF2YSIsIHsKICAgIG5hbWU6ICJjbGlrZSIsCiAgICBrZXl3b3Jkczogd29yZHMoImFic3RyYWN0IGFzc2VydCBib29sZWFuIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgIiArIAogICAgICAgICAgICAgICAgICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCAiICsKICAgICAgICAgICAgICAgICAgICAiaW5zdGFuY2VvZiBpbnQgaW50ZXJmYWNlIGxvbmcgbmF0aXZlIG5ldyBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyAiICsKICAgICAgICAgICAgICAgICAgICAicmV0dXJuIHNob3J0IHN0YXRpYyBzdHJpY3RmcCBzdXBlciBzd2l0Y2ggc3luY2hyb25pemVkIHRoaXMgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCAiICsKICAgICAgICAgICAgICAgICAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICB9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtY3NoYXJwIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcygiYWJzdHJhY3QgYXMgYmFzZSBib29sIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNoZWNrZWQgY2xhc3MgY29uc3QgY29udGludWUgZGVjaW1hbCIgKyAKICAgICAgICAgICAgICAgICAgICAiIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmluYWxseSBmaXhlZCBmbG9hdCBmb3IiICsgCiAgICAgICAgICAgICAgICAgICAgIiBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBvYmplY3QiICsgCiAgICAgICAgICAgICAgICAgICAgIiBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCIgKyAKICAgICAgICAgICAgICAgICAgICAiIHNpemVvZiBzdGFja2FsbG9jIHN0YXRpYyBzdHJpbmcgc3RydWN0IHN3aXRjaCB0aGlzIHRocm93IHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQiICsgCiAgICAgICAgICAgICAgICAgICAgIiB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9pZCB2b2xhdGlsZSB3aGlsZSBhZGQgYWxpYXMgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZHluYW1pYyBmcm9tIGdldCIgKyAKICAgICAgICAgICAgICAgICAgICAiIGdsb2JhbCBncm91cCBpbnRvIGpvaW4gbGV0IG9yZGVyYnkgcGFydGlhbCByZW1vdmUgc2VsZWN0IHNldCB2YWx1ZSB2YXIgeWllbGQiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGZvcmVhY2ggaWYgc3RydWN0IHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgnIicpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQXRTdHJpbmc7CiAgICAgICAgICByZXR1cm4gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgICAgfQogICAgfQogIH0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXNjYWxhIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcygKICAgICAgCiAgICAgIC8qIHNjYWxhICovCiAgICAgICJhYnN0cmFjdCBjYXNlIGNhdGNoIGNsYXNzIGRlZiBkbyBlbHNlIGV4dGVuZHMgZmFsc2UgZmluYWwgZmluYWxseSBmb3IgZm9yU29tZSBpZiAiICsKICAgICAgImltcGxpY2l0IGltcG9ydCBsYXp5IG1hdGNoIG5ldyBudWxsIG9iamVjdCBvdmVycmlkZSBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHJldHVybiAiICsKICAgICAgInNlYWxlZCBzdXBlciB0aGlzIHRocm93IHRyYWl0IHRyeSB0cnllIHR5cGUgdmFsIHZhciB3aGlsZSB3aXRoIHlpZWxkIF8gOiA9ID0+IDwtIDw6ICIgKwogICAgICAiPCUgPjogIyBAICIgKwogICAgICAgICAgICAgICAgICAgIAogICAgICAvKiBwYWNrYWdlIHNjYWxhICovCiAgICAgICJhc3NlcnQgYXNzdW1lIHJlcXVpcmUgcHJpbnQgcHJpbnRsbiBwcmludGYgcmVhZExpbmUgcmVhZEJvb2xlYW4gcmVhZEJ5dGUgcmVhZFNob3J0ICIgKwogICAgICAicmVhZENoYXIgcmVhZEludCByZWFkTG9uZyByZWFkRmxvYXQgcmVhZERvdWJsZSAiICsKICAgICAgCiAgICAgICJBbnlWYWwgQXBwIEFwcGxpY2F0aW9uIEFycmF5IEJ1ZmZlcmVkSXRlcmF0b3IgQmlnRGVjaW1hbCBCaWdJbnQgQ2hhciBDb25zb2xlIEVpdGhlciAiICsKICAgICAgIkVudW1lcmF0aW9uIEVxdWl2IEVycm9yIEV4Y2VwdGlvbiBGcmFjdGlvbmFsIEZ1bmN0aW9uIEluZGV4ZWRTZXEgSW50ZWdyYWwgSXRlcmFibGUgIiArCiAgICAgICJJdGVyYXRvciBMaXN0IE1hcCBOdW1lcmljIE5pbCBOb3ROdWxsIE9wdGlvbiBPcmRlcmVkIE9yZGVyaW5nIFBhcnRpYWxGdW5jdGlvbiBQYXJ0aWFsT3JkZXJpbmcgIiArCiAgICAgICJQcm9kdWN0IFByb3h5IFJhbmdlIFJlc3BvbmRlciBTZXEgU2VyaWFsaXphYmxlIFNldCBTcGVjaWFsaXphYmxlIFN0cmVhbSBTdHJpbmdCdWlsZGVyICIgKwogICAgICAiU3RyaW5nQ29udGV4dCBTeW1ib2wgVGhyb3dhYmxlIFRyYXZlcnNhYmxlIFRyYXZlcnNhYmxlT25jZSBUdXBsZSBVbml0IFZlY3RvciA6OiAjOjogIiArCiAgICAgIAogICAgICAvKiBwYWNrYWdlIGphdmEubGFuZyAqLyAgICAgICAgICAgIAogICAgICAiQm9vbGVhbiBCeXRlIENoYXJhY3RlciBDaGFyU2VxdWVuY2UgQ2xhc3MgQ2xhc3NMb2FkZXIgQ2xvbmVhYmxlIENvbXBhcmFibGUgIiArCiAgICAgICJDb21waWxlciBEb3VibGUgRXhjZXB0aW9uIEZsb2F0IEludGVnZXIgTG9uZyBNYXRoIE51bWJlciBPYmplY3QgUGFja2FnZSBQYWlyIFByb2Nlc3MgIiArCiAgICAgICJSdW50aW1lIFJ1bm5hYmxlIFNlY3VyaXR5TWFuYWdlciBTaG9ydCBTdGFja1RyYWNlRWxlbWVudCBTdHJpY3RNYXRoIFN0cmluZyAiICsKICAgICAgIlN0cmluZ0J1ZmZlciBTeXN0ZW0gVGhyZWFkIFRocmVhZEdyb3VwIFRocmVhZExvY2FsIFRocm93YWJsZSBUcmlwbGUgVm9pZCIKICAgICAgCiAgICAgIAogICAgKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGZvclNvbWUgaWYgbWF0Y2ggc3dpdGNoIHRyeSB3aGlsZSIpLAogICAgYXRvbXM6IHdvcmRzKCJ0cnVlIGZhbHNlIG51bGwiKSwKICAgIGhvb2tzOiB7CiAgICAgICJAIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgICAgIHJldHVybiAibWV0YSI7CiAgICAgIH0KICAgIH0KICB9KTsKfSgpKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEMtbGlrZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY2xpa2UuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBpbnNldCAjZGVlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDLWxpa2UgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovKiBDIGRlbW8gY29kZSAqLwoKI2luY2x1ZGUgPHptcS5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8c2VtYXBob3JlLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgoKdHlwZWRlZiBzdHJ1Y3QgewogIHZvaWQqIGFyZ19zb2NrZXQ7CiAgem1xX21zZ190KiBhcmdfbXNnOwogIGNoYXIqIGFyZ19zdHJpbmc7CiAgdW5zaWduZWQgbG9uZyBhcmdfbGVuOwogIGludCBhcmdfaW50LCBhcmdfY29tbWFuZDsKCiAgaW50IHNpZ25hbF9mZDsKICBpbnQgcGFkOwogIHZvaWQqIGNvbnRleHQ7CiAgc2VtX3Qgc2VtOwp9IGFjbF96bXFfY29udGV4dDsKCiNkZWZpbmUgcChYKSAoY29udGV4dC0+YXJnXyMjWCkKCnZvaWQqIHptcV90aHJlYWQodm9pZCogY29udGV4dF9wb2ludGVyKSB7CiAgYWNsX3ptcV9jb250ZXh0KiBjb250ZXh0ID0gKGFjbF96bXFfY29udGV4dCopY29udGV4dF9wb2ludGVyOwogIGNoYXIgb2sgPSAnSycsIGVyciA9ICdYJzsKICBpbnQgcmVzOwoKICB3aGlsZSAoMSkgewogICAgd2hpbGUgKChyZXMgPSBzZW1fd2FpdCgmYW1wO2NvbnRleHQtPnNlbSkpID09IEVJTlRSKTsKICAgIGlmIChyZXMpIHt3cml0ZShjb250ZXh0LT5zaWduYWxfZmQsICZhbXA7ZXJyLCAxKTsgZ290byBjbGVhbnVwO30KICAgIHN3aXRjaChwKGNvbW1hbmQpKSB7CiAgICBjYXNlIDA6IGdvdG8gY2xlYW51cDsKICAgIGNhc2UgMTogcChzb2NrZXQpID0gem1xX3NvY2tldChjb250ZXh0LT5jb250ZXh0LCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgMjogcChpbnQpID0gem1xX2Nsb3NlKHAoc29ja2V0KSk7IGJyZWFrOwogICAgY2FzZSAzOiBwKGludCkgPSB6bXFfYmluZChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA0OiBwKGludCkgPSB6bXFfY29ubmVjdChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA1OiBwKGludCkgPSB6bXFfZ2V0c29ja29wdChwKHNvY2tldCksIHAoaW50KSwgKHZvaWQqKXAoc3RyaW5nKSwgJmFtcDtwKGxlbikpOyBicmVhazsKICAgIGNhc2UgNjogcChpbnQpID0gem1xX3NldHNvY2tvcHQocChzb2NrZXQpLCBwKGludCksICh2b2lkKilwKHN0cmluZyksIHAobGVuKSk7IGJyZWFrOwogICAgY2FzZSA3OiBwKGludCkgPSB6bXFfc2VuZChwKHNvY2tldCksIHAobXNnKSwgcChpbnQpKTsgYnJlYWs7CiAgICBjYXNlIDg6IHAoaW50KSA9IHptcV9yZWN2KHAoc29ja2V0KSwgcChtc2cpLCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgOTogcChpbnQpID0gem1xX3BvbGwocChzb2NrZXQpLCBwKGludCksIHAobGVuKSk7IGJyZWFrOwogICAgfQogICAgcChjb21tYW5kKSA9IGVycm5vOwogICAgd3JpdGUoY29udGV4dC0+c2lnbmFsX2ZkLCAmYW1wO29rLCAxKTsKICB9CiBjbGVhbnVwOgogIGNsb3NlKGNvbnRleHQtPnNpZ25hbF9mZCk7CiAgZnJlZShjb250ZXh0X3BvaW50ZXIpOwogIHJldHVybiAwOwp9Cgp2b2lkKiB6bXFfdGhyZWFkX2luaXQodm9pZCogem1xX2NvbnRleHQsIGludCBzaWduYWxfZmQpIHsKICBhY2xfem1xX2NvbnRleHQqIGNvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKGFjbF96bXFfY29udGV4dCkpOwogIHB0aHJlYWRfdCB0aHJlYWQ7CgogIGNvbnRleHQtPmNvbnRleHQgPSB6bXFfY29udGV4dDsKICBjb250ZXh0LT5zaWduYWxfZmQgPSBzaWduYWxfZmQ7CiAgc2VtX2luaXQoJmFtcDtjb250ZXh0LT5zZW0sIDEsIDApOwogIHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCAwLCAmYW1wO3ptcV90aHJlYWQsIGNvbnRleHQpOwogIHB0aHJlYWRfZGV0YWNoKHRocmVhZCk7CiAgcmV0dXJuIGNvbnRleHQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtY3NyYyIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgbW9kZSB0aGF0IHRyaWVzIHRvIGhhbmRsZSBDLWxpa2UgbGFuZ3VhZ2VzIGFzIHdlbGwgYXMgaXQKICAgIGNhbi4gVGFrZXMgdHdvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczogPGNvZGU+a2V5d29yZHM8L2NvZGU+LCBhbgogICAgb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUga2V5d29yZHMgaW4gdGhlIGxhbmd1YWdlLAogICAgYW5kIDxjb2RlPnVzZUNQUDwvY29kZT4sIHdoaWNoIGRldGVybWluZXMgd2hldGhlciBDIHByZXByb2Nlc3NvcgogICAgZGlyZWN0aXZlcyBhcmUgcmVjb2duaXplZC48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1jc3JjPC9jb2RlPgogICAgKEMgY29kZSksIDxjb2RlPnRleHQveC1jKytzcmM8L2NvZGU+IChDKysKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtamF2YTwvY29kZT4gKEphdmEKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtY3NoYXJwPC9jb2RlPiAoQyMpLjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/scala.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEMtbGlrZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUvYW1iaWFuY2UuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY2xpa2UuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlPgogICAgICBib2R5CiAgICAgIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXgtd2lkdGg6aW5oZXJpdDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgaHRtbCwgZm9ybSwgLkNvZGVNaXJyb3IsIC5Db2RlTWlycm9yLXNjcm9sbAogICAgICB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOyAgICAgICAgCiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5Pgo8Zm9ybT4KPHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KCiAgLyogICAgICAgICAgICAgICAgICAgICBfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlwKICAqKiAgICAgX19fX19fX18gX19fICAgLyAvICBfX18gICAgIFNjYWxhIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgogICoqICAgIC8gX18vIF9fLy8gXyB8IC8gLyAgLyBfIHwgICAgKGMpIDIwMDMtMjAxMSwgTEFNUC9FUEZMICAgICAgICAgICAgICoqCiAgKiogIF9fXCBcLyAvX18vIF9fIHwvIC9fXy8gX18gfCAgICBodHRwOi8vc2NhbGEtbGFuZy5vcmcvICAgICAgICAgICAgICAgKioKICAqKiAvX19fXy9cX19fL18vIHxfL19fX18vXy8gfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgogICoqICAgICAgICAgICAgICAgICAgICAgICAgICB8LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCiAgXCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgcGFja2FnZSBzY2FsYS5jb2xsZWN0aW9uCgogIGltcG9ydCBnZW5lcmljLl8KICBpbXBvcnQgbXV0YWJsZS57IEJ1aWxkZXIsIExpc3RCdWZmZXIgfQogIGltcG9ydCBhbm5vdGF0aW9uLnt0YWlscmVjLCBtaWdyYXRpb24sIGJyaWRnZX0KICBpbXBvcnQgYW5ub3RhdGlvbi51bmNoZWNrZWQueyB1bmNoZWNrZWRWYXJpYW5jZSA9PiB1ViB9CiAgaW1wb3J0IHBhcmFsbGVsLlBhckl0ZXJhYmxlCgogIC8qKiBBIHRlbXBsYXRlIHRyYWl0IGZvciB0cmF2ZXJzYWJsZSBjb2xsZWN0aW9ucyBvZiB0eXBlIGBUcmF2ZXJzYWJsZVtBXWAuCiAgICogIAogICAqICAkdHJhdmVyc2FibGVJbmZvCiAgICogIEBkZWZpbmUgbXV0YWJpbGl0eQogICAqICBAZGVmaW5lIHRyYXZlcnNhYmxlSW5mbwogICAqICBUaGlzIGlzIGEgYmFzZSB0cmFpdCBvZiBhbGwga2luZHMgb2YgJG11dGFiaWxpdHkgU2NhbGEgY29sbGVjdGlvbnMuIEl0CiAgICogIGltcGxlbWVudHMgdGhlIGJlaGF2aW9yIGNvbW1vbiB0byBhbGwgY29sbGVjdGlvbnMsIGluIHRlcm1zIG9mIGEgbWV0aG9kCiAgICogIGBmb3JlYWNoYCB3aXRoIHNpZ25hdHVyZToKICAgKiB7e3sKICAgKiAgICAgZGVmIGZvcmVhY2hbVV0oZjogRWxlbSA9PiBVKTogVW5pdAogICAqIH19fQogICAqICBDb2xsZWN0aW9uIGNsYXNzZXMgbWl4aW5nIGluIHRoaXMgdHJhaXQgcHJvdmlkZSBhIGNvbmNyZXRlIAogICAqICBgZm9yZWFjaGAgbWV0aG9kIHdoaWNoIHRyYXZlcnNlcyBhbGwgdGhlCiAgICogIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgY29sbGVjdGlvbiwgYXBwbHlpbmcgYSBnaXZlbiBmdW5jdGlvbiB0byBlYWNoLgogICAqICBUaGV5IGFsc28gbmVlZCB0byBwcm92aWRlIGEgbWV0aG9kIGBuZXdCdWlsZGVyYAogICAqICB3aGljaCBjcmVhdGVzIGEgYnVpbGRlciBmb3IgY29sbGVjdGlvbnMgb2YgdGhlIHNhbWUga2luZC4KICAgKiAgCiAgICogIEEgdHJhdmVyc2FibGUgY2xhc3MgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgdHdvIHByb3BlcnRpZXM6IHN0cmljdG5lc3MKICAgKiAgYW5kIG9yZGVyZWRuZXNzLiBOZWl0aGVyIGlzIHJlcHJlc2VudGVkIGFzIGEgdHlwZS4KICAgKiAgCiAgICogIFRoZSBpbnN0YW5jZXMgb2YgYSBzdHJpY3QgY29sbGVjdGlvbiBjbGFzcyBoYXZlIGFsbCB0aGVpciBlbGVtZW50cwogICAqICBjb21wdXRlZCBiZWZvcmUgdGhleSBjYW4gYmUgdXNlZCBhcyB2YWx1ZXMuIEJ5IGNvbnRyYXN0LCBpbnN0YW5jZXMgb2YKICAgKiAgYSBub24tc3RyaWN0IGNvbGxlY3Rpb24gY2xhc3MgbWF5IGRlZmVyIGNvbXB1dGF0aW9uIG9mIHNvbWUgb2YgdGhlaXIKICAgKiAgZWxlbWVudHMgdW50aWwgYWZ0ZXIgdGhlIGluc3RhbmNlIGlzIGF2YWlsYWJsZSBhcyBhIHZhbHVlLgogICAqICBBIHR5cGljYWwgZXhhbXBsZSBvZiBhIG5vbi1zdHJpY3QgY29sbGVjdGlvbiBjbGFzcyBpcyBhCiAgICogIDxhIGhyZWY9Ii4uL2ltbXV0YWJsZS9TdHJlYW0uaHRtbCIgdGFyZ2V0PSJDb250ZW50RnJhbWUiPgogICAqICBgc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuU3RyZWFtYDwvYT4uCiAgICogIEEgbW9yZSBnZW5lcmFsIGNsYXNzIG9mIGV4YW1wbGVzIGFyZSBgVHJhdmVyc2FibGVWaWV3c2AuCiAgICogIAogICAqICBJZiBhIGNvbGxlY3Rpb24gaXMgYW4gaW5zdGFuY2Ugb2YgYW4gb3JkZXJlZCBjb2xsZWN0aW9uIGNsYXNzLCB0cmF2ZXJzaW5nCiAgICogIGl0cyBlbGVtZW50cyB3aXRoIGBmb3JlYWNoYCB3aWxsIGFsd2F5cyB2aXNpdCBlbGVtZW50cyBpbiB0aGUKICAgKiAgc2FtZSBvcmRlciwgZXZlbiBmb3IgZGlmZmVyZW50IHJ1bnMgb2YgdGhlIHByb2dyYW0uIElmIHRoZSBjbGFzcyBpcyBub3QKICAgKiAgb3JkZXJlZCwgYGZvcmVhY2hgIGNhbiB2aXNpdCBlbGVtZW50cyBpbiBkaWZmZXJlbnQgb3JkZXJzIGZvcgogICAqICBkaWZmZXJlbnQgcnVucyAoYnV0IGl0IHdpbGwga2VlcCB0aGUgc2FtZSBvcmRlciBpbiB0aGUgc2FtZSBydW4pLicKICAgKiAKICAgKiAgQSB0eXBpY2FsIGV4YW1wbGUgb2YgYSBjb2xsZWN0aW9uIGNsYXNzIHdoaWNoIGlzIG5vdCBvcmRlcmVkIGlzIGEKICAgKiAgYEhhc2hNYXBgIG9mIG9iamVjdHMuIFRoZSB0cmF2ZXJzYWwgb3JkZXIgZm9yIGhhc2ggbWFwcyB3aWxsCiAgICogIGRlcGVuZCBvbiB0aGUgaGFzaCBjb2RlcyBvZiBpdHMgZWxlbWVudHMsIGFuZCB0aGVzZSBoYXNoIGNvZGVzIG1pZ2h0CiAgICogIGRpZmZlciBmcm9tIG9uZSBydW4gdG8gdGhlIG5leHQuIEJ5IGNvbnRyYXN0LCBhIGBMaW5rZWRIYXNoTWFwYAogICAqICBpcyBvcmRlcmVkIGJlY2F1c2UgaXQncyBgZm9yZWFjaGAgbWV0aG9kIHZpc2l0cyBlbGVtZW50cyBpbiB0aGUKICAgKiAgb3JkZXIgdGhleSB3ZXJlIGluc2VydGVkIGludG8gdGhlIGBIYXNoTWFwYC4KICAgKgogICAqICBAYXV0aG9yIE1hcnRpbiBPZGVyc2t5CiAgICogIEB2ZXJzaW9uIDIuOAogICAqICBAc2luY2UgICAyLjgKICAgKiAgQHRwYXJhbSBBICAgIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIGNvbGxlY3Rpb24KICAgKiAgQHRwYXJhbSBSZXByIHRoZSB0eXBlIG9mIHRoZSBhY3R1YWwgY29sbGVjdGlvbiBjb250YWluaW5nIHRoZSBlbGVtZW50cy4KICAgKgogICAqICBAZGVmaW5lIENvbGwgVHJhdmVyc2FibGUKICAgKiAgQGRlZmluZSBjb2xsIHRyYXZlcnNhYmxlIGNvbGxlY3Rpb24KICAgKi8KICB0cmFpdCBUcmF2ZXJzYWJsZUxpa2VbK0EsICtSZXByXSBleHRlbmRzIEhhc05ld0J1aWxkZXJbQSwgUmVwcl0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBGaWx0ZXJNb25hZGljW0EsIFJlcHJdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBUcmF2ZXJzYWJsZU9uY2VbQV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEdlblRyYXZlcnNhYmxlTGlrZVtBLCBSZXByXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggUGFyYWxsZWxpemFibGVbQSwgUGFySXRlcmFibGVbQV1dCiAgewogICAgc2VsZiA9PgoKICAgIGltcG9ydCBUcmF2ZXJzYWJsZS5icmVha3MuXwoKICAgIC8qKiBUaGUgdHlwZSBpbXBsZW1lbnRpbmcgdGhpcyB0cmF2ZXJzYWJsZSAqLwogICAgcHJvdGVjdGVkIHR5cGUgU2VsZiA9IFJlcHIKCiAgICAvKiogVGhlIGNvbGxlY3Rpb24gb2YgdHlwZSAkY29sbCB1bmRlcmx5aW5nIHRoaXMgYFRyYXZlcnNhYmxlTGlrZWAgb2JqZWN0LgogICAgICogIEJ5IGRlZmF1bHQgdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyB0aGUgYFRyYXZlcnNhYmxlTGlrZWAgb2JqZWN0IGl0c2VsZiwKICAgICAqICBidXQgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbi4KICAgICAqLwogICAgZGVmIHJlcHI6IFJlcHIgPSB0aGlzLmFzSW5zdGFuY2VPZltSZXByXQoKICAgIC8qKiBUaGUgdW5kZXJseWluZyBjb2xsZWN0aW9uIHNlZW4gYXMgYW4gaW5zdGFuY2Ugb2YgYCRDb2xsYC4KICAgICAqICBCeSBkZWZhdWx0IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBvYmplY3QgaXRzZWxmLAogICAgICogIGJ1dCB0aGlzIGNhbiBiZSBvdmVycmlkZGVuLgogICAgICovCiAgICBwcm90ZWN0ZWRbdGhpc10gZGVmIHRoaXNDb2xsZWN0aW9uOiBUcmF2ZXJzYWJsZVtBXSA9IHRoaXMuYXNJbnN0YW5jZU9mW1RyYXZlcnNhYmxlW0FdXQoKICAgIC8qKiBBIGNvbnZlcnNpb24gZnJvbSBjb2xsZWN0aW9ucyBvZiB0eXBlIGBSZXByYCB0byBgJENvbGxgIG9iamVjdHMuCiAgICAgKiAgQnkgZGVmYXVsdCB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGp1c3QgYSBjYXN0LCBidXQgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbi4KICAgICAqLwogICAgcHJvdGVjdGVkW3RoaXNdIGRlZiB0b0NvbGxlY3Rpb24ocmVwcjogUmVwcik6IFRyYXZlcnNhYmxlW0FdID0gcmVwci5hc0luc3RhbmNlT2ZbVHJhdmVyc2FibGVbQV1dCgogICAgLyoqIENyZWF0ZXMgYSBuZXcgYnVpbGRlciBmb3IgdGhpcyBjb2xsZWN0aW9uIHR5cGUuCiAgICAgKi8KICAgIHByb3RlY3RlZFt0aGlzXSBkZWYgbmV3QnVpbGRlcjogQnVpbGRlcltBLCBSZXByXQoKICAgIHByb3RlY3RlZFt0aGlzXSBkZWYgcGFyQ29tYmluZXIgPSBQYXJJdGVyYWJsZS5uZXdDb21iaW5lcltBXQoKICAgIC8qKiBBcHBsaWVzIGEgZnVuY3Rpb24gYGZgIHRvIGFsbCBlbGVtZW50cyBvZiB0aGlzICRjb2xsLgogICAgICogIAogICAgICogICAgTm90ZTogdGhpcyBtZXRob2QgdW5kZXJsaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBtb3N0IG90aGVyIGJ1bGsgb3BlcmF0aW9ucy4KICAgICAqICAgIEl0J3MgaW1wb3J0YW50IHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZCBpbiBhbiBlZmZpY2llbnQgd2F5LgogICAgICogIAogICAgICoKICAgICAqICBAcGFyYW0gIGYgICB0aGUgZnVuY3Rpb24gdGhhdCBpcyBhcHBsaWVkIGZvciBpdHMgc2lkZS1lZmZlY3QgdG8gZXZlcnkgZWxlbWVudC4KICAgICAqICAgICAgICAgICAgICBUaGUgcmVzdWx0IG9mIGZ1bmN0aW9uIGBmYCBpcyBkaXNjYXJkZWQuCiAgICAgKiAgICAgICAgICAgICAgCiAgICAgKiAgQHRwYXJhbSAgVSAgdGhlIHR5cGUgcGFyYW1ldGVyIGRlc2NyaWJpbmcgdGhlIHJlc3VsdCBvZiBmdW5jdGlvbiBgZmAuIAogICAgICogICAgICAgICAgICAgIFRoaXMgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIGlnbm9yZWQuIFR5cGljYWxseSBgVWAgaXMgYFVuaXRgLAogICAgICogICAgICAgICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBuZWNlc3NhcnkuCiAgICAgKgogICAgICogIEB1c2VjYXNlIGRlZiBmb3JlYWNoKGY6IEEgPT4gVW5pdCk6IFVuaXQKICAgICAqLwogICAgZGVmIGZvcmVhY2hbVV0oZjogQSA9PiBVKTogVW5pdAoKICAgIC8qKiBUZXN0cyB3aGV0aGVyIHRoaXMgJGNvbGwgaXMgZW1wdHkuCiAgICAgKgogICAgICogIEByZXR1cm4gICAgYHRydWVgIGlmIHRoZSAkY29sbCBjb250YWluIG5vIGVsZW1lbnRzLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAqLwogICAgZGVmIGlzRW1wdHk6IEJvb2xlYW4gPSB7CiAgICAgIHZhciByZXN1bHQgPSB0cnVlCiAgICAgIGJyZWFrYWJsZSB7CiAgICAgICAgZm9yICh4IDwtIHRoaXMpIHsKICAgICAgICAgIHJlc3VsdCA9IGZhbHNlCiAgICAgICAgICBicmVhawogICAgICAgIH0KICAgICAgfQogICAgICByZXN1bHQKICAgIH0KCiAgICAvKiogVGVzdHMgd2hldGhlciB0aGlzICRjb2xsIGlzIGtub3duIHRvIGhhdmUgYSBmaW5pdGUgc2l6ZS4KICAgICAqICBBbGwgc3RyaWN0IGNvbGxlY3Rpb25zIGFyZSBrbm93biB0byBoYXZlIGZpbml0ZSBzaXplLiBGb3IgYSBub24tc3RyaWN0IGNvbGxlY3Rpb24KICAgICAqICBzdWNoIGFzIGBTdHJlYW1gLCB0aGUgcHJlZGljYXRlIHJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBoYXZlIGJlZW4gY29tcHV0ZWQuCiAgICAgKiAgSXQgcmV0dXJucyBgZmFsc2VgIGlmIHRoZSBzdHJlYW0gaXMgbm90IHlldCBldmFsdWF0ZWQgdG8gdGhlIGVuZC4KICAgICAqCiAgICAgKiAgTm90ZTogbWFueSBjb2xsZWN0aW9uIG1ldGhvZHMgd2lsbCBub3Qgd29yayBvbiBjb2xsZWN0aW9ucyBvZiBpbmZpbml0ZSBzaXplcy4gCiAgICAgKgogICAgICogIEByZXR1cm4gIGB0cnVlYCBpZiB0aGlzIGNvbGxlY3Rpb24gaXMga25vd24gdG8gaGF2ZSBmaW5pdGUgc2l6ZSwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgKi8KICAgIGRlZiBoYXNEZWZpbml0ZVNpemUgPSB0cnVlCgogICAgZGVmICsrW0IgPjogQSwgVGhhdF0odGhhdDogR2VuVHJhdmVyc2FibGVPbmNlW0JdKShpbXBsaWNpdCBiZjogQ2FuQnVpbGRGcm9tW1JlcHIsIEIsIFRoYXRdKTogVGhhdCA9IHsKICAgICAgdmFsIGIgPSBiZihyZXByKQogICAgICBpZiAodGhhdC5pc0luc3RhbmNlT2ZbSW5kZXhlZFNlcUxpa2VbXywgX11dKSBiLnNpemVIaW50KHRoaXMsIHRoYXQuc2VxLnNpemUpCiAgICAgIGIgKys9IHRoaXNDb2xsZWN0aW9uCiAgICAgIGIgKys9IHRoYXQuc2VxCiAgICAgIGIucmVzdWx0CiAgICB9CgogICAgQGJyaWRnZQogICAgZGVmICsrW0IgPjogQSwgVGhhdF0odGhhdDogVHJhdmVyc2FibGVPbmNlW0JdKShpbXBsaWNpdCBiZjogQ2FuQnVpbGRGcm9tW1JlcHIsIEIsIFRoYXRdKTogVGhhdCA9CiAgICAgICsrKHRoYXQ6IEdlblRyYXZlcnNhYmxlT25jZVtCXSkoYmYpCgogICAgLyoqIENvbmNhdGVuYXRlcyB0aGlzICRjb2xsIHdpdGggdGhlIGVsZW1lbnRzIG9mIGEgdHJhdmVyc2FibGUgY29sbGVjdGlvbi4KICAgICAqICBJdCBkaWZmZXJzIGZyb20gKysgaW4gdGhhdCB0aGUgcmlnaHQgb3BlcmFuZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZQogICAgICogIHJlc3VsdGluZyBjb2xsZWN0aW9uIHJhdGhlciB0aGFuIHRoZSBsZWZ0IG9uZS4KICAgICAqIAogICAgICogIEBwYXJhbSB0aGF0ICAgdGhlIHRyYXZlcnNhYmxlIHRvIGFwcGVuZC4KICAgICAqICBAdHBhcmFtIEIgICAgIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24uIAogICAgICogIEB0cGFyYW0gVGhhdCAgJHRoYXRpbmZvCiAgICAgKiAgQHBhcmFtIGJmICAgICAkYmZpbmZvCiAgICAgKiAgQHJldHVybiAgICAgICBhIG5ldyBjb2xsZWN0aW9uIG9mIHR5cGUgYFRoYXRgIHdoaWNoIGNvbnRhaW5zIGFsbCBlbGVtZW50cwogICAgICogICAgICAgICAgICAgICAgb2YgdGhpcyAkY29sbCBmb2xsb3dlZCBieSBhbGwgZWxlbWVudHMgb2YgYHRoYXRgLgogICAgICogCiAgICAgKiAgQHVzZWNhc2UgZGVmICsrOltCXSh0aGF0OiBUcmF2ZXJzYWJsZU9uY2VbQl0pOiAkQ29sbFtCXQogICAgICogIAogICAgICogIEByZXR1cm4gICAgICAgYSBuZXcgJGNvbGwgd2hpY2ggY29udGFpbnMgYWxsIGVsZW1lbnRzIG9mIHRoaXMgJGNvbGwKICAgICAqICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IGFsbCBlbGVtZW50cyBvZiBgdGhhdGAuCiAgICAgKi8KICAgIGRlZiArKzpbQiA+OiBBLCBUaGF0XSh0aGF0OiBUcmF2ZXJzYWJsZU9uY2VbQl0pKGltcGxpY2l0IGJmOiBDYW5CdWlsZEZyb21bUmVwciwgQiwgVGhhdF0pOiBUaGF0ID0gewogICAgICB2YWwgYiA9IGJmKHJlcHIpCiAgICAgIGlmICh0aGF0LmlzSW5zdGFuY2VPZltJbmRleGVkU2VxTGlrZVtfLCBfXV0pIGIuc2l6ZUhpbnQodGhpcywgdGhhdC5zaXplKQogICAgICBiICsrPSB0aGF0CiAgICAgIGIgKys9IHRoaXNDb2xsZWN0aW9uCiAgICAgIGIucmVzdWx0CiAgICB9CgogICAgLyoqIFRoaXMgb3ZlcmxvYWQgZXhpc3RzIGJlY2F1c2U6IGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgKys6IHdlIHNob3VsZCByZXVzZQogICAgICogIHRoYXQgb2YgKysgYmVjYXVzZSBtYW55IGNvbGxlY3Rpb25zIG92ZXJyaWRlIGl0IHdpdGggbW9yZSBlZmZpY2llbnQgdmVyc2lvbnMuCiAgICAgKiAgU2luY2UgVHJhdmVyc2FibGVPbmNlIGhhcyBubyAnKysnIG1ldGhvZCwgd2UgaGF2ZSB0byBpbXBsZW1lbnQgdGhhdCBkaXJlY3RseSwKICAgICAqICBidXQgVHJhdmVyc2FibGUgYW5kIGRvd24gY2FuIHVzZSB0aGUgb3ZlcmxvYWQuCiAgICAgKi8KICAgIGRlZiArKzpbQiA+OiBBLCBUaGF0XSh0aGF0OiBUcmF2ZXJzYWJsZVtCXSkoaW1wbGljaXQgYmY6IENhbkJ1aWxkRnJvbVtSZXByLCBCLCBUaGF0XSk6IFRoYXQgPQogICAgICAodGhhdCArKyBzZXEpKGJyZWFrT3V0KQoKICAgIGRlZiBtYXBbQiwgVGhhdF0oZjogQSA9PiBCKShpbXBsaWNpdCBiZjogQ2FuQnVpbGRGcm9tW1JlcHIsIEIsIFRoYXRdKTogVGhhdCA9IHsKICAgICAgdmFsIGIgPSBiZihyZXByKQogICAgICBiLnNpemVIaW50KHRoaXMpIAogICAgICBmb3IgKHggPC0gdGhpcykgYiArPSBmKHgpCiAgICAgIGIucmVzdWx0CiAgICB9CgogICAgZGVmIGZsYXRNYXBbQiwgVGhhdF0oZjogQSA9PiBHZW5UcmF2ZXJzYWJsZU9uY2VbQl0pKGltcGxpY2l0IGJmOiBDYW5CdWlsZEZyb21bUmVwciwgQiwgVGhhdF0pOiBUaGF0ID0gewogICAgICB2YWwgYiA9IGJmKHJlcHIpCiAgICAgIGZvciAoeCA8LSB0aGlzKSBiICsrPSBmKHgpLnNlcQogICAgICBiLnJlc3VsdAogICAgfQoKICAgIC8qKiBTZWxlY3RzIGFsbCBlbGVtZW50cyBvZiB0aGlzICRjb2xsIHdoaWNoIHNhdGlzZnkgYSBwcmVkaWNhdGUuCiAgICAgKgogICAgICogIEBwYXJhbSBwICAgICB0aGUgcHJlZGljYXRlIHVzZWQgdG8gdGVzdCBlbGVtZW50cy4KICAgICAqICBAcmV0dXJuICAgICAgYSBuZXcgJGNvbGwgY29uc2lzdGluZyBvZiBhbGwgZWxlbWVudHMgb2YgdGhpcyAkY29sbCB0aGF0IHNhdGlzZnkgdGhlIGdpdmVuCiAgICAgKiAgICAgICAgICAgICAgIHByZWRpY2F0ZSBgcGAuIFRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMgaXMgcHJlc2VydmVkLgogICAgICovCiAgICBkZWYgZmlsdGVyKHA6IEEgPT4gQm9vbGVhbik6IFJlcHIgPSB7CiAgICAgIHZhbCBiID0gbmV3QnVpbGRlcgogICAgICBmb3IgKHggPC0gdGhpcykgCiAgICAgICAgaWYgKHAoeCkpIGIgKz0geAogICAgICBiLnJlc3VsdAogICAgfQoKICAgIC8qKiBTZWxlY3RzIGFsbCBlbGVtZW50cyBvZiB0aGlzICRjb2xsIHdoaWNoIGRvIG5vdCBzYXRpc2Z5IGEgcHJlZGljYXRlLgogICAgICoKICAgICAqICBAcGFyYW0gcCAgICAgdGhlIHByZWRpY2F0ZSB1c2VkIHRvIHRlc3QgZWxlbWVudHMuCiAgICAgKiAgQHJldHVybiAgICAgIGEgbmV3ICRjb2xsIGNvbnNpc3Rpbmcgb2YgYWxsIGVsZW1lbnRzIG9mIHRoaXMgJGNvbGwgdGhhdCBkbyBub3Qgc2F0aXNmeSB0aGUgZ2l2ZW4KICAgICAqICAgICAgICAgICAgICAgcHJlZGljYXRlIGBwYC4gVGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpcyBwcmVzZXJ2ZWQuCiAgICAgKi8KICAgIGRlZiBmaWx0ZXJOb3QocDogQSA9PiBCb29sZWFuKTogUmVwciA9IGZpbHRlcighcChfKSkKCiAgICBkZWYgY29sbGVjdFtCLCBUaGF0XShwZjogUGFydGlhbEZ1bmN0aW9uW0EsIEJdKShpbXBsaWNpdCBiZjogQ2FuQnVpbGRGcm9tW1JlcHIsIEIsIFRoYXRdKTogVGhhdCA9IHsKICAgICAgdmFsIGIgPSBiZihyZXByKQogICAgICBmb3IgKHggPC0gdGhpcykgaWYgKHBmLmlzRGVmaW5lZEF0KHgpKSBiICs9IHBmKHgpCiAgICAgIGIucmVzdWx0CiAgICB9CgogICAgLyoqIEJ1aWxkcyBhIG5ldyBjb2xsZWN0aW9uIGJ5IGFwcGx5aW5nIGFuIG9wdGlvbi12YWx1ZWQgZnVuY3Rpb24gdG8gYWxsCiAgICAgKiAgZWxlbWVudHMgb2YgdGhpcyAkY29sbCBvbiB3aGljaCB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC4KICAgICAqCiAgICAgKiAgQHBhcmFtIGYgICAgICB0aGUgb3B0aW9uLXZhbHVlZCBmdW5jdGlvbiB3aGljaCBmaWx0ZXJzIGFuZCBtYXBzIHRoZSAkY29sbC4KICAgICAqICBAdHBhcmFtIEIgICAgIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24uCiAgICAgKiAgQHRwYXJhbSBUaGF0ICAkdGhhdGluZm8KICAgICAqICBAcGFyYW0gYmYgICAgICRiZmluZm8KICAgICAqICBAcmV0dXJuICAgICAgIGEgbmV3IGNvbGxlY3Rpb24gb2YgdHlwZSBgVGhhdGAgcmVzdWx0aW5nIGZyb20gYXBwbHlpbmcgdGhlIG9wdGlvbi12YWx1ZWQgZnVuY3Rpb24KICAgICAqICAgICAgICAgICAgICAgIGBmYCB0byBlYWNoIGVsZW1lbnQgYW5kIGNvbGxlY3RpbmcgYWxsIGRlZmluZWQgcmVzdWx0cy4KICAgICAqICAgICAgICAgICAgICAgIFRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMgaXMgcHJlc2VydmVkLgogICAgICoKICAgICAqICBAdXNlY2FzZSBkZWYgZmlsdGVyTWFwW0JdKGY6IEEgPT4gT3B0aW9uW0JdKTogJENvbGxbQl0KICAgICAqICAKICAgICAqICBAcGFyYW0gcGYgICAgIHRoZSBwYXJ0aWFsIGZ1bmN0aW9uIHdoaWNoIGZpbHRlcnMgYW5kIG1hcHMgdGhlICRjb2xsLgogICAgICogIEByZXR1cm4gICAgICAgYSBuZXcgJGNvbGwgcmVzdWx0aW5nIGZyb20gYXBwbHlpbmcgdGhlIGdpdmVuIG9wdGlvbi12YWx1ZWQgZnVuY3Rpb24KICAgICAqICAgICAgICAgICAgICAgIGBmYCB0byBlYWNoIGVsZW1lbnQgYW5kIGNvbGxlY3RpbmcgYWxsIGRlZmluZWQgcmVzdWx0cy4KICAgICAqICAgICAgICAgICAgICAgIFRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMgaXMgcHJlc2VydmVkLgogICAgZGVmIGZpbHRlck1hcFtCLCBUaGF0XShmOiBBID0+IE9wdGlvbltCXSkoaW1wbGljaXQgYmY6IENhbkJ1aWxkRnJvbVtSZXByLCBCLCBUaGF0XSk6IFRoYXQgPSB7CiAgICAgIHZhbCBiID0gYmYocmVwcikKICAgICAgZm9yICh4IDwtIHRoaXMpIAogICAgICAgIGYoeCkgbWF0Y2ggewogICAgICAgICAgY2FzZSBTb21lKHkpID0+IGIgKz0geQogICAgICAgICAgY2FzZSBfID0+CiAgICAgICAgfQogICAgICBiLnJlc3VsdAogICAgfQogICAgICovCgogICAgLyoqIFBhcnRpdGlvbnMgdGhpcyAkY29sbCBpbiB0d28gJHtjb2xsfXMgYWNjb3JkaW5nIHRvIGEgcHJlZGljYXRlLgogICAgICoKICAgICAqICBAcGFyYW0gcCB0aGUgcHJlZGljYXRlIG9uIHdoaWNoIHRvIHBhcnRpdGlvbi4KICAgICAqICBAcmV0dXJuICBhIHBhaXIgb2YgJHtjb2xsfXM6IHRoZSBmaXJzdCAkY29sbCBjb25zaXN0cyBvZiBhbGwgZWxlbWVudHMgdGhhdCAKICAgICAqICAgICAgICAgICBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUgYHBgIGFuZCB0aGUgc2Vjb25kICRjb2xsIGNvbnNpc3RzIG9mIGFsbCBlbGVtZW50cwogICAgICogICAgICAgICAgIHRoYXQgZG9uJ3QuIFRoZSByZWxhdGl2ZSBvcmRlciBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHJlc3VsdGluZyAke2NvbGx9cwogICAgICogICAgICAgICAgIGlzIHRoZSBzYW1lIGFzIGluIHRoZSBvcmlnaW5hbCAkY29sbC4KICAgICAqLwogICAgZGVmIHBhcnRpdGlvbihwOiBBID0+IEJvb2xlYW4pOiAoUmVwciwgUmVwcikgPSB7CiAgICAgIHZhbCBsLCByID0gbmV3QnVpbGRlcgogICAgICBmb3IgKHggPC0gdGhpcykgKGlmIChwKHgpKSBsIGVsc2UgcikgKz0geAogICAgICAobC5yZXN1bHQsIHIucmVzdWx0KQogICAgfQoKICAgIGRlZiBncm91cEJ5W0tdKGY6IEEgPT4gSyk6IGltbXV0YWJsZS5NYXBbSywgUmVwcl0gPSB7CiAgICAgIHZhbCBtID0gbXV0YWJsZS5NYXAuZW1wdHlbSywgQnVpbGRlcltBLCBSZXByXV0KICAgICAgZm9yIChlbGVtIDwtIHRoaXMpIHsKICAgICAgICB2YWwga2V5ID0gZihlbGVtKQogICAgICAgIHZhbCBibGRyID0gbS5nZXRPckVsc2VVcGRhdGUoa2V5LCBuZXdCdWlsZGVyKQogICAgICAgIGJsZHIgKz0gZWxlbQogICAgICB9CiAgICAgIHZhbCBiID0gaW1tdXRhYmxlLk1hcC5uZXdCdWlsZGVyW0ssIFJlcHJdCiAgICAgIGZvciAoKGssIHYpIDwtIG0pCiAgICAgICAgYiArPSAoKGssIHYucmVzdWx0KSkKCiAgICAgIGIucmVzdWx0CiAgICB9CgogICAgLyoqIFRlc3RzIHdoZXRoZXIgYSBwcmVkaWNhdGUgaG9sZHMgZm9yIGFsbCBlbGVtZW50cyBvZiB0aGlzICRjb2xsLgogICAgICoKICAgICAqICAkbWF5Tm90VGVybWluYXRlSW5mCiAgICAgKgogICAgICogIEBwYXJhbSAgIHAgICAgIHRoZSBwcmVkaWNhdGUgdXNlZCB0byB0ZXN0IGVsZW1lbnRzLgogICAgICogIEByZXR1cm4gICAgICAgIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gcHJlZGljYXRlIGBwYCBob2xkcyBmb3IgYWxsIGVsZW1lbnRzCiAgICAgKiAgICAgICAgICAgICAgICAgb2YgdGhpcyAkY29sbCwgb3RoZXJ3aXNlIGBmYWxzZWAuCiAgICAgKi8KICAgIGRlZiBmb3JhbGwocDogQSA9PiBCb29sZWFuKTogQm9vbGVhbiA9IHsKICAgICAgdmFyIHJlc3VsdCA9IHRydWUKICAgICAgYnJlYWthYmxlIHsKICAgICAgICBmb3IgKHggPC0gdGhpcykKICAgICAgICAgIGlmICghcCh4KSkgeyByZXN1bHQgPSBmYWxzZTsgYnJlYWsgfQogICAgICB9CiAgICAgIHJlc3VsdAogICAgfQoKICAgIC8qKiBUZXN0cyB3aGV0aGVyIGEgcHJlZGljYXRlIGhvbGRzIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cyBvZiB0aGlzICRjb2xsLgogICAgICoKICAgICAqICAkbWF5Tm90VGVybWluYXRlSW5mCiAgICAgKgogICAgICogIEBwYXJhbSAgIHAgICAgIHRoZSBwcmVkaWNhdGUgdXNlZCB0byB0ZXN0IGVsZW1lbnRzLgogICAgICogIEByZXR1cm4gICAgICAgIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gcHJlZGljYXRlIGBwYCBob2xkcyBmb3Igc29tZSBvZiB0aGUKICAgICAqICAgICAgICAgICAgICAgICBlbGVtZW50cyBvZiB0aGlzICRjb2xsLCBvdGhlcndpc2UgYGZhbHNlYC4KICAgICAqLwogICAgZGVmIGV4aXN0cyhwOiBBID0+IEJvb2xlYW4pOiBCb29sZWFuID0gewogICAgICB2YXIgcmVzdWx0ID0gZmFsc2UKICAgICAgYnJlYWthYmxlIHsKICAgICAgICBmb3IgKHggPC0gdGhpcykKICAgICAgICAgIGlmIChwKHgpKSB7IHJlc3VsdCA9IHRydWU7IGJyZWFrIH0KICAgICAgfQogICAgICByZXN1bHQKICAgIH0KCiAgICAvKiogRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlICRjb2xsIHNhdGlzZnlpbmcgYSBwcmVkaWNhdGUsIGlmIGFueS4KICAgICAqIAogICAgICogICRtYXlOb3RUZXJtaW5hdGVJbmYKICAgICAqICAkb3JkZXJEZXBlbmRlbnQKICAgICAqCiAgICAgKiAgQHBhcmFtIHAgICAgdGhlIHByZWRpY2F0ZSB1c2VkIHRvIHRlc3QgZWxlbWVudHMuCiAgICAgKiAgQHJldHVybiAgICAgYW4gb3B0aW9uIHZhbHVlIGNvbnRhaW5pbmcgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlICRjb2xsCiAgICAgKiAgICAgICAgICAgICAgdGhhdCBzYXRpc2ZpZXMgYHBgLCBvciBgTm9uZWAgaWYgbm9uZSBleGlzdHMuCiAgICAgKi8KICAgIGRlZiBmaW5kKHA6IEEgPT4gQm9vbGVhbik6IE9wdGlvbltBXSA9IHsKICAgICAgdmFyIHJlc3VsdDogT3B0aW9uW0FdID0gTm9uZQogICAgICBicmVha2FibGUgewogICAgICAgIGZvciAoeCA8LSB0aGlzKQogICAgICAgICAgaWYgKHAoeCkpIHsgcmVzdWx0ID0gU29tZSh4KTsgYnJlYWsgfQogICAgICB9CiAgICAgIHJlc3VsdAogICAgfQoKICAgIGRlZiBzY2FuW0IgPjogQSwgVGhhdF0oejogQikob3A6IChCLCBCKSA9PiBCKShpbXBsaWNpdCBjYmY6IENhbkJ1aWxkRnJvbVtSZXByLCBCLCBUaGF0XSk6IFRoYXQgPSBzY2FuTGVmdCh6KShvcCkKCiAgICBkZWYgc2NhbkxlZnRbQiwgVGhhdF0oejogQikob3A6IChCLCBBKSA9PiBCKShpbXBsaWNpdCBiZjogQ2FuQnVpbGRGcm9tW1JlcHIsIEIsIFRoYXRdKTogVGhhdCA9IHsKICAgICAgdmFsIGIgPSBiZihyZXByKQogICAgICBiLnNpemVIaW50KHRoaXMsIDEpCiAgICAgIHZhciBhY2MgPSB6CiAgICAgIGIgKz0gYWNjCiAgICAgIGZvciAoeCA8LSB0aGlzKSB7IGFjYyA9IG9wKGFjYywgeCk7IGIgKz0gYWNjIH0KICAgICAgYi5yZXN1bHQKICAgIH0KCiAgICBAbWlncmF0aW9uKDIsIDksCiAgICAgICJUaGlzIHNjYW5SaWdodCBkZWZpbml0aW9uIGhhcyBjaGFuZ2VkIGluIDIuOS5cbiIgKwogICAgICAiVGhlIHByZXZpb3VzIGJlaGF2aW9yIGNhbiBiZSByZXByb2R1Y2VkIHdpdGggc2NhblJpZ2h0LnJldmVyc2UuIgogICAgKQogICAgZGVmIHNjYW5SaWdodFtCLCBUaGF0XSh6OiBCKShvcDogKEEsIEIpID0+IEIpKGltcGxpY2l0IGJmOiBDYW5CdWlsZEZyb21bUmVwciwgQiwgVGhhdF0pOiBUaGF0ID0gewogICAgICB2YXIgc2Nhbm5lZCA9IExpc3QoeikKICAgICAgdmFyIGFjYyA9IHoKICAgICAgZm9yICh4IDwtIHJldmVyc2VkKSB7CiAgICAgICAgYWNjID0gb3AoeCwgYWNjKQogICAgICAgIHNjYW5uZWQgOjo9IGFjYwogICAgICB9CiAgICAgIHZhbCBiID0gYmYocmVwcikKICAgICAgZm9yIChlbGVtIDwtIHNjYW5uZWQpIGIgKz0gZWxlbQogICAgICBiLnJlc3VsdAogICAgfQoKICAgIC8qKiBTZWxlY3RzIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgJGNvbGwuCiAgICAgKiAgJG9yZGVyRGVwZW5kZW50CiAgICAgKiAgQHJldHVybiAgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhpcyAkY29sbC4KICAgICAqICBAdGhyb3dzIGBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uYCBpZiB0aGUgJGNvbGwgaXMgZW1wdHkuCiAgICAgKi8KICAgIGRlZiBoZWFkOiBBID0gewogICAgICB2YXIgcmVzdWx0OiAoKSA9PiBBID0gKCkgPT4gdGhyb3cgbmV3IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24KICAgICAgYnJlYWthYmxlIHsKICAgICAgICBmb3IgKHggPC0gdGhpcykgewogICAgICAgICAgcmVzdWx0ID0gKCkgPT4geAogICAgICAgICAgYnJlYWsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdWx0KCkKICAgIH0KCiAgICAvKiogT3B0aW9uYWxseSBzZWxlY3RzIHRoZSBmaXJzdCBlbGVtZW50LgogICAgICogICRvcmRlckRlcGVuZGVudAogICAgICogIEByZXR1cm4gIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgJGNvbGwgaWYgaXQgaXMgbm9uZW1wdHksIGBOb25lYCBpZiBpdCBpcyBlbXB0eS4KICAgICAqLwogICAgZGVmIGhlYWRPcHRpb246IE9wdGlvbltBXSA9IGlmIChpc0VtcHR5KSBOb25lIGVsc2UgU29tZShoZWFkKQoKICAgIC8qKiBTZWxlY3RzIGFsbCBlbGVtZW50cyBleGNlcHQgdGhlIGZpcnN0LgogICAgICogICRvcmRlckRlcGVuZGVudAogICAgICogIEByZXR1cm4gIGEgJGNvbGwgY29uc2lzdGluZyBvZiBhbGwgZWxlbWVudHMgb2YgdGhpcyAkY29sbAogICAgICogICAgICAgICAgIGV4Y2VwdCB0aGUgZmlyc3Qgb25lLgogICAgICogIEB0aHJvd3MgYFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uYCBpZiB0aGUgJGNvbGwgaXMgZW1wdHkuCiAgICAgKi8gCiAgICBvdmVycmlkZSBkZWYgdGFpbDogUmVwciA9IHsKICAgICAgaWYgKGlzRW1wdHkpIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiZW1wdHkudGFpbCIpCiAgICAgIGRyb3AoMSkKICAgIH0KCiAgICAvKiogU2VsZWN0cyB0aGUgbGFzdCBlbGVtZW50LgogICAgICAqICRvcmRlckRlcGVuZGVudAogICAgICAqIEByZXR1cm4gVGhlIGxhc3QgZWxlbWVudCBvZiB0aGlzICRjb2xsLgogICAgICAqIEB0aHJvd3MgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBJZiB0aGUgJGNvbGwgaXMgZW1wdHkuCiAgICAgICovCiAgICBkZWYgbGFzdDogQSA9IHsKICAgICAgdmFyIGxzdCA9IGhlYWQKICAgICAgZm9yICh4IDwtIHRoaXMpCiAgICAgICAgbHN0ID0geAogICAgICBsc3QKICAgIH0KCiAgICAvKiogT3B0aW9uYWxseSBzZWxlY3RzIHRoZSBsYXN0IGVsZW1lbnQuCiAgICAgKiAgJG9yZGVyRGVwZW5kZW50CiAgICAgKiAgQHJldHVybiAgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGlzICRjb2xsJCBpZiBpdCBpcyBub25lbXB0eSwgYE5vbmVgIGlmIGl0IGlzIGVtcHR5LgogICAgICovCiAgICBkZWYgbGFzdE9wdGlvbjogT3B0aW9uW0FdID0gaWYgKGlzRW1wdHkpIE5vbmUgZWxzZSBTb21lKGxhc3QpCgogICAgLyoqIFNlbGVjdHMgYWxsIGVsZW1lbnRzIGV4Y2VwdCB0aGUgbGFzdC4KICAgICAqICAkb3JkZXJEZXBlbmRlbnQKICAgICAqICBAcmV0dXJuICBhICRjb2xsIGNvbnNpc3Rpbmcgb2YgYWxsIGVsZW1lbnRzIG9mIHRoaXMgJGNvbGwKICAgICAqICAgICAgICAgICBleGNlcHQgdGhlIGxhc3Qgb25lLgogICAgICogIEB0aHJvd3MgYFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uYCBpZiB0aGUgJGNvbGwgaXMgZW1wdHkuCiAgICAgKi8KICAgIGRlZiBpbml0OiBSZXByID0gewogICAgICBpZiAoaXNFbXB0eSkgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJlbXB0eS5pbml0IikKICAgICAgdmFyIGxzdCA9IGhlYWQKICAgICAgdmFyIGZvbGxvdyA9IGZhbHNlCiAgICAgIHZhbCBiID0gbmV3QnVpbGRlcgogICAgICBiLnNpemVIaW50KHRoaXMsIC0xKQogICAgICBmb3IgKHggPC0gdGhpcy5zZXEpIHsKICAgICAgICBpZiAoZm9sbG93KSBiICs9IGxzdAogICAgICAgIGVsc2UgZm9sbG93ID0gdHJ1ZQogICAgICAgIGxzdCA9IHgKICAgICAgfQogICAgICBiLnJlc3VsdAogICAgfQoKICAgIGRlZiB0YWtlKG46IEludCk6IFJlcHIgPSBzbGljZSgwLCBuKQoKICAgIGRlZiBkcm9wKG46IEludCk6IFJlcHIgPSAKICAgICAgaWYgKG4gPD0gMCkgewogICAgICAgIHZhbCBiID0gbmV3QnVpbGRlcgogICAgICAgIGIuc2l6ZUhpbnQodGhpcykKICAgICAgICBiICsrPSB0aGlzQ29sbGVjdGlvbiByZXN1bHQKICAgICAgfQogICAgICBlbHNlIHNsaWNlV2l0aEtub3duRGVsdGEobiwgSW50Lk1heFZhbHVlLCAtbikKCiAgICBkZWYgc2xpY2UoZnJvbTogSW50LCB1bnRpbDogSW50KTogUmVwciA9IHNsaWNlV2l0aEtub3duQm91bmQobWF0aC5tYXgoZnJvbSwgMCksIHVudGlsKQoKICAgIC8vIFByZWNvbmRpdGlvbjogZnJvbSA+PSAwLCB1bnRpbCA+IDAsIGJ1aWxkZXIgYWxyZWFkeSBjb25maWd1cmVkIGZvciBidWlsZGluZy4KICAgIHByaXZhdGVbdGhpc10gZGVmIHNsaWNlSW50ZXJuYWwoZnJvbTogSW50LCB1bnRpbDogSW50LCBiOiBCdWlsZGVyW0EsIFJlcHJdKTogUmVwciA9IHsKICAgICAgdmFyIGkgPSAwCiAgICAgIGJyZWFrYWJsZSB7CiAgICAgICAgZm9yICh4IDwtIHRoaXMuc2VxKSB7CiAgICAgICAgICBpZiAoaSA+PSBmcm9tKSBiICs9IHgKICAgICAgICAgIGkgKz0gMQogICAgICAgICAgaWYgKGkgPj0gdW50aWwpIGJyZWFrCiAgICAgICAgfQogICAgICB9CiAgICAgIGIucmVzdWx0CiAgICB9CiAgICAvLyBQcmVjb25kaXRpb246IGZyb20gPj0gMAogICAgcHJpdmF0ZVtzY2FsYV0gZGVmIHNsaWNlV2l0aEtub3duRGVsdGEoZnJvbTogSW50LCB1bnRpbDogSW50LCBkZWx0YTogSW50KTogUmVwciA9IHsKICAgICAgdmFsIGIgPSBuZXdCdWlsZGVyCiAgICAgIGlmICh1bnRpbCA8PSBmcm9tKSBiLnJlc3VsdAogICAgICBlbHNlIHsKICAgICAgICBiLnNpemVIaW50KHRoaXMsIGRlbHRhKQogICAgICAgIHNsaWNlSW50ZXJuYWwoZnJvbSwgdW50aWwsIGIpCiAgICAgIH0KICAgIH0KICAgIC8vIFByZWNvbmRpdGlvbjogZnJvbSA+PSAwCiAgICBwcml2YXRlW3NjYWxhXSBkZWYgc2xpY2VXaXRoS25vd25Cb3VuZChmcm9tOiBJbnQsIHVudGlsOiBJbnQpOiBSZXByID0gewogICAgICB2YWwgYiA9IG5ld0J1aWxkZXIKICAgICAgaWYgKHVudGlsIDw9IGZyb20pIGIucmVzdWx0CiAgICAgIGVsc2UgewogICAgICAgIGIuc2l6ZUhpbnRCb3VuZGVkKHVudGlsIC0gZnJvbSwgdGhpcykgICAgICAKICAgICAgICBzbGljZUludGVybmFsKGZyb20sIHVudGlsLCBiKQogICAgICB9CiAgICB9CgogICAgZGVmIHRha2VXaGlsZShwOiBBID0+IEJvb2xlYW4pOiBSZXByID0gewogICAgICB2YWwgYiA9IG5ld0J1aWxkZXIKICAgICAgYnJlYWthYmxlIHsKICAgICAgICBmb3IgKHggPC0gdGhpcykgewogICAgICAgICAgaWYgKCFwKHgpKSBicmVhawogICAgICAgICAgYiArPSB4CiAgICAgICAgfQogICAgICB9CiAgICAgIGIucmVzdWx0CiAgICB9CgogICAgZGVmIGRyb3BXaGlsZShwOiBBID0+IEJvb2xlYW4pOiBSZXByID0gewogICAgICB2YWwgYiA9IG5ld0J1aWxkZXIKICAgICAgdmFyIGdvID0gZmFsc2UKICAgICAgZm9yICh4IDwtIHRoaXMpIHsKICAgICAgICBpZiAoIXAoeCkpIGdvID0gdHJ1ZQogICAgICAgIGlmIChnbykgYiArPSB4CiAgICAgIH0KICAgICAgYi5yZXN1bHQKICAgIH0KCiAgICBkZWYgc3BhbihwOiBBID0+IEJvb2xlYW4pOiAoUmVwciwgUmVwcikgPSB7CiAgICAgIHZhbCBsLCByID0gbmV3QnVpbGRlcgogICAgICB2YXIgdG9MZWZ0ID0gdHJ1ZQogICAgICBmb3IgKHggPC0gdGhpcykgewogICAgICAgIHRvTGVmdCA9IHRvTGVmdCAmJiBwKHgpCiAgICAgICAgKGlmICh0b0xlZnQpIGwgZWxzZSByKSArPSB4CiAgICAgIH0KICAgICAgKGwucmVzdWx0LCByLnJlc3VsdCkKICAgIH0KCiAgICBkZWYgc3BsaXRBdChuOiBJbnQpOiAoUmVwciwgUmVwcikgPSB7CiAgICAgIHZhbCBsLCByID0gbmV3QnVpbGRlcgogICAgICBsLnNpemVIaW50Qm91bmRlZChuLCB0aGlzKQogICAgICBpZiAobiA+PSAwKSByLnNpemVIaW50KHRoaXMsIC1uKQogICAgICB2YXIgaSA9IDAKICAgICAgZm9yICh4IDwtIHRoaXMpIHsKICAgICAgICAoaWYgKGkgPCBuKSBsIGVsc2UgcikgKz0geAogICAgICAgIGkgKz0gMQogICAgICB9CiAgICAgIChsLnJlc3VsdCwgci5yZXN1bHQpCiAgICB9CgogICAgLyoqIEl0ZXJhdGVzIG92ZXIgdGhlIHRhaWxzIG9mIHRoaXMgJGNvbGwuIFRoZSBmaXJzdCB2YWx1ZSB3aWxsIGJlIHRoaXMKICAgICAqICAkY29sbCBhbmQgdGhlIGZpbmFsIG9uZSB3aWxsIGJlIGFuIGVtcHR5ICRjb2xsLCB3aXRoIHRoZSBpbnRlcnZlbmluZwogICAgICogIHZhbHVlcyB0aGUgcmVzdWx0cyBvZiBzdWNjZXNzaXZlIGFwcGxpY2F0aW9ucyBvZiBgdGFpbGAuCiAgICAgKgogICAgICogIEByZXR1cm4gICBhbiBpdGVyYXRvciBvdmVyIGFsbCB0aGUgdGFpbHMgb2YgdGhpcyAkY29sbAogICAgICogIEBleGFtcGxlICBgTGlzdCgxLDIsMykudGFpbHMgPSBJdGVyYXRvcihMaXN0KDEsMiwzKSwgTGlzdCgyLDMpLCBMaXN0KDMpLCBOaWwpYAogICAgICovICAKICAgIGRlZiB0YWlsczogSXRlcmF0b3JbUmVwcl0gPSBpdGVyYXRlVW50aWxFbXB0eShfLnRhaWwpCgogICAgLyoqIEl0ZXJhdGVzIG92ZXIgdGhlIGluaXRzIG9mIHRoaXMgJGNvbGwuIFRoZSBmaXJzdCB2YWx1ZSB3aWxsIGJlIHRoaXMKICAgICAqICAkY29sbCBhbmQgdGhlIGZpbmFsIG9uZSB3aWxsIGJlIGFuIGVtcHR5ICRjb2xsLCB3aXRoIHRoZSBpbnRlcnZlbmluZwogICAgICogIHZhbHVlcyB0aGUgcmVzdWx0cyBvZiBzdWNjZXNzaXZlIGFwcGxpY2F0aW9ucyBvZiBgaW5pdGAuCiAgICAgKgogICAgICogIEByZXR1cm4gIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIHRoZSBpbml0cyBvZiB0aGlzICRjb2xsCiAgICAgKiAgQGV4YW1wbGUgIGBMaXN0KDEsMiwzKS5pbml0cyA9IEl0ZXJhdG9yKExpc3QoMSwyLDMpLCBMaXN0KDEsMiksIExpc3QoMSksIE5pbClgCiAgICAgKi8KICAgIGRlZiBpbml0czogSXRlcmF0b3JbUmVwcl0gPSBpdGVyYXRlVW50aWxFbXB0eShfLmluaXQpCgogICAgLyoqIENvcGllcyBlbGVtZW50cyBvZiB0aGlzICRjb2xsIHRvIGFuIGFycmF5LgogICAgICogIEZpbGxzIHRoZSBnaXZlbiBhcnJheSBgeHNgIHdpdGggYXQgbW9zdCBgbGVuYCBlbGVtZW50cyBvZgogICAgICogIHRoaXMgJGNvbGwsIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIGBzdGFydGAuCiAgICAgKiAgQ29weWluZyB3aWxsIHN0b3Agb25jZSBlaXRoZXIgdGhlIGVuZCBvZiB0aGUgY3VycmVudCAkY29sbCBpcyByZWFjaGVkLAogICAgICogIG9yIHRoZSBlbmQgb2YgdGhlIGFycmF5IGlzIHJlYWNoZWQsIG9yIGBsZW5gIGVsZW1lbnRzIGhhdmUgYmVlbiBjb3BpZWQuCiAgICAgKgogICAgICogICR3aWxsTm90VGVybWluYXRlSW5mCiAgICAgKiAKICAgICAqICBAcGFyYW0gIHhzICAgICB0aGUgYXJyYXkgdG8gZmlsbC4KICAgICAqICBAcGFyYW0gIHN0YXJ0ICB0aGUgc3RhcnRpbmcgaW5kZXguCiAgICAgKiAgQHBhcmFtICBsZW4gICAgdGhlIG1heGltYWwgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGNvcHkuCiAgICAgKiAgQHRwYXJhbSBCICAgICAgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheS4gCiAgICAgKiAKICAgICAqCiAgICAgKiAgQHVzZWNhc2UgZGVmIGNvcHlUb0FycmF5KHhzOiBBcnJheVtBXSwgc3RhcnQ6IEludCwgbGVuOiBJbnQpOiBVbml0CiAgICAgKi8KICAgIGRlZiBjb3B5VG9BcnJheVtCID46IEFdKHhzOiBBcnJheVtCXSwgc3RhcnQ6IEludCwgbGVuOiBJbnQpIHsKICAgICAgdmFyIGkgPSBzdGFydAogICAgICB2YWwgZW5kID0gKHN0YXJ0ICsgbGVuKSBtaW4geHMubGVuZ3RoCiAgICAgIGJyZWFrYWJsZSB7CiAgICAgICAgZm9yICh4IDwtIHRoaXMpIHsKICAgICAgICAgIGlmIChpID49IGVuZCkgYnJlYWsKICAgICAgICAgIHhzKGkpID0geAogICAgICAgICAgaSArPSAxCiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZGVmIHRvVHJhdmVyc2FibGU6IFRyYXZlcnNhYmxlW0FdID0gdGhpc0NvbGxlY3Rpb24KICAgIGRlZiB0b0l0ZXJhdG9yOiBJdGVyYXRvcltBXSA9IHRvU3RyZWFtLml0ZXJhdG9yCiAgICBkZWYgdG9TdHJlYW06IFN0cmVhbVtBXSA9IHRvQnVmZmVyLnRvU3RyZWFtCgogICAgLyoqIENvbnZlcnRzIHRoaXMgJGNvbGwgdG8gYSBzdHJpbmcuCiAgICAgKgogICAgICogIEByZXR1cm4gICBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNvbGxlY3Rpb24uIEJ5IGRlZmF1bHQgdGhpcwogICAgICogICAgICAgICAgICBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGBzdHJpbmdQcmVmaXhgIG9mIHRoaXMgJGNvbGwsCiAgICAgKiAgICAgICAgICAgIGZvbGxvd2VkIGJ5IGFsbCBlbGVtZW50cyBzZXBhcmF0ZWQgYnkgY29tbWFzIGFuZCBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcy4KICAgICAqLwogICAgb3ZlcnJpZGUgZGVmIHRvU3RyaW5nID0gbWtTdHJpbmcoc3RyaW5nUHJlZml4ICsgIigiLCAiLCAiLCAiKSIpCgogICAgLyoqIERlZmluZXMgdGhlIHByZWZpeCBvZiB0aGlzIG9iamVjdCdzIGB0b1N0cmluZ2AgcmVwcmVzZW50YXRpb24uCiAgICAgKgogICAgICogIEByZXR1cm4gIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdoaWNoIHN0YXJ0cyB0aGUgcmVzdWx0IG9mIGB0b1N0cmluZ2AKICAgICAqICAgICAgICAgICBhcHBsaWVkIHRvIHRoaXMgJGNvbGwuIEJ5IGRlZmF1bHQgdGhlIHN0cmluZyBwcmVmaXggaXMgdGhlCiAgICAgKiAgICAgICAgICAgc2ltcGxlIG5hbWUgb2YgdGhlIGNvbGxlY3Rpb24gY2xhc3MgJGNvbGwuCiAgICAgKi8KICAgIGRlZiBzdHJpbmdQcmVmaXggOiBTdHJpbmcgPSB7CiAgICAgIHZhciBzdHJpbmcgPSByZXByLmFzSW5zdGFuY2VPZltBbnlSZWZdLmdldENsYXNzLmdldE5hbWUKICAgICAgdmFsIGlkeDEgPSBzdHJpbmcubGFzdEluZGV4T2YoJy4nIDogSW50KQogICAgICBpZiAoaWR4MSAhPSAtMSkgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhpZHgxICsgMSkKICAgICAgdmFsIGlkeDIgPSBzdHJpbmcuaW5kZXhPZignJCcpCiAgICAgIGlmIChpZHgyICE9IC0xKSBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeDIpCiAgICAgIHN0cmluZwogICAgfQoKICAgIC8qKiBDcmVhdGVzIGEgbm9uLXN0cmljdCB2aWV3IG9mIHRoaXMgJGNvbGwuCiAgICAgKiAKICAgICAqICBAcmV0dXJuIGEgbm9uLXN0cmljdCB2aWV3IG9mIHRoaXMgJGNvbGwuCiAgICAgKi8KICAgIGRlZiB2aWV3ID0gbmV3IFRyYXZlcnNhYmxlVmlld1tBLCBSZXByXSB7CiAgICAgIHByb3RlY3RlZCBsYXp5IHZhbCB1bmRlcmx5aW5nID0gc2VsZi5yZXByCiAgICAgIG92ZXJyaWRlIGRlZiBmb3JlYWNoW1VdKGY6IEEgPT4gVSkgPSBzZWxmIGZvcmVhY2ggZgogICAgfQoKICAgIC8qKiBDcmVhdGVzIGEgbm9uLXN0cmljdCB2aWV3IG9mIGEgc2xpY2Ugb2YgdGhpcyAkY29sbC4KICAgICAqCiAgICAgKiAgTm90ZTogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgdmlld2AgYW5kIGBzbGljZWAgaXMgdGhhdCBgdmlld2AgcHJvZHVjZXMKICAgICAqICAgICAgICBhIHZpZXcgb2YgdGhlIGN1cnJlbnQgJGNvbGwsIHdoZXJlYXMgYHNsaWNlYCBwcm9kdWNlcyBhIG5ldyAkY29sbC4KICAgICAqIAogICAgICogIE5vdGU6IGB2aWV3KGZyb20sIHRvKWAgaXMgZXF1aXZhbGVudCB0byBgdmlldy5zbGljZShmcm9tLCB0bylgCiAgICAgKiAgJG9yZGVyRGVwZW5kZW50CiAgICAgKiAKICAgICAqICBAcGFyYW0gZnJvbSAgIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdmlldwogICAgICogIEBwYXJhbSB1bnRpbCAgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IGZvbGxvd2luZyB0aGUgdmlldwogICAgICogIEByZXR1cm4gYSBub24tc3RyaWN0IHZpZXcgb2YgYSBzbGljZSBvZiB0aGlzICRjb2xsLCBzdGFydGluZyBhdCBpbmRleCBgZnJvbWAKICAgICAqICBhbmQgZXh0ZW5kaW5nIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgaW5kZXggYHVudGlsYC4KICAgICAqLwogICAgZGVmIHZpZXcoZnJvbTogSW50LCB1bnRpbDogSW50KTogVHJhdmVyc2FibGVWaWV3W0EsIFJlcHJdID0gdmlldy5zbGljZShmcm9tLCB1bnRpbCkKCiAgICAvKiogQ3JlYXRlcyBhIG5vbi1zdHJpY3QgZmlsdGVyIG9mIHRoaXMgJGNvbGwuCiAgICAgKgogICAgICogIE5vdGU6IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGMgZmlsdGVyIHBgIGFuZCBgYyB3aXRoRmlsdGVyIHBgIGlzIHRoYXQKICAgICAqICAgICAgICB0aGUgZm9ybWVyIGNyZWF0ZXMgYSBuZXcgY29sbGVjdGlvbiwgd2hlcmVhcyB0aGUgbGF0dGVyIG9ubHkKICAgICAqICAgICAgICByZXN0cmljdHMgdGhlIGRvbWFpbiBvZiBzdWJzZXF1ZW50IGBtYXBgLCBgZmxhdE1hcGAsIGBmb3JlYWNoYCwKICAgICAqICAgICAgICBhbmQgYHdpdGhGaWx0ZXJgIG9wZXJhdGlvbnMuCiAgICAgKiAgJG9yZGVyRGVwZW5kZW50CiAgICAgKiAKICAgICAqICBAcGFyYW0gcCAgIHRoZSBwcmVkaWNhdGUgdXNlZCB0byB0ZXN0IGVsZW1lbnRzLgogICAgICogIEByZXR1cm4gICAgYW4gb2JqZWN0IG9mIGNsYXNzIGBXaXRoRmlsdGVyYCwgd2hpY2ggc3VwcG9ydHMKICAgICAqICAgICAgICAgICAgIGBtYXBgLCBgZmxhdE1hcGAsIGBmb3JlYWNoYCwgYW5kIGB3aXRoRmlsdGVyYCBvcGVyYXRpb25zLgogICAgICogICAgICAgICAgICAgQWxsIHRoZXNlIG9wZXJhdGlvbnMgYXBwbHkgdG8gdGhvc2UgZWxlbWVudHMgb2YgdGhpcyAkY29sbCB3aGljaAogICAgICogICAgICAgICAgICAgc2F0aXNmeSB0aGUgcHJlZGljYXRlIGBwYC4KICAgICAqLwogICAgZGVmIHdpdGhGaWx0ZXIocDogQSA9PiBCb29sZWFuKTogRmlsdGVyTW9uYWRpY1tBLCBSZXByXSA9IG5ldyBXaXRoRmlsdGVyKHApCgogICAgLyoqIEEgY2xhc3Mgc3VwcG9ydGluZyBmaWx0ZXJlZCBvcGVyYXRpb25zLiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUKICAgICAqICByZXR1cm5lZCBieSBtZXRob2QgYHdpdGhGaWx0ZXJgLgogICAgICovCiAgICBjbGFzcyBXaXRoRmlsdGVyKHA6IEEgPT4gQm9vbGVhbikgZXh0ZW5kcyBGaWx0ZXJNb25hZGljW0EsIFJlcHJdIHsKCiAgICAgIC8qKiBCdWlsZHMgYSBuZXcgY29sbGVjdGlvbiBieSBhcHBseWluZyBhIGZ1bmN0aW9uIHRvIGFsbCBlbGVtZW50cyBvZiB0aGUKICAgICAgICogIG91dGVyICRjb2xsIGNvbnRhaW5pbmcgdGhpcyBgV2l0aEZpbHRlcmAgaW5zdGFuY2UgdGhhdCBzYXRpc2Z5IHByZWRpY2F0ZSBgcGAuCiAgICAgICAqCiAgICAgICAqICBAcGFyYW0gZiAgICAgIHRoZSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuCiAgICAgICAqICBAdHBhcmFtIEIgICAgIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24uCiAgICAgICAqICBAdHBhcmFtIFRoYXQgICR0aGF0aW5mbwogICAgICAgKiAgQHBhcmFtIGJmICAgICAkYmZpbmZvCiAgICAgICAqICBAcmV0dXJuICAgICAgIGEgbmV3IGNvbGxlY3Rpb24gb2YgdHlwZSBgVGhhdGAgcmVzdWx0aW5nIGZyb20gYXBwbHlpbmcKICAgICAgICogICAgICAgICAgICAgICAgdGhlIGdpdmVuIGZ1bmN0aW9uIGBmYCB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG91dGVyICRjb2xsCiAgICAgICAqICAgICAgICAgICAgICAgIHRoYXQgc2F0aXNmaWVzIHByZWRpY2F0ZSBgcGAgYW5kIGNvbGxlY3RpbmcgdGhlIHJlc3VsdHMuCiAgICAgICAqCiAgICAgICAqICBAdXNlY2FzZSBkZWYgbWFwW0JdKGY6IEEgPT4gQik6ICRDb2xsW0JdIAogICAgICAgKiAgCiAgICAgICAqICBAcmV0dXJuICAgICAgIGEgbmV3ICRjb2xsIHJlc3VsdGluZyBmcm9tIGFwcGx5aW5nIHRoZSBnaXZlbiBmdW5jdGlvbgogICAgICAgKiAgICAgICAgICAgICAgICBgZmAgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBvdXRlciAkY29sbCB0aGF0IHNhdGlzZmllcwogICAgICAgKiAgICAgICAgICAgICAgICBwcmVkaWNhdGUgYHBgIGFuZCBjb2xsZWN0aW5nIHRoZSByZXN1bHRzLgogICAgICAgKi8KICAgICAgZGVmIG1hcFtCLCBUaGF0XShmOiBBID0+IEIpKGltcGxpY2l0IGJmOiBDYW5CdWlsZEZyb21bUmVwciwgQiwgVGhhdF0pOiBUaGF0ID0gewogICAgICAgIHZhbCBiID0gYmYocmVwcikKICAgICAgICBmb3IgKHggPC0gc2VsZikgCiAgICAgICAgICBpZiAocCh4KSkgYiArPSBmKHgpCiAgICAgICAgYi5yZXN1bHQKICAgICAgfQoKICAgICAgLyoqIEJ1aWxkcyBhIG5ldyBjb2xsZWN0aW9uIGJ5IGFwcGx5aW5nIGEgZnVuY3Rpb24gdG8gYWxsIGVsZW1lbnRzIG9mIHRoZQogICAgICAgKiAgb3V0ZXIgJGNvbGwgY29udGFpbmluZyB0aGlzIGBXaXRoRmlsdGVyYCBpbnN0YW5jZSB0aGF0IHNhdGlzZnkKICAgICAgICogIHByZWRpY2F0ZSBgcGAgYW5kIGNvbmNhdGVuYXRpbmcgdGhlIHJlc3VsdHMuIAogICAgICAgKgogICAgICAgKiAgQHBhcmFtIGYgICAgICB0aGUgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBlbGVtZW50LgogICAgICAgKiAgQHRwYXJhbSBCICAgICB0aGUgZWxlbWVudCB0eXBlIG9mIHRoZSByZXR1cm5lZCBjb2xsZWN0aW9uLgogICAgICAgKiAgQHRwYXJhbSBUaGF0ICAkdGhhdGluZm8KICAgICAgICogIEBwYXJhbSBiZiAgICAgJGJmaW5mbwogICAgICAgKiAgQHJldHVybiAgICAgICBhIG5ldyBjb2xsZWN0aW9uIG9mIHR5cGUgYFRoYXRgIHJlc3VsdGluZyBmcm9tIGFwcGx5aW5nCiAgICAgICAqICAgICAgICAgICAgICAgIHRoZSBnaXZlbiBjb2xsZWN0aW9uLXZhbHVlZCBmdW5jdGlvbiBgZmAgdG8gZWFjaCBlbGVtZW50CiAgICAgICAqICAgICAgICAgICAgICAgIG9mIHRoZSBvdXRlciAkY29sbCB0aGF0IHNhdGlzZmllcyBwcmVkaWNhdGUgYHBgIGFuZAogICAgICAgKiAgICAgICAgICAgICAgICBjb25jYXRlbmF0aW5nIHRoZSByZXN1bHRzLgogICAgICAgKgogICAgICAgKiAgQHVzZWNhc2UgZGVmIGZsYXRNYXBbQl0oZjogQSA9PiBUcmF2ZXJzYWJsZU9uY2VbQl0pOiAkQ29sbFtCXQogICAgICAgKiAKICAgICAgICogIEByZXR1cm4gICAgICAgYSBuZXcgJGNvbGwgcmVzdWx0aW5nIGZyb20gYXBwbHlpbmcgdGhlIGdpdmVuIGNvbGxlY3Rpb24tdmFsdWVkIGZ1bmN0aW9uCiAgICAgICAqICAgICAgICAgICAgICAgIGBmYCB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG91dGVyICRjb2xsIHRoYXQgc2F0aXNmaWVzIHByZWRpY2F0ZSBgcGAgYW5kIGNvbmNhdGVuYXRpbmcgdGhlIHJlc3VsdHMuCiAgICAgICAqLwogICAgICBkZWYgZmxhdE1hcFtCLCBUaGF0XShmOiBBID0+IEdlblRyYXZlcnNhYmxlT25jZVtCXSkoaW1wbGljaXQgYmY6IENhbkJ1aWxkRnJvbVtSZXByLCBCLCBUaGF0XSk6IFRoYXQgPSB7CiAgICAgICAgdmFsIGIgPSBiZihyZXByKQogICAgICAgIGZvciAoeCA8LSBzZWxmKSAKICAgICAgICAgIGlmIChwKHgpKSBiICsrPSBmKHgpLnNlcQogICAgICAgIGIucmVzdWx0CiAgICAgIH0KCiAgICAgIC8qKiBBcHBsaWVzIGEgZnVuY3Rpb24gYGZgIHRvIGFsbCBlbGVtZW50cyBvZiB0aGUgb3V0ZXIgJGNvbGwgY29udGFpbmluZwogICAgICAgKiAgdGhpcyBgV2l0aEZpbHRlcmAgaW5zdGFuY2UgdGhhdCBzYXRpc2Z5IHByZWRpY2F0ZSBgcGAuCiAgICAgICAqCiAgICAgICAqICBAcGFyYW0gIGYgICB0aGUgZnVuY3Rpb24gdGhhdCBpcyBhcHBsaWVkIGZvciBpdHMgc2lkZS1lZmZlY3QgdG8gZXZlcnkgZWxlbWVudC4KICAgICAgICogICAgICAgICAgICAgIFRoZSByZXN1bHQgb2YgZnVuY3Rpb24gYGZgIGlzIGRpc2NhcmRlZC4KICAgICAgICogICAgICAgICAgICAgIAogICAgICAgKiAgQHRwYXJhbSAgVSAgdGhlIHR5cGUgcGFyYW1ldGVyIGRlc2NyaWJpbmcgdGhlIHJlc3VsdCBvZiBmdW5jdGlvbiBgZmAuIAogICAgICAgKiAgICAgICAgICAgICAgVGhpcyByZXN1bHQgd2lsbCBhbHdheXMgYmUgaWdub3JlZC4gVHlwaWNhbGx5IGBVYCBpcyBgVW5pdGAsCiAgICAgICAqICAgICAgICAgICAgICBidXQgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LgogICAgICAgKgogICAgICAgKiAgQHVzZWNhc2UgZGVmIGZvcmVhY2goZjogQSA9PiBVbml0KTogVW5pdAogICAgICAgKi8gICAKICAgICAgZGVmIGZvcmVhY2hbVV0oZjogQSA9PiBVKTogVW5pdCA9IAogICAgICAgIGZvciAoeCA8LSBzZWxmKSAKICAgICAgICAgIGlmIChwKHgpKSBmKHgpCgogICAgICAvKiogRnVydGhlciByZWZpbmVzIHRoZSBmaWx0ZXIgZm9yIHRoaXMgJGNvbGwuCiAgICAgICAqCiAgICAgICAqICBAcGFyYW0gcSAgIHRoZSBwcmVkaWNhdGUgdXNlZCB0byB0ZXN0IGVsZW1lbnRzLgogICAgICAgKiAgQHJldHVybiAgICBhbiBvYmplY3Qgb2YgY2xhc3MgYFdpdGhGaWx0ZXJgLCB3aGljaCBzdXBwb3J0cwogICAgICAgKiAgICAgICAgICAgICBgbWFwYCwgYGZsYXRNYXBgLCBgZm9yZWFjaGAsIGFuZCBgd2l0aEZpbHRlcmAgb3BlcmF0aW9ucy4KICAgICAgICogICAgICAgICAgICAgQWxsIHRoZXNlIG9wZXJhdGlvbnMgYXBwbHkgdG8gdGhvc2UgZWxlbWVudHMgb2YgdGhpcyAkY29sbCB3aGljaAogICAgICAgKiAgICAgICAgICAgICBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUgYHFgIGluIGFkZGl0aW9uIHRvIHRoZSBwcmVkaWNhdGUgYHBgLgogICAgICAgKi8KICAgICAgZGVmIHdpdGhGaWx0ZXIocTogQSA9PiBCb29sZWFuKTogV2l0aEZpbHRlciA9IAogICAgICAgIG5ldyBXaXRoRmlsdGVyKHggPT4gcCh4KSAmJiBxKHgpKQogICAgfQoKICAgIC8vIEEgaGVscGVyIGZvciB0YWlscyBhbmQgaW5pdHMuCiAgICBwcml2YXRlIGRlZiBpdGVyYXRlVW50aWxFbXB0eShmOiBUcmF2ZXJzYWJsZVtBIEB1Vl0gPT4gVHJhdmVyc2FibGVbQSBAdVZdKTogSXRlcmF0b3JbUmVwcl0gPSB7CiAgICAgIHZhbCBpdCA9IEl0ZXJhdG9yLml0ZXJhdGUodGhpc0NvbGxlY3Rpb24pKGYpIHRha2VXaGlsZSAoeCA9PiAheC5pc0VtcHR5KQogICAgICBpdCArKyBJdGVyYXRvcihOaWwpIG1hcCAobmV3QnVpbGRlciArKz0gXyByZXN1bHQpCiAgICB9CiAgfQoKCjwvdGV4dGFyZWE+CjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgdGhlbWU6ICJhbWJpYW5jZSIsCiAgICAgICAgbW9kZTogInRleHQveC1zY2FsYSIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/clojure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEF1dGhvcjogSGFucyBFbmdlbAogKiBCcmFuY2hlZCBmcm9tIENvZGVNaXJyb3IncyBTY2hlbWUgbW9kZSAoYnkgS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4pCiAqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAoY29uZmlnLCBtb2RlKSB7CiAgICB2YXIgQlVJTFRJTiA9ICJidWlsdGluIiwgQ09NTUVOVCA9ICJjb21tZW50IiwgU1RSSU5HID0gInN0cmluZyIsIFRBRyA9ICJ0YWciLAogICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEID0gImtleXdvcmQiOwogICAgdmFyIElOREVOVF9XT1JEX1NLSVAgPSAyLCBLRVlXT1JEU19TS0lQID0gMTsKCiAgICBmdW5jdGlvbiBtYWtlS2V5d29yZHMoc3RyKSB7CiAgICAgICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgdmFyIGF0b21zID0gbWFrZUtleXdvcmRzKCJ0cnVlIGZhbHNlIG5pbCIpOwogICAgCiAgICB2YXIga2V5d29yZHMgPSBtYWtlS2V5d29yZHMoCiAgICAgICJkZWZuIGRlZm4tIGRlZiBkZWYtIGRlZm9uY2UgZGVmbXVsdGkgZGVmbWV0aG9kIGRlZm1hY3JvIGRlZnN0cnVjdCBkZWZ0eXBlIGRlZnByb3RvY29sIGRlZnJlY29yZCBkZWZwcm9qZWN0IGRlZnRlc3Qgc2xpY2UgZGVmYWxpYXMgZGVmaGludGVkIGRlZm1hY3JvLSBkZWZuLW1lbW8gZGVmbmsgZGVmbmsgZGVmb25jZS0gZGVmdW5ib3VuZCBkZWZ1bmJvdW5kLSBkZWZ2YXIgZGVmdmFyLSBsZXQgbGV0Zm4gZG8gY2FzZSBjb25kIGNvbmRwIGZvciBsb29wIHJlY3VyIHdoZW4gd2hlbi1ub3Qgd2hlbi1sZXQgd2hlbi1maXJzdCBpZiBpZi1sZXQgaWYtbm90IC4gLi4gLT4gLT4+IGRvdG8gYW5kIG9yIGRvc3luYyBkb3NlcSBkb3RpbWVzIGRvcnVuIGRvYWxsIGxvYWQgaW1wb3J0IHVuaW1wb3J0IG5zIGluLW5zIHJlZmVyIHRyeSBjYXRjaCBmaW5hbGx5IHRocm93IHdpdGgtb3BlbiB3aXRoLWxvY2FsLXZhcnMgYmluZGluZyBnZW4tY2xhc3MgZ2VuLWFuZC1sb2FkLWNsYXNzIGdlbi1hbmQtc2F2ZS1jbGFzcyBoYW5kbGVyLWNhc2UgaGFuZGxlIik7CgogICAgdmFyIGJ1aWx0aW5zID0gbWFrZUtleXdvcmRzKAogICAgICAgICIqICoxICoyICozICphZ2VudCogKmFsbG93LXVucmVzb2x2ZWQtdmFycyogKmFzc2VydCAqY2xvanVyZS12ZXJzaW9uKiAqY29tbWFuZC1saW5lLWFyZ3MqICpjb21waWxlLWZpbGVzKiAqY29tcGlsZS1wYXRoKiAqZSAqZXJyKiAqZmlsZSogKmZsdXNoLW9uLW5ld2xpbmUqICppbiogKm1hY3JvLW1ldGEqICptYXRoLWNvbnRleHQqICpucyogKm91dCogKnByaW50LWR1cCogKnByaW50LWxlbmd0aCogKnByaW50LWxldmVsKiAqcHJpbnQtbWV0YSogKnByaW50LXJlYWRhYmx5KiAqcmVhZC1ldmFsKiAqc291cmNlLXBhdGgqICp1c2UtY29udGV4dC1jbGFzc2xvYWRlciogKndhcm4tb24tcmVmbGVjdGlvbiogKyAtIC8gPCA8PSA9ID09ID4gPj0gYWNjZXNzb3IgYWNsb25lIGFnZW50IGFnZW50LWVycm9ycyBhZ2V0IGFsZW5ndGggYWxpYXMgYWxsLW5zIGFsdGVyIGFsdGVyLW1ldGEhIGFsdGVyLXZhci1yb290IGFtYXAgYW5jZXN0b3JzIGFuZCBhcHBseSBhcmVkdWNlIGFycmF5LW1hcCBhc2V0IGFzZXQtYm9vbGVhbiBhc2V0LWJ5dGUgYXNldC1jaGFyIGFzZXQtZG91YmxlIGFzZXQtZmxvYXQgYXNldC1pbnQgYXNldC1sb25nIGFzZXQtc2hvcnQgYXNzZXJ0IGFzc29jIGFzc29jISBhc3NvYy1pbiBhc3NvY2lhdGl2ZT8gYXRvbSBhd2FpdCBhd2FpdC1mb3IgYXdhaXQxIGJhc2VzIGJlYW4gYmlnZGVjIGJpZ2ludCBiaW5kaW5nIGJpdC1hbmQgYml0LWFuZC1ub3QgYml0LWNsZWFyIGJpdC1mbGlwIGJpdC1ub3QgYml0LW9yIGJpdC1zZXQgYml0LXNoaWZ0LWxlZnQgYml0LXNoaWZ0LXJpZ2h0IGJpdC10ZXN0IGJpdC14b3IgYm9vbGVhbiBib29sZWFuLWFycmF5IGJvb2xlYW5zIGJvdW5kLWZuIGJvdW5kLWZuKiBidXRsYXN0IGJ5dGUgYnl0ZS1hcnJheSBieXRlcyBjYXNlIGNhc3QgY2hhciBjaGFyLWFycmF5IGNoYXItZXNjYXBlLXN0cmluZyBjaGFyLW5hbWUtc3RyaW5nIGNoYXI/IGNoYXJzIGNodW5rIGNodW5rLWFwcGVuZCBjaHVuay1idWZmZXIgY2h1bmstY29ucyBjaHVuay1maXJzdCBjaHVuay1uZXh0IGNodW5rLXJlc3QgY2h1bmtlZC1zZXE/IGNsYXNzIGNsYXNzPyBjbGVhci1hZ2VudC1lcnJvcnMgY2xvanVyZS12ZXJzaW9uIGNvbGw/IGNvbW1lbnQgY29tbXV0ZSBjb21wIGNvbXBhcmF0b3IgY29tcGFyZSBjb21wYXJlLWFuZC1zZXQhIGNvbXBpbGUgY29tcGxlbWVudCBjb25jYXQgY29uZCBjb25kcCBjb25qIGNvbmohIGNvbnMgY29uc3RhbnRseSBjb25zdHJ1Y3QtcHJveHkgY29udGFpbnM/IGNvdW50IGNvdW50ZWQ/IGNyZWF0ZS1ucyBjcmVhdGUtc3RydWN0IGN5Y2xlIGRlYyBkZWNpbWFsPyBkZWNsYXJlIGRlZmlubGluZSBkZWZtYWNybyBkZWZtZXRob2QgZGVmbXVsdGkgZGVmbiBkZWZuLSBkZWZvbmNlIGRlZnN0cnVjdCBkZWxheSBkZWxheT8gZGVsaXZlciBkZXJlZiBkZXJpdmUgZGVzY2VuZGFudHMgZGVzdHJ1Y3R1cmUgZGlzaiBkaXNqISBkaXNzb2MgZGlzc29jISBkaXN0aW5jdCBkaXN0aW5jdD8gZG9hbGwgZG9jIGRvcnVuIGRvc2VxIGRvc3luYyBkb3RpbWVzIGRvdG8gZG91YmxlIGRvdWJsZS1hcnJheSBkb3VibGVzIGRyb3AgZHJvcC1sYXN0IGRyb3Atd2hpbGUgZW1wdHkgZW1wdHk/IGVuc3VyZSBlbnVtZXJhdGlvbi1zZXEgZXZhbCBldmVuPyBldmVyeT8gZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSBleHRlbmRzPyBleHRlbmRlcnMgZmFsc2U/IGZmaXJzdCBmaWxlLXNlcSBmaWx0ZXIgZmluZCBmaW5kLWRvYyBmaW5kLW5zIGZpbmQtdmFyIGZpcnN0IGZsb2F0IGZsb2F0LWFycmF5IGZsb2F0PyBmbG9hdHMgZmx1c2ggZm4gZm4/IGZuZXh0IGZvciBmb3JjZSBmb3JtYXQgZnV0dXJlIGZ1dHVyZS1jYWxsIGZ1dHVyZS1jYW5jZWwgZnV0dXJlLWNhbmNlbGxlZD8gZnV0dXJlLWRvbmU/IGZ1dHVyZT8gZ2VuLWNsYXNzIGdlbi1pbnRlcmZhY2UgZ2Vuc3ltIGdldCBnZXQtaW4gZ2V0LW1ldGhvZCBnZXQtcHJveHktY2xhc3MgZ2V0LXRocmVhZC1iaW5kaW5ncyBnZXQtdmFsaWRhdG9yIGhhc2ggaGFzaC1tYXAgaGFzaC1zZXQgaWRlbnRpY2FsPyBpZGVudGl0eSBpZi1sZXQgaWYtbm90IGlmbj8gaW1wb3J0IGluLW5zIGluYyBpbml0LXByb3h5IGluc3RhbmNlPyBpbnQgaW50LWFycmF5IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJuIGludGVycG9zZSBpbnRvIGludG8tYXJyYXkgaW50cyBpbyEgaXNhPyBpdGVyYXRlIGl0ZXJhdG9yLXNlcSBqdXh0IGtleSBrZXlzIGtleXdvcmQga2V5d29yZD8gbGFzdCBsYXp5LWNhdCBsYXp5LXNlcSBsZXQgbGV0Zm4gbGluZS1zZXEgbGlzdCBsaXN0KiBsaXN0PyBsb2FkIGxvYWQtZmlsZSBsb2FkLXJlYWRlciBsb2FkLXN0cmluZyBsb2FkZWQtbGlicyBsb2NraW5nIGxvbmcgbG9uZy1hcnJheSBsb25ncyBsb29wIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFrZS1hcnJheSBtYWtlLWhpZXJhcmNoeSBtYXAgbWFwPyBtYXBjYXQgbWF4IG1heC1rZXkgbWVtZm4gbWVtb2l6ZSBtZXJnZSBtZXJnZS13aXRoIG1ldGEgbWV0aG9kLXNpZyBtZXRob2RzIG1pbiBtaW4ta2V5IG1vZCBuYW1lIG5hbWVzcGFjZSBuZWc/IG5ld2xpbmUgbmV4dCBuZmlyc3QgbmlsPyBubmV4dCBub3Qgbm90LWFueT8gbm90LWVtcHR5IG5vdC1ldmVyeT8gbm90PSBucyBucy1hbGlhc2VzIG5zLWltcG9ydHMgbnMtaW50ZXJucyBucy1tYXAgbnMtbmFtZSBucy1wdWJsaWNzIG5zLXJlZmVycyBucy1yZXNvbHZlIG5zLXVuYWxpYXMgbnMtdW5tYXAgbnRoIG50aG5leHQgbnVtIG51bWJlcj8gb2RkPyBvciBwYXJlbnRzIHBhcnRpYWwgcGFydGl0aW9uIHBjYWxscyBwZWVrIHBlcnNpc3RlbnQhIHBtYXAgcG9wIHBvcCEgcG9wLXRocmVhZC1iaW5kaW5ncyBwb3M/IHByIHByLXN0ciBwcmVmZXItbWV0aG9kIHByZWZlcnMgcHJpbWl0aXZlcy1jbGFzc25hbWVzIHByaW50IHByaW50LWN0b3IgcHJpbnQtZG9jIHByaW50LWR1cCBwcmludC1tZXRob2QgcHJpbnQtbmFtZXNwYWNlLWRvYyBwcmludC1zaW1wbGUgcHJpbnQtc3BlY2lhbC1kb2MgcHJpbnQtc3RyIHByaW50ZiBwcmludGxuIHByaW50bG4tc3RyIHBybiBwcm4tc3RyIHByb21pc2UgcHJveHkgcHJveHktY2FsbC13aXRoLXN1cGVyIHByb3h5LW1hcHBpbmdzIHByb3h5LW5hbWUgcHJveHktc3VwZXIgcHVzaC10aHJlYWQtYmluZGluZ3MgcHZhbHVlcyBxdW90IHJhbmQgcmFuZC1pbnQgcmFuZ2UgcmF0aW8/IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZS1maW5kIHJlLWdyb3VwcyByZS1tYXRjaGVyIHJlLW1hdGNoZXMgcmUtcGF0dGVybiByZS1zZXEgcmVhZCByZWFkLWxpbmUgcmVhZC1zdHJpbmcgcmVpZnkgcmVkdWNlIHJlZiByZWYtaGlzdG9yeS1jb3VudCByZWYtbWF4LWhpc3RvcnkgcmVmLW1pbi1oaXN0b3J5IHJlZi1zZXQgcmVmZXIgcmVmZXItY2xvanVyZSByZWxlYXNlLXBlbmRpbmctc2VuZHMgcmVtIHJlbW92ZSByZW1vdmUtbWV0aG9kIHJlbW92ZS1ucyByZXBlYXQgcmVwZWF0ZWRseSByZXBsYWNlIHJlcGxpY2F0ZSByZXF1aXJlIHJlc2V0ISByZXNldC1tZXRhISByZXNvbHZlIHJlc3QgcmVzdWx0c2V0LXNlcSByZXZlcnNlIHJldmVyc2libGU/IHJzZXEgcnN1YnNlcSBzYXRpc2ZpZXM/IHNlY29uZCBzZWxlY3Qta2V5cyBzZW5kIHNlbmQtb2ZmIHNlcSBzZXE/IHNlcXVlIHNlcXVlbmNlIHNlcXVlbnRpYWw/IHNldCBzZXQtdmFsaWRhdG9yISBzZXQ/IHNob3J0IHNob3J0LWFycmF5IHNob3J0cyBzaHV0ZG93bi1hZ2VudHMgc2x1cnAgc29tZSBzb3J0IHNvcnQtYnkgc29ydGVkLW1hcCBzb3J0ZWQtbWFwLWJ5IHNvcnRlZC1zZXQgc29ydGVkLXNldC1ieSBzb3J0ZWQ/IHNwZWNpYWwtZm9ybS1hbmNob3Igc3BlY2lhbC1zeW1ib2w/IHNwbGl0LWF0IHNwbGl0LXdpdGggc3RyIHN0cmVhbT8gc3RyaW5nPyBzdHJ1Y3Qgc3RydWN0LW1hcCBzdWJzIHN1YnNlcSBzdWJ2ZWMgc3VwZXJzIHN3YXAhIHN5bWJvbCBzeW1ib2w/IHN5bmMgc3ludGF4LXN5bWJvbC1hbmNob3IgdGFrZSB0YWtlLWxhc3QgdGFrZS1udGggdGFrZS13aGlsZSB0ZXN0IHRoZS1ucyB0aW1lIHRvLWFycmF5IHRvLWFycmF5LTJkIHRyYW1wb2xpbmUgdHJhbnNpZW50IHRyZWUtc2VxIHRydWU/IHR5cGUgdW5jaGVja2VkLWFkZCB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1kaXZpZGUgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtbXVsdGlwbHkgdW5jaGVja2VkLW5lZ2F0ZSB1bmNoZWNrZWQtcmVtYWluZGVyIHVuY2hlY2tlZC1zdWJ0cmFjdCB1bmRlcml2ZSB1bnF1b3RlIHVucXVvdGUtc3BsaWNpbmcgdXBkYXRlLWluIHVwZGF0ZS1wcm94eSB1c2UgdmFsIHZhbHMgdmFyLWdldCB2YXItc2V0IHZhcj8gdmFyeS1tZXRhIHZlYyB2ZWN0b3IgdmVjdG9yPyB3aGVuIHdoZW4tZmlyc3Qgd2hlbi1sZXQgd2hlbi1ub3Qgd2hpbGUgd2l0aC1iaW5kaW5ncyB3aXRoLWJpbmRpbmdzKiB3aXRoLWluLXN0ciB3aXRoLWxvYWRpbmctY29udGV4dCB3aXRoLWxvY2FsLXZhcnMgd2l0aC1tZXRhIHdpdGgtb3BlbiB3aXRoLW91dC1zdHIgd2l0aC1wcmVjaXNpb24geG1sLXNlcSIpOwoKICAgIHZhciBpbmRlbnRLZXlzID0gbWFrZUtleXdvcmRzKAogICAgICAgIC8vIEJ1aWx0LWlucwogICAgICAgICJucyBmbiBkZWYgZGVmbiBkZWZtZXRob2QgYm91bmQtZm4gaWYgaWYtbm90IGNhc2UgY29uZHAgd2hlbiB3aGlsZSB3aGVuLW5vdCB3aGVuLWZpcnN0IGRvIGZ1dHVyZSBjb21tZW50IGRvdG8gbG9ja2luZyBwcm94eSB3aXRoLW9wZW4gd2l0aC1wcmVjaXNpb24gcmVpZnkgZGVmdHlwZSBkZWZyZWNvcmQgZGVmcHJvdG9jb2wgZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSB0cnkgY2F0Y2ggIiArCgogICAgICAgIC8vIEJpbmRpbmcgZm9ybXMKICAgICAgICAibGV0IGxldGZuIGJpbmRpbmcgbG9vcCBmb3IgZG9zZXEgZG90aW1lcyB3aGVuLWxldCBpZi1sZXQgIiArCgogICAgICAgIC8vIERhdGEgc3RydWN0dXJlcwogICAgICAgICJkZWZzdHJ1Y3Qgc3RydWN0LW1hcCBhc3NvYyAiICsKCiAgICAgICAgLy8gY2xvanVyZS50ZXN0CiAgICAgICAgInRlc3RpbmcgZGVmdGVzdCAiICsKCiAgICAgICAgLy8gY29udHJpYgogICAgICAgICJoYW5kbGVyLWNhc2UgaGFuZGxlIGRvdHJhY2UgZGVmdHJhY2UiKTsKCiAgICB2YXIgdGVzdHMgPSB7CiAgICAgICAgZGlnaXQ6IC9cZC8sCiAgICAgICAgZGlnaXRfb3JfY29sb246IC9bXGQ6XS8sCiAgICAgICAgaGV4OiAvWzAtOWEtZkEtRl0vLAogICAgICAgIHNpZ246IC9bKy1dLywKICAgICAgICBleHBvbmVudDogL1tlRV0vLAogICAgICAgIGtleXdvcmRfY2hhcjogL1teXHNcKFxbXDtcKVxdXS8sCiAgICAgICAgYmFzaWM6IC9bXHdcJF9cLV0vLAogICAgICAgIGxhbmdfa2V5d29yZDogL1tcdyorIVwtXz86XC9dLwogICAgfTsKCiAgICBmdW5jdGlvbiBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgcHJldikgeyAvLyByZXByZXNlbnRzIGEgc3RhdGUgc3RhY2sgb2JqZWN0CiAgICAgICAgdGhpcy5pbmRlbnQgPSBpbmRlbnQ7CiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICAgICB0aGlzLnByZXYgPSBwcmV2OwogICAgfQoKICAgIGZ1bmN0aW9uIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50LCB0eXBlKSB7CiAgICAgICAgc3RhdGUuaW5kZW50U3RhY2sgPSBuZXcgc3RhdGVTdGFjayhpbmRlbnQsIHR5cGUsIHN0YXRlLmluZGVudFN0YWNrKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3BTdGFjayhzdGF0ZSkgewogICAgICAgIHN0YXRlLmluZGVudFN0YWNrID0gc3RhdGUuaW5kZW50U3RhY2sucHJldjsKICAgIH0KCiAgICBmdW5jdGlvbiBpc051bWJlcihjaCwgc3RyZWFtKXsKICAgICAgICAvLyBoZXgKICAgICAgICBpZiAoIGNoID09PSAnMCcgJiYgJ3gnID09IHN0cmVhbS5wZWVrKCkudG9Mb3dlckNhc2UoKSApIHsKICAgICAgICAgICAgc3RyZWFtLmVhdCgneCcpOwogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuaGV4KTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBsZWFkaW5nIHNpZ24KICAgICAgICBpZiAoIGNoID09ICcrJyB8fCBjaCA9PSAnLScgKSB7CiAgICAgICAgICBzdHJlYW0uZWF0KHRlc3RzLnNpZ24pOwogICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCB0ZXN0cy5kaWdpdC50ZXN0KGNoKSApIHsKICAgICAgICAgICAgc3RyZWFtLmVhdChjaCk7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5kaWdpdCk7CgogICAgICAgICAgICBpZiAoICcuJyA9PSBzdHJlYW0ucGVlaygpICkgewogICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgnLicpOwogICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHRlc3RzLmRpZ2l0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAnZScgPT0gc3RyZWFtLnBlZWsoKS50b0xvd2VyQ2FzZSgpICkgewogICAgICAgICAgICAgICAgc3RyZWFtLmVhdCh0ZXN0cy5leHBvbmVudCk7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KHRlc3RzLnNpZ24pOwogICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHRlc3RzLmRpZ2l0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBpbmRlbnRTdGFjazogbnVsbCwKICAgICAgICAgICAgICAgIGluZGVudGF0aW9uOiAwLAogICAgICAgICAgICAgICAgbW9kZTogZmFsc2UKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwgJiYgc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaW5kZW50YXRpb24sIGJ1dCBvbmx5IGlmIGluZGVudFN0YWNrIGlzIGVtcHR5CiAgICAgICAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBza2lwIHNwYWNlcwogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZXR1cm5UeXBlID0gbnVsbDsKCiAgICAgICAgICAgIHN3aXRjaChzdGF0ZS5tb2RlKXsKICAgICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6IC8vIG11bHRpLWxpbmUgc3RyaW5nIHBhcnNpbmcgbW9kZQogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0LCBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSAiXCIiICYmICFlc2NhcGVkKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFNUUklORzsgLy8gY29udGludWUgb24gaW4gc3RyaW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGRlZmF1bHQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICJcIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gU1RSSU5HOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIiciICYmICEoIHRlc3RzLmRpZ2l0X29yX2NvbG9uLnRlc3Qoc3RyZWFtLnBlZWsoKSkgKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICI7IikgeyAvLyBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsgLy8gcmVzdCBvZiB0aGUgbGluZSBpcyBhIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihjaCxzdHJlYW0pKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICIoIiB8fCBjaCA9PSAiWyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleVdvcmQgPSAnJzsgdmFyIGluZGVudFRlbXAgPSBzdHJlYW0uY29sdW1uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgKGluZGVudC13b3JkIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIChub24taW5kZW50LXdvcmQgLi4KICAgICAgICAgICAgICAgICAgICAgICAgKDtzb21ldGhpbmcgZWxzZSwgYnJhY2tldCwgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICIoIikgd2hpbGUgKChsZXR0ZXIgPSBzdHJlYW0uZWF0KHRlc3RzLmtleXdvcmRfY2hhcikpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVdvcmQgKz0gbGV0dGVyOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5V29yZC5sZW5ndGggPiAwICYmIGluZGVudEtleXMucHJvcGVydHlJc0VudW1lcmFibGUoa2V5V29yZCkpIHsgLy8gaW5kZW50LXdvcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIElOREVOVF9XT1JEX1NLSVAsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm9uLWluZGVudCB3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjb250aW51ZSBlYXRpbmcgdGhlIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5wZWVrKCkgPT0gIjsiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyBzaWduaWZpY2FudCBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlc3RhcnQgaW5kZW50YXRpb24gMSBzcGFjZSBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIDEsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnRUZW1wICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGgsIGNoKTsgLy8gZWxzZSB3ZSBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggLSAxKTsgLy8gdW5kbyBhbGwgdGhlIGVhdGluZwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJSQUNLRVQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAiKSIgfHwgY2ggPT0gIl0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCUkFDS0VUOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5kZW50U3RhY2sgIT0gbnVsbCAmJiBzdGF0ZS5pbmRlbnRTdGFjay50eXBlID09IChjaCA9PSAiKSIgPyAiKCIgOiAiWyIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BTdGFjayhzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjaCA9PSAiOiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5sYW5nX2tleXdvcmQpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVRPTTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuYmFzaWMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gS0VZV09SRDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidWlsdGlucyAmJiBidWlsdGlucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJVSUxUSU47CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXRvbXMgJiYgYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBBVE9NOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuVHlwZSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZTsKICAgICAgICB9LAoKICAgICAgICBpbmRlbnQ6IGZ1bmN0aW9uIChzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRlbnRTdGFjayA9PSBudWxsKSByZXR1cm4gc3RhdGUuaW5kZW50YXRpb247CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5pbmRlbnRTdGFjay5pbmRlbnQ7CiAgICAgICAgfQogICAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jbG9qdXJlIiwgImNsb2p1cmUiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENsb2p1cmUgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImNsb2p1cmUuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4O308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDbG9qdXJlIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KOyBDb253YXkncyBHYW1lIG9mIExpZmUsIGJhc2VkIG9uIHRoZSB3b3JrIG9mOgo7OyBMYXVyZW50IFBldGl0IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEyMDAzNDMKOzsgQ2hyaXN0b3BoZSBHcmFuZCBodHRwOi8vY2xqLW1lLmNncmFuZC5uZXQvMjAxMS8wOC8xOS9jb253YXlzLWdhbWUtb2YtbGlmZQoKKG5zIF57OmRvYyAiQ29ud2F5J3MgR2FtZSBvZiBMaWZlLiJ9CiBnYW1lLW9mLWxpZmUpCgo7OyBDb3JlIGdhbWUgb2YgbGlmZSdzIGFsZ29yaXRobSBmdW5jdGlvbnMKCihkZWZuIG5laWdoYm91cnMgCiAgIkdpdmVuIGEgY2VsbCdzIGNvb3JkaW5hdGVzLCByZXR1cm5zIHRoZSBjb29yZGluYXRlcyBvZiBpdHMgbmVpZ2hib3Vycy4iCiAgW1t4IHldXQogIChmb3IgW2R4IFstMSAwIDFdIGR5IChpZiAoemVybz8gZHgpIFstMSAxXSBbLTEgMCAxXSldCiAgICBbKCsgZHggeCkgKCsgZHkgeSldKSkKCihkZWZuIHN0ZXAgCiAgIkdpdmVuIGEgc2V0IG9mIGxpdmluZyBjZWxscywgY29tcHV0ZXMgdGhlIG5ldyBzZXQgb2YgbGl2aW5nIGNlbGxzLiIKICBbY2VsbHNdCiAgKHNldCAoZm9yIFtbY2VsbCBuXSAoZnJlcXVlbmNpZXMgKG1hcGNhdCBuZWlnaGJvdXJzIGNlbGxzKSkKICAgICAgICAgICAgIDp3aGVuIChvciAoPSBuIDMpIChhbmQgKD0gbiAyKSAoY2VsbHMgY2VsbCkpKV0KICAgICAgICAgY2VsbCkpKQoKOzsgVXRpbGl0eSBtZXRob2RzIGZvciBkaXNwbGF5aW5nIGdhbWUgb24gYSB0ZXh0IHRlcm1pbmFsCgooZGVmbiBwcmludC1ib2FyZCAKICAiUHJpbnRzIGEgYm9hcmQgb24gKm91dCosIHJlcHJlc2VudGluZyBhIHN0ZXAgaW4gdGhlIGdhbWUuIgogIFtib2FyZCB3IGhdCiAgKGRvc2VxIFt4IChyYW5nZSAoaW5jIHcpKSB5IChyYW5nZSAoaW5jIGgpKV0KICAgIChpZiAoPSB5IDApIChwcmludCAiXG4iKSkgCiAgICAocHJpbnQgKGlmIChib2FyZCBbeCB5XSkgIltYXSIgIiAuICIpKSkpCgooZGVmbiBkaXNwbGF5LWdyaWRzIAogICJQcmludHMgYSBzcXVlbmNlIG9mIGJvYXJkcyBvbiAqb3V0KiwgcmVwcmVzZW50aW5nIHNldmVyYWwgc3RlcHMuIgogIFtncmlkcyB3IGhdCiAgKGRvc2VxIFtib2FyZCBncmlkc10KICAgIChwcmludC1ib2FyZCBib2FyZCB3IGgpCiAgICAocHJpbnQgIlxuIikpKQoKOzsgTGF1bmNoZXMgYW4gZXhhbXBsZSBib2FyZAoKKGRlZiAKICBeezpkb2MgImJvYXJkIHJlcHJlc2VudHMgdGhlIGluaXRpYWwgc2V0IG9mIGxpdmluZyBjZWxscyJ9CiAgIGJvYXJkICN7WzIgMV0gWzIgMl0gWzIgM119KQoKKGRpc3BsYXktZ3JpZHMgKHRha2UgMyAoaXRlcmF0ZSBzdGVwIGJvYXJkKSkgNSA1KSA8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LWNsb2p1cmU8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/coffeescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIExpbmsgdG8gdGhlIHByb2plY3QncyBHaXRIdWIgcGFnZToKICogaHR0cHM6Ly9naXRodWIuY29tL3BpY2toYXJkdC9jb2ZmZWVzY3JpcHQtY29kZW1pcnJvci1tb2RlCiAqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoJ2NvZmZlZXNjcmlwdCcsIGZ1bmN0aW9uKGNvbmYpIHsKICAgIHZhciBFUlJPUkNMQVNTID0gJ2Vycm9yJzsKCiAgICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oKCIgKyB3b3Jkcy5qb2luKCIpfCgiKSArICIpKVxcYiIpOwogICAgfQoKICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeW1xcK1xcLVxcKi8lJnxcXF5+PD4hXD9dIik7CiAgICB2YXIgc2luZ2xlRGVsaW1pdGVycyA9IG5ldyBSZWdFeHAoJ15bXFwoXFwpXFxbXFxdXFx7XFx9QCw6YD07XFwuXScpOwogICAgdmFyIGRvdWJsZU9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoIl4oKFwtPil8KFw9Pil8KFxcK1xcKyl8KFxcK1xcPSl8KFxcLVxcLSl8KFxcLVxcPSl8KFxcKlxcKil8KFxcKlxcPSl8KFxcL1xcLyl8KFxcL1xcPSl8KD09KXwoIT0pfCg8PSl8KD49KXwoPD4pfCg8PCl8KD4+KXwoLy8pKSIpOwogICAgdmFyIGRvdWJsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCJeKChcXC5cXC4pfChcXCs9KXwoXFwtPSl8KFxcKj0pfCglPSl8KC89KXwoJj0pfChcXHw9KXwoXFxePSkpIik7CiAgICB2YXIgdHJpcGxlRGVsaW1pdGVycyA9IG5ldyBSZWdFeHAoIl4oKFxcLlxcLlxcLil8KC8vPSl8KD4+PSl8KDw8PSl8KFxcKlxcKj0pKSIpOwogICAgdmFyIGlkZW50aWZpZXJzID0gbmV3IFJlZ0V4cCgiXltfQS1aYS16JF1bX0EtWmEteiQwLTldKiIpOwoKICAgIHZhciB3b3JkT3BlcmF0b3JzID0gd29yZFJlZ2V4cChbJ2FuZCcsICdvcicsICdub3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMnLCAnaXNudCcsICdpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnN0YW5jZW9mJywgJ3R5cGVvZiddKTsKICAgIHZhciBpbmRlbnRLZXl3b3JkcyA9IFsnZm9yJywgJ3doaWxlJywgJ2xvb3AnLCAnaWYnLCAndW5sZXNzJywgJ2Vsc2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdzd2l0Y2gnLCAndHJ5JywgJ2NhdGNoJywgJ2ZpbmFsbHknLCAnY2xhc3MnXTsKICAgIHZhciBjb21tb25LZXl3b3JkcyA9IFsnYnJlYWsnLCAnYnknLCAnY29udGludWUnLCAnZGVidWdnZXInLCAnZGVsZXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZG8nLCAnaW4nLCAnb2YnLCAnbmV3JywgJ3JldHVybicsICd0aGVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndGhpcycsICd0aHJvdycsICd3aGVuJywgJ3VudGlsJ107CgogICAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChpbmRlbnRLZXl3b3Jkcy5jb25jYXQoY29tbW9uS2V5d29yZHMpKTsKCiAgICBpbmRlbnRLZXl3b3JkcyA9IHdvcmRSZWdleHAoaW5kZW50S2V5d29yZHMpOwoKCiAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKCd7M318XCJ7M318WydcIl0pIik7CiAgICB2YXIgcmVnZXhQcmVmaXhlcyA9IG5ldyBSZWdFeHAoIl4oL3szfXwvKSIpOwogICAgdmFyIGNvbW1vbkNvbnN0YW50cyA9IFsnSW5maW5pdHknLCAnTmFOJywgJ3VuZGVmaW5lZCcsICdudWxsJywgJ3RydWUnLCAnZmFsc2UnLCAnb24nLCAnb2ZmJywgJ3llcycsICdubyddOwogICAgdmFyIGNvbnN0YW50cyA9IHdvcmRSZWdleHAoY29tbW9uQ29uc3RhbnRzKTsKCiAgICAvLyBUb2tlbml6ZXJzCiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIC8vIEhhbmRsZSBzY29wZSBjaGFuZ2VzCiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICB2YXIgc2NvcGVPZmZzZXQgPSBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0OwogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lT2Zmc2V0ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgICAgICBpZiAobGluZU9mZnNldCA+IHNjb3BlT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdpbmRlbnQnOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lT2Zmc2V0IDwgc2NvcGVPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RlZGVudCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzY29wZU9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBkZWRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTsKCiAgICAgICAgLy8gSGFuZGxlIGRvY2NvIHRpdGxlIGNvbW1lbnQgKHNpbmdsZSBsaW5lKQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIiMjIyMiKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgbXVsdGkgbGluZSBjb21tZW50cwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIiMjIyIpKSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gbG9uZ0NvbW1lbnQ7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CgogICAgICAgIC8vIFNpbmdsZSBsaW5lIGNvbW1lbnQKICAgICAgICBpZiAoY2ggPT09ICcjJykgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgbnVtYmVyIGxpdGVyYWxzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/WzAtOVwuXS8sIGZhbHNlKSkgewogICAgICAgICAgICB2YXIgZmxvYXRMaXRlcmFsID0gZmFsc2U7CiAgICAgICAgICAgIC8vIEZsb2F0cwogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9cZCpcLlxkKyhlW1wrXC1dP1xkKyk/L2kpKSB7CiAgICAgICAgICAgICAgZmxvYXRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9cZCtcLlxkKi8pKSB7CiAgICAgICAgICAgICAgZmxvYXRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9cLlxkKy8pKSB7CiAgICAgICAgICAgICAgZmxvYXRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGZsb2F0TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgLy8gcHJldmVudCBmcm9tIGdldHRpbmcgZXh0cmEgLiBvbiAxLi4KICAgICAgICAgICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09ICIuIil7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBJbnRlZ2VycwogICAgICAgICAgICB2YXIgaW50TGl0ZXJhbCA9IGZhbHNlOwogICAgICAgICAgICAvLyBIZXgKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/MHhbMC05YS1mXSsvaSkpIHsKICAgICAgICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBEZWNpbWFsCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14tP1sxLTldXGQqKGVbXCtcLV0/XGQrKT8vKSkgewogICAgICAgICAgICAgICAgaW50TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gWmVybyBieSBpdHNlbGYgd2l0aCBubyBvdGhlciBwaWVjZSBvZiBudW1iZXIuCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14tPzAoPyFbXGR4XSkvaSkpIHsKICAgICAgICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaW50TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgc3RyaW5ncwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc3RyaW5nUHJlZml4ZXMpKSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5GYWN0b3J5KHN0cmVhbS5jdXJyZW50KCksICdzdHJpbmcnKTsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgICAgICAvLyBIYW5kbGUgcmVnZXggbGl0ZXJhbHMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlZ2V4UHJlZml4ZXMpKSB7CiAgICAgICAgICAgIGlmIChzdHJlYW0uY3VycmVudCgpICE9ICcvJyB8fCBzdHJlYW0ubWF0Y2goL14uKlwvLywgZmFsc2UpKSB7IC8vIHByZXZlbnQgaGlnaGxpZ2h0IG9mIGRpdmlzaW9uCiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuRmFjdG9yeShzdHJlYW0uY3VycmVudCgpLCAnc3RyaW5nLTInKTsKICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBvcGVyYXRvcnMgYW5kIGRlbGltaXRlcnMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRyaXBsZURlbGltaXRlcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3B1bmN0dWF0aW9uJzsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChkb3VibGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaChzaW5nbGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaCh3b3JkT3BlcmF0b3JzKSkgewogICAgICAgICAgICByZXR1cm4gJ29wZXJhdG9yJzsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzaW5nbGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3B1bmN0dWF0aW9uJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goY29uc3RhbnRzKSkgewogICAgICAgICAgICByZXR1cm4gJ2F0b20nOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3JkcykpIHsKICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goaWRlbnRpZmllcnMpKSB7CiAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIG5vbi1kZXRlY3RlZCBpdGVtcwogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5GYWN0b3J5KGRlbGltaXRlciwgb3V0Y2xhc3MpIHsKICAgICAgICB2YXIgc2luZ2xlbGluZSA9IGRlbGltaXRlci5sZW5ndGggPT0gMTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXiciXC9cXF0vKTsKICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0KCdcXCcpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlbGluZSAmJiBzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGNsYXNzOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKGRlbGltaXRlcikpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0Y2xhc3M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL1snIlwvXS8pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzaW5nbGVsaW5lKSB7CiAgICAgICAgICAgICAgICBpZiAoY29uZi5tb2RlLnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMpIHsKICAgICAgICAgICAgICAgICAgICBvdXRjbGFzcyA9IEVSUk9SQ0xBU1MKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG91dGNsYXNzOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gbG9uZ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14jXS8pOwogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKCIjIyMiKSkgewogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoIiMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJjb21tZW50IgogICAgfQoKICAgIGZ1bmN0aW9uIGluZGVudChzdHJlYW0sIHN0YXRlLCB0eXBlKSB7CiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2NvZmZlZSc7CiAgICAgICAgdmFyIGluZGVudFVuaXQgPSAwOwogICAgICAgIGlmICh0eXBlID09PSAnY29mZmVlJykgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1tpXS50eXBlID09PSAnY29mZmVlJykgewogICAgICAgICAgICAgICAgICAgIGluZGVudFVuaXQgPSBzdGF0ZS5zY29wZXNbaV0ub2Zmc2V0ICsgY29uZi5pbmRlbnRVbml0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW5kZW50VW5pdCA9IHN0cmVhbS5jb2x1bW4oKSArIHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5zY29wZXMudW5zaGlmdCh7CiAgICAgICAgICAgIG9mZnNldDogaW5kZW50VW5pdCwKICAgICAgICAgICAgdHlwZTogdHlwZQogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlZGVudChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPT0gMSkgcmV0dXJuOwogICAgICAgIGlmIChzdGF0ZS5zY29wZXNbMF0udHlwZSA9PT0gJ2NvZmZlZScpIHsKICAgICAgICAgICAgdmFyIF9pbmRlbnQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgdmFyIF9pbmRlbnRfaW5kZXggPSAtMTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5zY29wZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgIGlmIChfaW5kZW50ID09PSBzdGF0ZS5zY29wZXNbaV0ub2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgX2luZGVudF9pbmRleCA9IGk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9pbmRlbnRfaW5kZXggPT09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aGlsZSAoc3RhdGUuc2NvcGVzWzBdLm9mZnNldCAhPT0gX2luZGVudCkgewogICAgICAgICAgICAgICAgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgdmFyIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwoKICAgICAgICAvLyBIYW5kbGUgJy4nIGNvbm5lY3RlZCBpZGVudGlmaWVycwogICAgICAgIGlmIChjdXJyZW50ID09PSAnLicpIHsKICAgICAgICAgICAgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgICAgICAgIGlmIChzdHlsZSA9PT0gJ3ZhcmlhYmxlJykgewogICAgICAgICAgICAgICAgcmV0dXJuICd2YXJpYWJsZSc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIHByb3BlcnRpZXMKICAgICAgICBpZiAoY3VycmVudCA9PT0gJ0AnKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXQoJ0AnKTsKICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJzsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBzY29wZSBjaGFuZ2VzLgogICAgICAgIGlmIChjdXJyZW50ID09PSAncmV0dXJuJykgewogICAgICAgICAgICBzdGF0ZS5kZWRlbnQgKz0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCgoY3VycmVudCA9PT0gJy0+JyB8fCBjdXJyZW50ID09PSAnPT4nKSAmJgogICAgICAgICAgICAgICAgICAhc3RhdGUubGFtYmRhICYmCiAgICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blc1swXS50eXBlID09ICdjb2ZmZWUnICYmCiAgICAgICAgICAgICAgICAgIHN0cmVhbS5wZWVrKCkgPT09ICcnKQogICAgICAgICAgICAgICB8fCBzdHlsZSA9PT0gJ2luZGVudCcpIHsKICAgICAgICAgICAgaW5kZW50KHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsaW1pdGVyX2luZGV4ID0gJ1soeycuaW5kZXhPZihjdXJyZW50KTsKICAgICAgICBpZiAoZGVsaW1pdGVyX2luZGV4ICE9PSAtMSkgewogICAgICAgICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSwgJ10pfScuc2xpY2UoZGVsaW1pdGVyX2luZGV4LCBkZWxpbWl0ZXJfaW5kZXgrMSkpOwogICAgICAgIH0KICAgICAgICBpZiAoaW5kZW50S2V5d29yZHMuZXhlYyhjdXJyZW50KSl7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgaWYgKGN1cnJlbnQgPT0gJ3RoZW4nKXsKICAgICAgICAgICAgZGVkZW50KHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KCgogICAgICAgIGlmIChzdHlsZSA9PT0gJ2RlZGVudCcpIHsKICAgICAgICAgICAgaWYgKGRlZGVudChzdHJlYW0sIHN0YXRlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVsaW1pdGVyX2luZGV4ID0gJ10pfScuaW5kZXhPZihjdXJyZW50KTsKICAgICAgICBpZiAoZGVsaW1pdGVyX2luZGV4ICE9PSAtMSkgewogICAgICAgICAgICBpZiAoZGVkZW50KHN0cmVhbSwgc3RhdGUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUuZGVkZW50ID4gMCAmJiBzdHJlYW0uZW9sKCkgJiYgc3RhdGUuc2NvcGVzWzBdLnR5cGUgPT0gJ2NvZmZlZScpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPiAxKSBzdGF0ZS5zY29wZXMuc2hpZnQoKTsKICAgICAgICAgICAgc3RhdGUuZGVkZW50IC09IDE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3R5bGU7CiAgICB9CgogICAgdmFyIGV4dGVybmFsID0gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIHNjb3BlczogW3tvZmZzZXQ6YmFzZWNvbHVtbiB8fCAwLCB0eXBlOidjb2ZmZWUnfV0sCiAgICAgICAgICAgICAgbGFzdFRva2VuOiBudWxsLAogICAgICAgICAgICAgIGxhbWJkYTogZmFsc2UsCiAgICAgICAgICAgICAgZGVkZW50OiAwCiAgICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSk7CgogICAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW4gPSB7c3R5bGU6c3R5bGUsIGNvbnRlbnQ6IHN0cmVhbS5jdXJyZW50KCl9OwoKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSAmJiBzdHJlYW0ubGFtYmRhKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5sYW1iZGEgPSBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICAgIH0sCgogICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgfQoKICAgIH07CiAgICByZXR1cm4gZXh0ZXJuYWw7Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCd0ZXh0L3gtY29mZmVlc2NyaXB0JywgJ2NvZmZlZXNjcmlwdCcpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvZmZlZVNjcmlwdCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY29mZmVlc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHNpbHZlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHNpbHZlcjt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQ29mZmVlU2NyaXB0IG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2ZmZWVTY3JpcHQgbW9kZSBmb3IgQ29kZU1pcnJvcgojIENvcHlyaWdodCAoYykgMjAxMSBKZWZmIFBpY2toYXJkdCwgcmVsZWFzZWQgdW5kZXIKIyB0aGUgTUlUIExpY2Vuc2UuCiMKIyBNb2RpZmllZCBmcm9tIHRoZSBQeXRob24gQ29kZU1pcnJvciBtb2RlLCB3aGljaCBhbHNvIGlzIAojIHVuZGVyIHRoZSBNSVQgTGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsLgojCiMgVGhlIGZvbGxvd2luZyBzY3JpcHQsIFVuZGVyc2NvcmUuY29mZmVlLCBpcyB1c2VkIHRvIAojIGRlbW9uc3RyYXRlIENvZmZlZVNjcmlwdCBtb2RlIGZvciBDb2RlTWlycm9yLgojCiMgVG8gZG93bmxvYWQgQ29mZmVlU2NyaXB0IG1vZGUgZm9yIENvZGVNaXJyb3IsIGdvIHRvOgojIGh0dHBzOi8vZ2l0aHViLmNvbS9waWNraGFyZHQvY29mZmVlc2NyaXB0LWNvZGVtaXJyb3ItbW9kZQoKIyAqKlVuZGVyc2NvcmUuY29mZmVlCiMgKGMpIDIwMTEgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIEluYy4qKgojIFVuZGVyc2NvcmUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQojIFtNSVQgbGljZW5zZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSkuCiMgUG9ydGlvbnMgb2YgVW5kZXJzY29yZSBhcmUgaW5zcGlyZWQgYnkgb3IgYm9ycm93ZWQgZnJvbQojIFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcvYXBpKSwgT2xpdmVyIFN0ZWVsZSdzCiMgW0Z1bmN0aW9uYWxdKGh0dHA6Ly9vc3RlZWxlLmNvbSksIGFuZCBKb2huIFJlc2lnJ3MKIyBbTWljcm8tVGVtcGxhdGluZ10oaHR0cDovL2Vqb2huLm9yZykuCiMgRm9yIGFsbCBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uOgojIGh0dHA6Ly9kb2N1bWVudGNsb3VkLmdpdGh1Yi5jb20vdW5kZXJzY29yZS8KCgojIEJhc2VsaW5lIHNldHVwCiMgLS0tLS0tLS0tLS0tLS0KCiMgRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBnbG9iYWxgIG9uIHRoZSBzZXJ2ZXIuCnJvb3QgPSB0aGlzCgoKIyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLgpwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll8KCiMjIyBNdWx0aWxpbmUKICAgIGNvbW1lbnQKIyMjCgojIEVzdGFibGlzaCB0aGUgb2JqZWN0IHRoYXQgZ2V0cyB0aHJvd24gdG8gYnJlYWsgb3V0IG9mIGEgbG9vcCBpdGVyYXRpb24uCiMgYFN0b3BJdGVyYXRpb25gIGlzIFNPUCBvbiBNb3ppbGxhLgpicmVha2VyID0gaWYgdHlwZW9mKFN0b3BJdGVyYXRpb24pIGlzICd1bmRlZmluZWQnIHRoZW4gJ19fYnJlYWtfXycgZWxzZSBTdG9wSXRlcmF0aW9uCgoKIyMjIyBEb2NjbyBzdHlsZSBzaW5nbGUgbGluZSBjb21tZW50ICh0aXRsZSkKCgojIEhlbHBlciBmdW5jdGlvbiB0byBlc2NhcGUgKipSZWdFeHAqKiBjb250ZW50cywgYmVjYXVzZSBKUyBkb2Vzbid0IGhhdmUgb25lLgplc2NhcGVSZWdFeHAgPSAoc3RyaW5nKSAtPiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFtcXVwvXFxdKS9nLCAnXFwkMScpCgoKIyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOgpBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlCk9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZQoKCiMgQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuCnNsaWNlID0gQXJyYXlQcm90by5zbGljZQp1bnNoaWZ0ID0gQXJyYXlQcm90by51bnNoaWZ0CnRvU3RyaW5nID0gT2JqUHJvdG8udG9TdHJpbmcKaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eQpwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IE9ialByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlCgoKIyBBbGwgKipFQ01BNSoqIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgd2UgaG9wZSB0byB1c2UgYXJlIGRlY2xhcmVkIGhlcmUuCm5hdGl2ZUZvckVhY2ggPSBBcnJheVByb3RvLmZvckVhY2gKbmF0aXZlTWFwID0gQXJyYXlQcm90by5tYXAKbmF0aXZlUmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2UKbmF0aXZlUmVkdWNlUmlnaHQgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0Cm5hdGl2ZUZpbHRlciA9IEFycmF5UHJvdG8uZmlsdGVyCm5hdGl2ZUV2ZXJ5ID0gQXJyYXlQcm90by5ldmVyeQpuYXRpdmVTb21lID0gQXJyYXlQcm90by5zb21lCm5hdGl2ZUluZGV4T2YgPSBBcnJheVByb3RvLmluZGV4T2YKbmF0aXZlTGFzdEluZGV4T2YgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mCm5hdGl2ZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5Cm5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cwoKCiMgQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuCl8gPSAob2JqKSAtPiBuZXcgd3JhcHBlcihvYmopCgoKIyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKkNvbW1vbkpTKiouCmlmIHR5cGVvZihleHBvcnRzKSAhPSAndW5kZWZpbmVkJyB0aGVuIGV4cG9ydHMuXyA9IF8KCgojIEV4cG9ydCBVbmRlcnNjb3JlIHRvIGdsb2JhbCBzY29wZS4Kcm9vdC5fID0gXwoKCiMgQ3VycmVudCB2ZXJzaW9uLgpfLlZFUlNJT04gPSAnMS4xLjAnCgoKIyBDb2xsZWN0aW9uIEZ1bmN0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIFRoZSBjb3JuZXJzdG9uZSwgYW4gKiplYWNoKiogaW1wbGVtZW50YXRpb24uCiMgSGFuZGxlcyBvYmplY3RzIGltcGxlbWVudGluZyAqKmZvckVhY2gqKiwgYXJyYXlzLCBhbmQgcmF3IG9iamVjdHMuCl8uZWFjaCA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIHRyeQogICAgaWYgbmF0aXZlRm9yRWFjaCBhbmQgb2JqLmZvckVhY2ggaXMgbmF0aXZlRm9yRWFjaAogICAgICBvYmouZm9yRWFjaCBpdGVyYXRvciwgY29udGV4dAogICAgZWxzZSBpZiBfLmlzTnVtYmVyIG9iai5sZW5ndGgKICAgICAgaXRlcmF0b3IuY2FsbCBjb250ZXh0LCBvYmpbaV0sIGksIG9iaiBmb3IgaSBpbiBbMC4uLm9iai5sZW5ndGhdCiAgICBlbHNlCiAgICAgIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgdmFsLCBrZXksIG9iaiBmb3Igb3duIGtleSwgdmFsIG9mIG9iagogIGNhdGNoIGUKICAgIHRocm93IGUgaWYgZSBpc250IGJyZWFrZXIKICBvYmoKCgojIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0b3IgdG8gZWFjaCBlbGVtZW50LiBVc2UgSmF2YVNjcmlwdAojIDEuNidzIHZlcnNpb24gb2YgKiptYXAqKiwgaWYgcG9zc2libGUuCl8ubWFwID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmV0dXJuIG9iai5tYXAoaXRlcmF0b3IsIGNvbnRleHQpIGlmIG5hdGl2ZU1hcCBhbmQgb2JqLm1hcCBpcyBuYXRpdmVNYXAKICByZXN1bHRzID0gW10KICBfLmVhY2ggb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAgcmVzdWx0cy5wdXNoIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0CiAgcmVzdWx0cwoKCiMgKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcy4gQWxzbyBrbm93biBhcwojICoqaW5qZWN0KiosIG9yICoqZm9sZGwqKi4gVXNlcyBKYXZhU2NyaXB0IDEuOCdzIHZlcnNpb24gb2YgKipyZWR1Y2UqKiwgaWYgcG9zc2libGUuCl8ucmVkdWNlID0gKG9iaiwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQpIC0+CiAgaWYgbmF0aXZlUmVkdWNlIGFuZCBvYmoucmVkdWNlIGlzIG5hdGl2ZVJlZHVjZQogICAgaXRlcmF0b3IgPSBfLmJpbmQgaXRlcmF0b3IsIGNvbnRleHQgaWYgY29udGV4dAogICAgcmV0dXJuIG9iai5yZWR1Y2UgaXRlcmF0b3IsIG1lbW8KICBfLmVhY2ggb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAgbWVtbyA9IGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgbWVtbywgdmFsdWUsIGluZGV4LCBsaXN0CiAgbWVtbwoKCiMgVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgKipyZWR1Y2UqKiwgYWxzbyBrbm93biBhcyAqKmZvbGRyKiouIFVzZXMKIyBKYXZhU2NyaXB0IDEuOCdzIHZlcnNpb24gb2YgKipyZWR1Y2VSaWdodCoqLCBpZiBhdmFpbGFibGUuCl8ucmVkdWNlUmlnaHQgPSAob2JqLCBpdGVyYXRvciwgbWVtbywgY29udGV4dCkgLT4KICBpZiBuYXRpdmVSZWR1Y2VSaWdodCBhbmQgb2JqLnJlZHVjZVJpZ2h0IGlzIG5hdGl2ZVJlZHVjZVJpZ2h0CiAgICBpdGVyYXRvciA9IF8uYmluZCBpdGVyYXRvciwgY29udGV4dCBpZiBjb250ZXh0CiAgICByZXR1cm4gb2JqLnJlZHVjZVJpZ2h0IGl0ZXJhdG9yLCBtZW1vCiAgcmV2ZXJzZWQgPSBfLmNsb25lKF8udG9BcnJheShvYmopKS5yZXZlcnNlKCkKICBfLnJlZHVjZSByZXZlcnNlZCwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQKCgojIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4KXy5kZXRlY3QgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXN1bHQgPSBudWxsCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIGlmIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0CiAgICAgIHJlc3VsdCA9IHZhbHVlCiAgICAgIF8uYnJlYWtMb29wKCkKICByZXN1bHQKCgojIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuIFVzZSBKYXZhU2NyaXB0IDEuNidzCiMgKipmaWx0ZXIqKiwgaWYgaXQgZXhpc3RzLgpfLmZpbHRlciA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIHJldHVybiBvYmouZmlsdGVyIGl0ZXJhdG9yLCBjb250ZXh0IGlmIG5hdGl2ZUZpbHRlciBhbmQgb2JqLmZpbHRlciBpcyBuYXRpdmVGaWx0ZXIKICByZXN1bHRzID0gW10KICBfLmVhY2ggb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAgcmVzdWx0cy5wdXNoIHZhbHVlIGlmIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0CiAgcmVzdWx0cwoKCiMgUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy4KXy5yZWplY3QgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXN1bHRzID0gW10KICBfLmVhY2ggb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAgcmVzdWx0cy5wdXNoIHZhbHVlIGlmIG5vdCBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogIHJlc3VsdHMKCgojIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0LiBEZWxlZ2F0ZSB0bwojIEphdmFTY3JpcHQgMS42J3MgKipldmVyeSoqLCBpZiBpdCBpcyBwcmVzZW50LgpfLmV2ZXJ5ID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgaXRlcmF0b3IgfHw9IF8uaWRlbnRpdHkKICByZXR1cm4gb2JqLmV2ZXJ5IGl0ZXJhdG9yLCBjb250ZXh0IGlmIG5hdGl2ZUV2ZXJ5IGFuZCBvYmouZXZlcnkgaXMgbmF0aXZlRXZlcnkKICByZXN1bHQgPSB0cnVlCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIF8uYnJlYWtMb29wKCkgdW5sZXNzIChyZXN1bHQgPSByZXN1bHQgYW5kIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkKICByZXN1bHQKCgojIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LiBVc2UKIyBKYXZhU2NyaXB0IDEuNidzICoqc29tZSoqLCBpZiBpdCBleGlzdHMuCl8uc29tZSA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIGl0ZXJhdG9yIHx8PSBfLmlkZW50aXR5CiAgcmV0dXJuIG9iai5zb21lIGl0ZXJhdG9yLCBjb250ZXh0IGlmIG5hdGl2ZVNvbWUgYW5kIG9iai5zb21lIGlzIG5hdGl2ZVNvbWUKICByZXN1bHQgPSBmYWxzZQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBfLmJyZWFrTG9vcCgpIGlmIChyZXN1bHQgPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpCiAgcmVzdWx0CgoKIyBEZXRlcm1pbmUgaWYgYSBnaXZlbiB2YWx1ZSBpcyBpbmNsdWRlZCBpbiB0aGUgYXJyYXkgb3Igb2JqZWN0LAojIGJhc2VkIG9uIGA9PT1gLgpfLmluY2x1ZGUgPSAob2JqLCB0YXJnZXQpIC0+CiAgcmV0dXJuIF8uaW5kZXhPZihvYmosIHRhcmdldCkgaXNudCAtMSBpZiBuYXRpdmVJbmRleE9mIGFuZCBvYmouaW5kZXhPZiBpcyBuYXRpdmVJbmRleE9mCiAgcmV0dXJuIHRydWUgZm9yIG93biBrZXksIHZhbCBvZiBvYmogd2hlbiB2YWwgaXMgdGFyZ2V0CiAgZmFsc2UKCgojIEludm9rZSBhIG1ldGhvZCB3aXRoIGFyZ3VtZW50cyBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi4KXy5pbnZva2UgPSAob2JqLCBtZXRob2QpIC0+CiAgYXJncyA9IF8ucmVzdCBhcmd1bWVudHMsIDIKICAoaWYgbWV0aG9kIHRoZW4gdmFsW21ldGhvZF0gZWxzZSB2YWwpLmFwcGx5KHZhbCwgYXJncykgZm9yIHZhbCBpbiBvYmoKCgojIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgKiptYXAqKjogZmV0Y2hpbmcgYSBwcm9wZXJ0eS4KXy5wbHVjayA9IChvYmosIGtleSkgLT4KICBfLm1hcChvYmosICh2YWwpIC0+IHZhbFtrZXldKQoKCiMgUmV0dXJuIHRoZSBtYXhpbXVtIGl0ZW0gb3IgKGl0ZW0tYmFzZWQgY29tcHV0YXRpb24pLgpfLm1heCA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCBvYmopIGlmIG5vdCBpdGVyYXRvciBhbmQgXy5pc0FycmF5KG9iaikKICByZXN1bHQgPSBjb21wdXRlZDogLUluZmluaXR5CiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIGNvbXB1dGVkID0gaWYgaXRlcmF0b3IgdGhlbiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkgZWxzZSB2YWx1ZQogICAgY29tcHV0ZWQgPj0gcmVzdWx0LmNvbXB1dGVkIGFuZCAocmVzdWx0ID0ge3ZhbHVlOiB2YWx1ZSwgY29tcHV0ZWQ6IGNvbXB1dGVkfSkKICByZXN1bHQudmFsdWUKCgojIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS4KXy5taW4gPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCwgb2JqKSBpZiBub3QgaXRlcmF0b3IgYW5kIF8uaXNBcnJheShvYmopCiAgcmVzdWx0ID0gY29tcHV0ZWQ6IEluZmluaXR5CiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIGNvbXB1dGVkID0gaWYgaXRlcmF0b3IgdGhlbiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkgZWxzZSB2YWx1ZQogICAgY29tcHV0ZWQgPCByZXN1bHQuY29tcHV0ZWQgYW5kIChyZXN1bHQgPSB7dmFsdWU6IHZhbHVlLCBjb21wdXRlZDogY29tcHV0ZWR9KQogIHJlc3VsdC52YWx1ZQoKCiMgU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdG9yLgpfLnNvcnRCeSA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIF8ucGx1Y2soKChfLm1hcCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICB7dmFsdWU6IHZhbHVlLCBjcml0ZXJpYTogaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpfQogICkuc29ydCgobGVmdCwgcmlnaHQpIC0+CiAgICBhID0gbGVmdC5jcml0ZXJpYTsgYiA9IHJpZ2h0LmNyaXRlcmlhCiAgICBpZiBhIDwgYiB0aGVuIC0xIGVsc2UgaWYgYSA+IGIgdGhlbiAxIGVsc2UgMAogICkpLCAndmFsdWUnKQoKCiMgVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IGF0IHdoYXQgaW5kZXggYW4gb2JqZWN0IHNob3VsZAojIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guCl8uc29ydGVkSW5kZXggPSAoYXJyYXksIG9iaiwgaXRlcmF0b3IpIC0+CiAgaXRlcmF0b3IgfHw9IF8uaWRlbnRpdHkKICBsb3cgPSAwCiAgaGlnaCA9IGFycmF5Lmxlbmd0aAogIHdoaWxlIGxvdyA8IGhpZ2gKICAgIG1pZCA9IChsb3cgKyBoaWdoKSA+PiAxCiAgICBpZiBpdGVyYXRvcihhcnJheVttaWRdKSA8IGl0ZXJhdG9yKG9iaikgdGhlbiBsb3cgPSBtaWQgKyAxIGVsc2UgaGlnaCA9IG1pZAogIGxvdwoKCiMgQ29udmVydCBhbnl0aGluZyBpdGVyYWJsZSBpbnRvIGEgcmVhbCwgbGl2ZSBhcnJheS4KXy50b0FycmF5ID0gKGl0ZXJhYmxlKSAtPgogIHJldHVybiBbXSBpZiAoIWl0ZXJhYmxlKQogIHJldHVybiBpdGVyYWJsZS50b0FycmF5KCkgaWYgKGl0ZXJhYmxlLnRvQXJyYXkpCiAgcmV0dXJuIGl0ZXJhYmxlIGlmIChfLmlzQXJyYXkoaXRlcmFibGUpKQogIHJldHVybiBzbGljZS5jYWxsKGl0ZXJhYmxlKSBpZiAoXy5pc0FyZ3VtZW50cyhpdGVyYWJsZSkpCiAgXy52YWx1ZXMoaXRlcmFibGUpCgoKIyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3QuCl8uc2l6ZSA9IChvYmopIC0+IF8udG9BcnJheShvYmopLmxlbmd0aAoKCiMgQXJyYXkgRnVuY3Rpb25zCiMgLS0tLS0tLS0tLS0tLS0tCgojIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyBgbmAgd2lsbCByZXR1cm4gdGhlIGZpcnN0IE4KIyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzICoqaGVhZCoqLiBUaGUgYGd1YXJkYCBjaGVjayBhbGxvd3MgaXQgdG8gd29yawojIHdpdGggKiptYXAqKi4KXy5maXJzdCA9IChhcnJheSwgbiwgZ3VhcmQpIC0+CiAgaWYgbiBhbmQgbm90IGd1YXJkIHRoZW4gc2xpY2UuY2FsbChhcnJheSwgMCwgbikgZWxzZSBhcnJheVswXQoKCiMgUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzICoqdGFpbCoqLgojIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuIGBpbmRleGAgd2lsbCByZXR1cm4KIyB0aGUgcmVzdCBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSBmcm9tIHRoYXQgaW5kZXggb253YXJkLiBUaGUgYGd1YXJkYAojIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGggKiptYXAqKi4KXy5yZXN0ID0gKGFycmF5LCBpbmRleCwgZ3VhcmQpIC0+CiAgc2xpY2UuY2FsbChhcnJheSwgaWYgXy5pc1VuZGVmaW5lZChpbmRleCkgb3IgZ3VhcmQgdGhlbiAxIGVsc2UgaW5kZXgpCgoKIyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4KXy5sYXN0ID0gKGFycmF5KSAtPiBhcnJheVthcnJheS5sZW5ndGggLSAxXQoKCiMgVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LgpfLmNvbXBhY3QgPSAoYXJyYXkpIC0+IGl0ZW0gZm9yIGl0ZW0gaW4gYXJyYXkgd2hlbiBpdGVtCgoKIyBSZXR1cm4gYSBjb21wbGV0ZWx5IGZsYXR0ZW5lZCB2ZXJzaW9uIG9mIGFuIGFycmF5LgpfLmZsYXR0ZW4gPSAoYXJyYXkpIC0+CiAgXy5yZWR1Y2UgYXJyYXksIChtZW1vLCB2YWx1ZSkgLT4KICAgIHJldHVybiBtZW1vLmNvbmNhdChfLmZsYXR0ZW4odmFsdWUpKSBpZiBfLmlzQXJyYXkgdmFsdWUKICAgIG1lbW8ucHVzaCB2YWx1ZQogICAgbWVtbwogICwgW10KCgojIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLgpfLndpdGhvdXQgPSAoYXJyYXkpIC0+CiAgdmFsdWVzID0gXy5yZXN0IGFyZ3VtZW50cwogIHZhbCBmb3IgdmFsIGluIF8udG9BcnJheShhcnJheSkgd2hlbiBub3QgXy5pbmNsdWRlIHZhbHVlcywgdmFsCgoKIyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeQojIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS4KXy51bmlxID0gKGFycmF5LCBpc1NvcnRlZCkgLT4KICBtZW1vID0gW10KICBmb3IgZWwsIGkgaW4gXy50b0FycmF5IGFycmF5CiAgICBtZW1vLnB1c2ggZWwgaWYgaSBpcyAwIHx8IChpZiBpc1NvcnRlZCBpcyB0cnVlIHRoZW4gXy5sYXN0KG1lbW8pIGlzbnQgZWwgZWxzZSBub3QgXy5pbmNsdWRlKG1lbW8sIGVsKSkKICBtZW1vCgoKIyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlCiMgcGFzc2VkLWluIGFycmF5cy4KXy5pbnRlcnNlY3QgPSAoYXJyYXkpIC0+CiAgcmVzdCA9IF8ucmVzdCBhcmd1bWVudHMKICBfLnNlbGVjdCBfLnVuaXEoYXJyYXkpLCAoaXRlbSkgLT4KICAgIF8uYWxsIHJlc3QsIChvdGhlcikgLT4KICAgICAgXy5pbmRleE9mKG90aGVyLCBpdGVtKSA+PSAwCgoKIyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlCiMgYW4gaW5kZXggZ28gdG9nZXRoZXIuCl8uemlwID0gLT4KICBsZW5ndGggPSBfLm1heCBfLnBsdWNrIGFyZ3VtZW50cywgJ2xlbmd0aCcKICByZXN1bHRzID0gbmV3IEFycmF5IGxlbmd0aAogIGZvciBpIGluIFswLi4ubGVuZ3RoXQogICAgcmVzdWx0c1tpXSA9IF8ucGx1Y2sgYXJndW1lbnRzLCBTdHJpbmcgaQogIHJlc3VsdHMKCgojIElmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcGx5IHVzIHdpdGggKippbmRleE9mKiogKEknbSBsb29raW5nIGF0IHlvdSwgTVNJRSksCiMgd2UgbmVlZCB0aGlzIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuCiMgaXRlbSBpbiBhbiBhcnJheSwgb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS4KXy5pbmRleE9mID0gKGFycmF5LCBpdGVtKSAtPgogIHJldHVybiBhcnJheS5pbmRleE9mIGl0ZW0gaWYgbmF0aXZlSW5kZXhPZiBhbmQgYXJyYXkuaW5kZXhPZiBpcyBuYXRpdmVJbmRleE9mCiAgaSA9IDA7IGwgPSBhcnJheS5sZW5ndGgKICB3aGlsZSBsIC0gaQogICAgaWYgYXJyYXlbaV0gaXMgaXRlbSB0aGVuIHJldHVybiBpIGVsc2UgaSsrCiAgLTEKCgojIFByb3ZpZGUgSmF2YVNjcmlwdCAxLjYncyAqKmxhc3RJbmRleE9mKiosIGRlbGVnYXRpbmcgdG8gdGhlIG5hdGl2ZSBmdW5jdGlvbiwKIyBpZiBwb3NzaWJsZS4KXy5sYXN0SW5kZXhPZiA9IChhcnJheSwgaXRlbSkgLT4KICByZXR1cm4gYXJyYXkubGFzdEluZGV4T2YoaXRlbSkgaWYgbmF0aXZlTGFzdEluZGV4T2YgYW5kIGFycmF5Lmxhc3RJbmRleE9mIGlzIG5hdGl2ZUxhc3RJbmRleE9mCiAgaSA9IGFycmF5Lmxlbmd0aAogIHdoaWxlIGkKICAgIGlmIGFycmF5W2ldIGlzIGl0ZW0gdGhlbiByZXR1cm4gaSBlbHNlIGktLQogIC0xCgoKIyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mCiMgW3RoZSBuYXRpdmUgUHl0aG9uICoqcmFuZ2UqKiBmdW5jdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS4KXy5yYW5nZSA9IChzdGFydCwgc3RvcCwgc3RlcCkgLT4KICBhID0gYXJndW1lbnRzCiAgc29sbyA9IGEubGVuZ3RoIDw9IDEKICBpID0gc3RhcnQgPSBpZiBzb2xvIHRoZW4gMCBlbHNlIGFbMF0KICBzdG9wID0gaWYgc29sbyB0aGVuIGFbMF0gZWxzZSBhWzFdCiAgc3RlcCA9IGFbMl0gb3IgMQogIGxlbiA9IE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApCiAgcmV0dXJuIFtdIGlmIGxlbiA8PSAwCiAgcmFuZ2UgPSBuZXcgQXJyYXkgbGVuCiAgaWR4ID0gMAogIGxvb3AKICAgIHJldHVybiByYW5nZSBpZiAoaWYgc3RlcCA+IDAgdGhlbiBpIC0gc3RvcCBlbHNlIHN0b3AgLSBpKSA+PSAwCiAgICByYW5nZVtpZHhdID0gaQogICAgaWR4KysKICAgIGkrPSBzdGVwCgoKIyBGdW5jdGlvbiBGdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0KCiMgQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsCiMgb3B0aW9uYWxseSkuIEJpbmRpbmcgd2l0aCBhcmd1bWVudHMgaXMgYWxzbyBrbm93biBhcyAqKmN1cnJ5KiouCl8uYmluZCA9IChmdW5jLCBvYmopIC0+CiAgYXJncyA9IF8ucmVzdCBhcmd1bWVudHMsIDIKICAtPiBmdW5jLmFwcGx5IG9iaiBvciByb290LCBhcmdzLmNvbmNhdCBhcmd1bWVudHMKCgojIEJpbmQgYWxsIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdAojIGFsbCBjYWxsYmFja3MgZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LgpfLmJpbmRBbGwgPSAob2JqKSAtPgogIGZ1bmNzID0gaWYgYXJndW1lbnRzLmxlbmd0aCA+IDEgdGhlbiBfLnJlc3QoYXJndW1lbnRzKSBlbHNlIF8uZnVuY3Rpb25zKG9iaikKICBfLmVhY2ggZnVuY3MsIChmKSAtPiBvYmpbZl0gPSBfLmJpbmQgb2JqW2ZdLCBvYmoKICBvYmoKCgojIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHMKIyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuCl8uZGVsYXkgPSAoZnVuYywgd2FpdCkgLT4KICBhcmdzID0gXy5yZXN0IGFyZ3VtZW50cywgMgogIHNldFRpbWVvdXQoKC0+IGZ1bmMuYXBwbHkoZnVuYywgYXJncykpLCB3YWl0KQoKCiMgTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy4KXy5tZW1vaXplID0gKGZ1bmMsIGhhc2hlcikgLT4KICBtZW1vID0ge30KICBoYXNoZXIgb3I9IF8uaWRlbnRpdHkKICAtPgogICAga2V5ID0gaGFzaGVyLmFwcGx5IHRoaXMsIGFyZ3VtZW50cwogICAgcmV0dXJuIG1lbW9ba2V5XSBpZiBrZXkgb2YgbWVtbwogICAgbWVtb1trZXldID0gZnVuYy5hcHBseSB0aGlzLCBhcmd1bWVudHMKCgojIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hlZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhcwojIGNsZWFyZWQuCl8uZGVmZXIgPSAoZnVuYykgLT4KICBfLmRlbGF5LmFwcGx5IF8sIFtmdW5jLCAxXS5jb25jYXQgXy5yZXN0IGFyZ3VtZW50cwoKCiMgUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsCiMgYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZAojIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uCl8ud3JhcCA9IChmdW5jLCB3cmFwcGVyKSAtPgogIC0+IHdyYXBwZXIuYXBwbHkgd3JhcHBlciwgW2Z1bmNdLmNvbmNhdCBhcmd1bWVudHMKCgojIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoCiMgY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy4KXy5jb21wb3NlID0gLT4KICBmdW5jcyA9IGFyZ3VtZW50cwogIC0+CiAgICBhcmdzID0gYXJndW1lbnRzCiAgICBmb3IgaSBpbiBbZnVuY3MubGVuZ3RoIC0gMS4uMF0gYnkgLTEKICAgICAgYXJncyA9IFtmdW5jc1tpXS5hcHBseSh0aGlzLCBhcmdzKV0KICAgIGFyZ3NbMF0KCgojIE9iamVjdCBGdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tCgojIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLgpfLmtleXMgPSBuYXRpdmVLZXlzIG9yIChvYmopIC0+CiAgcmV0dXJuIF8ucmFuZ2UgMCwgb2JqLmxlbmd0aCBpZiBfLmlzQXJyYXkob2JqKQogIGtleSBmb3Iga2V5LCB2YWwgb2Ygb2JqCgoKIyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuCl8udmFsdWVzID0gKG9iaikgLT4KICBfLm1hcCBvYmosIF8uaWRlbnRpdHkKCgojIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgaW4gVW5kZXJzY29yZS4KXy5mdW5jdGlvbnMgPSAob2JqKSAtPgogIF8uZmlsdGVyKF8ua2V5cyhvYmopLCAoa2V5KSAtPiBfLmlzRnVuY3Rpb24ob2JqW2tleV0pKS5zb3J0KCkKCgojIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCBvZiB0aGUgcHJvcGVydGllcyBpbiBhIHNvdXJjZSBvYmplY3QuCl8uZXh0ZW5kID0gKG9iaikgLT4KICBmb3Igc291cmNlIGluIF8ucmVzdChhcmd1bWVudHMpCiAgICBvYmpba2V5XSA9IHZhbCBmb3Iga2V5LCB2YWwgb2Ygc291cmNlCiAgb2JqCgoKIyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuCl8uY2xvbmUgPSAob2JqKSAtPgogIHJldHVybiBvYmouc2xpY2UgMCBpZiBfLmlzQXJyYXkgb2JqCiAgXy5leHRlbmQge30sIG9iagoKCiMgSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLgojIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gInRhcCBpbnRvIiBhIG1ldGhvZCBjaGFpbiwKIyBpbiBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluCiB0aGUgY2hhaW4uCl8udGFwID0gKG9iaiwgaW50ZXJjZXB0b3IpIC0+CiAgaW50ZXJjZXB0b3Igb2JqCiAgb2JqCgoKIyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC4KXy5pc0VxdWFsID0gKGEsIGIpIC0+CiAgIyBDaGVjayBvYmplY3QgaWRlbnRpdHkuCiAgcmV0dXJuIHRydWUgaWYgYSBpcyBiCiAgIyBEaWZmZXJlbnQgdHlwZXM/CiAgYXR5cGUgPSB0eXBlb2YoYSk7IGJ0eXBlID0gdHlwZW9mKGIpCiAgcmV0dXJuIGZhbHNlIGlmIGF0eXBlIGlzbnQgYnR5cGUKICAjIEJhc2ljIGVxdWFsaXR5IHRlc3QgKHdhdGNoIG91dCBmb3IgY29lcmNpb25zKS4KICByZXR1cm4gdHJ1ZSBpZiBgYSA9PSBiYAogICMgT25lIGlzIGZhbHN5IGFuZCB0aGUgb3RoZXIgdHJ1dGh5LgogIHJldHVybiBmYWxzZSBpZiAoIWEgYW5kIGIpIG9yIChhIGFuZCAhYikKICAjIE9uZSBvZiB0aGVtIGltcGxlbWVudHMgYW4gYGlzRXF1YWwoKWA/CiAgcmV0dXJuIGEuaXNFcXVhbChiKSBpZiBhLmlzRXF1YWwKICAjIENoZWNrIGRhdGVzJyBpbnRlZ2VyIHZhbHVlcy4KICByZXR1cm4gYS5nZXRUaW1lKCkgaXMgYi5nZXRUaW1lKCkgaWYgXy5pc0RhdGUoYSkgYW5kIF8uaXNEYXRlKGIpCiAgIyBCb3RoIGFyZSBOYU4/CiAgcmV0dXJuIGZhbHNlIGlmIF8uaXNOYU4oYSkgYW5kIF8uaXNOYU4oYikKICAjIENvbXBhcmUgcmVndWxhciBleHByZXNzaW9ucy4KICBpZiBfLmlzUmVnRXhwKGEpIGFuZCBfLmlzUmVnRXhwKGIpCiAgICByZXR1cm4gYS5zb3VyY2UgaXMgYi5zb3VyY2UgYW5kCiAgICAgICAgICAgYS5nbG9iYWwgaXMgYi5nbG9iYWwgYW5kCiAgICAgICAgICAgYS5pZ25vcmVDYXNlIGlzIGIuaWdub3JlQ2FzZSBhbmQKICAgICAgICAgICBhLm11bHRpbGluZSBpcyBiLm11bHRpbGluZQogICMgSWYgYSBpcyBub3QgYW4gb2JqZWN0IGJ5IHRoaXMgcG9pbnQsIHdlIGNhbid0IGhhbmRsZSBpdC4KICByZXR1cm4gZmFsc2UgaWYgYXR5cGUgaXNudCAnb2JqZWN0JwogICMgQ2hlY2sgZm9yIGRpZmZlcmVudCBhcnJheSBsZW5ndGhzIGJlZm9yZSBjb21wYXJpbmcgY29udGVudHMuCiAgcmV0dXJuIGZhbHNlIGlmIGEubGVuZ3RoIGFuZCAoYS5sZW5ndGggaXNudCBiLmxlbmd0aCkKICAjIE5vdGhpbmcgZWxzZSB3b3JrZWQsIGRlZXAgY29tcGFyZSB0aGUgY29udGVudHMuCiAgYUtleXMgPSBfLmtleXMoYSk7IGJLZXlzID0gXy5rZXlzKGIpCiAgIyBEaWZmZXJlbnQgb2JqZWN0IHNpemVzPwogIHJldHVybiBmYWxzZSBpZiBhS2V5cy5sZW5ndGggaXNudCBiS2V5cy5sZW5ndGgKICAjIFJlY3Vyc2l2ZSBjb21wYXJpc29uIG9mIGNvbnRlbnRzLgogIHJldHVybiBmYWxzZSBmb3Iga2V5LCB2YWwgb2YgYSB3aGVuICEoa2V5IG9mIGIpIG9yICFfLmlzRXF1YWwodmFsLCBiW2tleV0pCiAgdHJ1ZQoKCiMgSXMgYSBnaXZlbiBhcnJheSBvciBvYmplY3QgZW1wdHk/Cl8uaXNFbXB0eSA9IChvYmopIC0+CiAgcmV0dXJuIG9iai5sZW5ndGggaXMgMCBpZiBfLmlzQXJyYXkob2JqKSBvciBfLmlzU3RyaW5nKG9iaikKICByZXR1cm4gZmFsc2UgZm9yIG93biBrZXkgb2Ygb2JqCiAgdHJ1ZQoKCiMgSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50PwpfLmlzRWxlbWVudCA9IChvYmopIC0+IG9iaiBhbmQgb2JqLm5vZGVUeXBlIGlzIDEKCgojIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/Cl8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgb3IgKG9iaikgLT4gISEob2JqIGFuZCBvYmouY29uY2F0IGFuZCBvYmoudW5zaGlmdCBhbmQgbm90IG9iai5jYWxsZWUpCgoKIyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIGFyZ3VtZW50cyBvYmplY3Q/Cl8uaXNBcmd1bWVudHMgPSAob2JqKSAtPiBvYmogYW5kIG9iai5jYWxsZWUKCgojIElzIHRoZSBnaXZlbiB2YWx1ZSBhIGZ1bmN0aW9uPwpfLmlzRnVuY3Rpb24gPSAob2JqKSAtPiAhIShvYmogYW5kIG9iai5jb25zdHJ1Y3RvciBhbmQgb2JqLmNhbGwgYW5kIG9iai5hcHBseSkKCgojIElzIHRoZSBnaXZlbiB2YWx1ZSBhIHN0cmluZz8KXy5pc1N0cmluZyA9IChvYmopIC0+ICEhKG9iaiBpcyAnJyBvciAob2JqIGFuZCBvYmouY2hhckNvZGVBdCBhbmQgb2JqLnN1YnN0cikpCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGEgbnVtYmVyPwpfLmlzTnVtYmVyID0gKG9iaikgLT4gKG9iaiBpcyArb2JqKSBvciB0b1N0cmluZy5jYWxsKG9iaikgaXMgJ1tvYmplY3QgTnVtYmVyXScKCgojIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuPwpfLmlzQm9vbGVhbiA9IChvYmopIC0+IG9iaiBpcyB0cnVlIG9yIG9iaiBpcyBmYWxzZQoKCiMgSXMgYSBnaXZlbiB2YWx1ZSBhIERhdGU/Cl8uaXNEYXRlID0gKG9iaikgLT4gISEob2JqIGFuZCBvYmouZ2V0VGltZXpvbmVPZmZzZXQgYW5kIG9iai5zZXRVVENGdWxsWWVhcikKCgojIElzIHRoZSBnaXZlbiB2YWx1ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbj8KXy5pc1JlZ0V4cCA9IChvYmopIC0+ICEhKG9iaiBhbmQgb2JqLmV4ZWMgYW5kIChvYmouaWdub3JlQ2FzZSBvciBvYmouaWdub3JlQ2FzZSBpcyBmYWxzZSkpCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgTmFOIC0tIHRoaXMgb25lIGlzIGludGVyZXN0aW5nLiBgTmFOICE9IE5hTmAsIGFuZAojIGBpc05hTih1bmRlZmluZWQpID09IHRydWVgLCBzbyB3ZSBtYWtlIHN1cmUgaXQncyBhIG51bWJlciBmaXJzdC4KXy5pc05hTiA9IChvYmopIC0+IF8uaXNOdW1iZXIob2JqKSBhbmQgd2luZG93LmlzTmFOKG9iaikKCgojIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD8KXy5pc051bGwgPSAob2JqKSAtPiBvYmogaXMgbnVsbAoKCiMgSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/Cl8uaXNVbmRlZmluZWQgPSAob2JqKSAtPiB0eXBlb2Ygb2JqIGlzICd1bmRlZmluZWQnCgoKIyBVdGlsaXR5IEZ1bmN0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tCgojIFJ1biBVbmRlcnNjb3JlLmpzIGluIG5vQ29uZmxpY3QgbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzCiMgcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LgpfLm5vQ29uZmxpY3QgPSAtPgogIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZQogIHRoaXMKCgojIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRvcnMuCl8uaWRlbnRpdHkgPSAodmFsdWUpIC0+IHZhbHVlCgoKIyBSdW4gYSBmdW5jdGlvbiBgbmAgdGltZXMuCl8udGltZXMgPSAobiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgaXRlcmF0b3IuY2FsbCBjb250ZXh0LCBpIGZvciBpIGluIFswLi4ubl0KCgojIEJyZWFrIG91dCBvZiB0aGUgbWlkZGxlIG9mIGFuIGl0ZXJhdGlvbi4KXy5icmVha0xvb3AgPSAtPiB0aHJvdyBicmVha2VyCgoKIyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QsIGVuc3VyaW5nIHRoYXQKIyB0aGV5J3JlIGNvcnJlY3RseSBhZGRlZCB0byB0aGUgT09QIHdyYXBwZXIgYXMgd2VsbC4KXy5taXhpbiA9IChvYmopIC0+CiAgZm9yIG5hbWUgaW4gXy5mdW5jdGlvbnMob2JqKQogICAgYWRkVG9XcmFwcGVyIG5hbWUsIF9bbmFtZV0gPSBvYmpbbmFtZV0KCgojIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuCiMgVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy4KaWRDb3VudGVyID0gMApfLnVuaXF1ZUlkID0gKHByZWZpeCkgLT4KICAocHJlZml4IG9yICcnKSArIGlkQ291bnRlcisrCgoKIyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgKipFUkIqKi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCiMgZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgpfLnRlbXBsYXRlU2V0dGluZ3MgPSB7CiAgc3RhcnQ6ICc8JScKICBlbmQ6ICclPicKICBpbnRlcnBvbGF0ZTogLzwlPSguKz8pJT4vZwp9CgoKIyBKYXZhU2NyaXB0IHRlbXBsYXRpbmcgYS1sYSAqKkVSQioqLCBwaWxmZXJlZCBmcm9tIEpvaG4gUmVzaWcncwojICpTZWNyZXRzIG9mIHRoZSBKYXZhU2NyaXB0IE5pbmphKiwgcGFnZSA4My4KIyBTaW5nbGUtcXVvdGUgZml4IGZyb20gUmljayBTdHJhaGwuCiMgV2l0aCBhbHRlcmF0aW9ucyBmb3IgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIGFuZCB0byBwcmVzZXJ2ZSB3aGl0ZXNwYWNlLgpfLnRlbXBsYXRlID0gKHN0ciwgZGF0YSkgLT4KICBjID0gXy50ZW1wbGF0ZVNldHRpbmdzCiAgZW5kTWF0Y2ggPSBuZXcgUmVnRXhwKCInKD89W14iK2MuZW5kLnN1YnN0cigwLCAxKSsiXSoiK2VzY2FwZVJlZ0V4cChjLmVuZCkrIikiLCJnIikKICBmbiA9IG5ldyBGdW5jdGlvbiAnb2JqJywKICAgICd2YXIgcD1bXSxwcmludD1mdW5jdGlvbigpe3AucHVzaC5hcHBseShwLGFyZ3VtZW50cyk7fTsnICsKICAgICd3aXRoKG9ianx8e30pe3AucHVzaChcJycgKwogICAgc3RyLnJlcGxhY2UoL1xyL2csICdcXHInKQogICAgICAgLnJlcGxhY2UoL1xuL2csICdcXG4nKQogICAgICAgLnJlcGxhY2UoL1x0L2csICdcXHQnKQogICAgICAgLnJlcGxhY2UoZW5kTWF0Y2gsIu+/ve+/ve+/vSIpCiAgICAgICAuc3BsaXQoIiciKS5qb2luKCJcXCciKQogICAgICAgLnNwbGl0KCLvv73vv73vv70iKS5qb2luKCInIikKICAgICAgIC5yZXBsYWNlKGMuaW50ZXJwb2xhdGUsICInLCQxLCciKQogICAgICAgLnNwbGl0KGMuc3RhcnQpLmpvaW4oIicpOyIpCiAgICAgICAuc3BsaXQoYy5lbmQpLmpvaW4oInAucHVzaCgnIikgKwogICAgICAgIicpO31yZXR1cm4gcC5qb2luKCcnKTsiCiAgaWYgZGF0YSB0aGVuIGZuKGRhdGEpIGVsc2UgZm4KCgojIEFsaWFzZXMKIyAtLS0tLS0tCgpfLmZvckVhY2ggPSBfLmVhY2gKXy5mb2xkbCA9IF8uaW5qZWN0ID0gXy5yZWR1Y2UKXy5mb2xkciA9IF8ucmVkdWNlUmlnaHQKXy5zZWxlY3QgPSBfLmZpbHRlcgpfLmFsbCA9IF8uZXZlcnkKXy5hbnkgPSBfLnNvbWUKXy5jb250YWlucyA9IF8uaW5jbHVkZQpfLmhlYWQgPSBfLmZpcnN0Cl8udGFpbCA9IF8ucmVzdApfLm1ldGhvZHMgPSBfLmZ1bmN0aW9ucwoKCiMgU2V0dXAgdGhlIE9PUCBXcmFwcGVyCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0CiMgY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGUKIyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLgp3cmFwcGVyID0gKG9iaikgLT4KICB0aGlzLl93cmFwcGVkID0gb2JqCiAgdGhpcwoKCiMgSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLgpyZXN1bHQgPSAob2JqLCBjaGFpbikgLT4KICBpZiBjaGFpbiB0aGVuIF8ob2JqKS5jaGFpbigpIGVsc2Ugb2JqCgoKIyBBIG1ldGhvZCB0byBlYXNpbHkgYWRkIGZ1bmN0aW9ucyB0byB0aGUgT09QIHdyYXBwZXIuCmFkZFRvV3JhcHBlciA9IChuYW1lLCBmdW5jKSAtPgogIHdyYXBwZXIucHJvdG90eXBlW25hbWVdID0gLT4KICAgIGFyZ3MgPSBfLnRvQXJyYXkgYXJndW1lbnRzCiAgICB1bnNoaWZ0LmNhbGwgYXJncywgdGhpcy5fd3JhcHBlZAogICAgcmVzdWx0IGZ1bmMuYXBwbHkoXywgYXJncyksIHRoaXMuX2NoYWluCgoKIyBBZGQgYWxsIG9mdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC4KXy5taXhpbiBfCgoKIyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLgpfLmVhY2ggWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgKG5hbWUpIC0+CiAgbWV0aG9kID0gQXJyYXkucHJvdG90eXBlW25hbWVdCiAgd3JhcHBlci5wcm90b3R5cGVbbmFtZV0gPSAtPgogICAgbWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykKICAgIHJlc3VsdCh0aGlzLl93cmFwcGVkLCB0aGlzLl9jaGFpbikKCgojIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLgpfLmVhY2ggWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCAobmFtZSkgLT4KICBtZXRob2QgPSBBcnJheS5wcm90b3R5cGVbbmFtZV0KICB3cmFwcGVyLnByb3RvdHlwZVtuYW1lXSA9IC0+CiAgICByZXN1bHQobWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cyksIHRoaXMuX2NoYWluKQoKCiMgU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0Lgp3cmFwcGVyOjpjaGFpbiA9IC0+CiAgdGhpcy5fY2hhaW4gPSB0cnVlCiAgdGhpcwoKCiMgRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuCndyYXBwZXI6OnZhbHVlID0gLT4gdGhpcy5fd3JhcHBlZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LWNvZmZlZXNjcmlwdDwvY29kZT4uPC9wPgoKICAgIDxwPlRoZSBDb2ZmZWVTY3JpcHQgbW9kZSB3YXMgd3JpdHRlbiBieSBKZWZmIFBpY2toYXJkdCAoPGEgaHJlZj0iTElDRU5TRSI+bGljZW5zZTwvYT4pLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTEgSmVmZiBQaWNraGFyZHQKTW9kaWZpZWQgZnJvbSB0aGUgUHl0aG9uIENvZGVNaXJyb3IgbW9kZSwgQ29weXJpZ2h0IChjKSAyMDEwIFRpbW90aHkgRmFycmVsbAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LCB0eXBlOwogIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHt0eXBlID0gdHA7IHJldHVybiBzdHlsZTt9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsgcmV0dXJuIHJldCgibWV0YSIsIHN0cmVhbS5jdXJyZW50KCkpO30KICAgIGVsc2UgaWYgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCIhIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI9IikgcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmICgoY2ggPT0gIn4iIHx8IGNoID09ICJ8IikgJiYgc3RyZWFtLmVhdCgiPSIpKSByZXR1cm4gcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKICAgICAgcmV0dXJuIHJldCgiYXRvbSIsICJoYXNoIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiISIpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7CiAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvWywuKz4qXC9dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKICAgIH0KICAgIGVsc2UgaWYgKC9bO3t9OlxbXF1dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsIGNoKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7CiAgICAgIHJldHVybiByZXQoInZhcmlhYmxlIiwgInZhcmlhYmxlIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSAiLyIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChkYXNoZXMgPj0gMiAmJiBjaCA9PSAiPiIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkYXNoZXMgPSAoY2ggPT0gIi0iKSA/IGRhc2hlcyArIDEgOiAwOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCiAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgogICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsKICAgICAgaWYgKHR5cGUgPT0gImhhc2giICYmIGNvbnRleHQgIT0gInJ1bGUiKSBzdHlsZSA9ICJzdHJpbmctMiI7CiAgICAgIGVsc2UgaWYgKHN0eWxlID09ICJ2YXJpYWJsZSIpIHsKICAgICAgICBpZiAoY29udGV4dCA9PSAicnVsZSIpIHN0eWxlID0gIm51bWJlciI7CiAgICAgICAgZWxzZSBpZiAoIWNvbnRleHQgfHwgY29udGV4dCA9PSAiQG1lZGlheyIpIHN0eWxlID0gInRhZyI7CiAgICAgIH0KCiAgICAgIGlmIChjb250ZXh0ID09ICJydWxlIiAmJiAvXltce1x9O10kLy50ZXN0KHR5cGUpKQogICAgICAgIHN0YXRlLnN0YWNrLnBvcCgpOwogICAgICBpZiAodHlwZSA9PSAieyIpIHsKICAgICAgICBpZiAoY29udGV4dCA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYXsiOwogICAgICAgIGVsc2Ugc3RhdGUuc3RhY2sucHVzaCgieyIpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIn0iKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAgICAgZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2sucHVzaCgiQG1lZGlhIik7CiAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gInsiICYmIHR5cGUgIT0gImNvbW1lbnQiKSBzdGF0ZS5zdGFjay5wdXNoKCJydWxlIik7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBuID0gc3RhdGUuc3RhY2subGVuZ3RoOwogICAgICBpZiAoL15cfS8udGVzdCh0ZXh0QWZ0ZXIpKQogICAgICAgIG4gLT0gc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID09ICJydWxlIiA/IDIgOiAxOwogICAgICByZXR1cm4gc3RhdGUuYmFzZUluZGVudCArIG4gKiBpbmRlbnRVbml0OwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAifSIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9jc3MiLCAiY3NzIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENTUyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQ1NTIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogU29tZSBleGFtcGxlIENTUyAqLwoKQGltcG9ydCB1cmwoInNvbWV0aGluZy5jc3MiKTsKCmJvZHkgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAzZW0gNmVtOwogIGZvbnQtZmFtaWx5OiB0YWhvbWEsIGFyaWFsLCBzYW5zLXNlcmlmOwogIGNvbG9yOiAjMDAwOwp9CgojbmF2aWdhdGlvbiBhIHsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKfQoKaDEgewogIGZvbnQtc2l6ZTogMi41ZW07Cn0KCmgyIHsKICBmb250LXNpemU6IDEuN2VtOwp9CgpoMTpiZWZvcmUsIGgyOmJlZm9yZSB7CiAgY29udGVudDogIjo6IjsKfQoKY29kZSB7CiAgZm9udC1mYW1pbHk6IGNvdXJpZXIsIG1vbm9zcGFjZTsKICBmb250LXNpemU6IDgwJTsKICBjb2xvcjogIzQxOEE4QTsKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC9jc3M8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/diff.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJkaWZmIiwgZnVuY3Rpb24oKSB7CgogIHZhciBUT0tFTl9OQU1FUyA9IHsKICAgICcrJzogJ3RhZycsCiAgICAnLSc6ICdzdHJpbmcnLAogICAgJ0AnOiAnbWV0YScKICB9OwoKICByZXR1cm4gewogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSkgewogICAgICB2YXIgdHdfcG9zID0gc3RyZWFtLnN0cmluZy5zZWFyY2goL1tcdCBdKz8kLyk7CgogICAgICBpZiAoIXN0cmVhbS5zb2woKSB8fCB0d19wb3MgPT09IDApIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICgiZXJyb3IgIiArICgKICAgICAgICAgIFRPS0VOX05BTUVTW3N0cmVhbS5zdHJpbmcuY2hhckF0KDApXSB8fCAnJykpLnJlcGxhY2UoLyAkLywgJycpOwogICAgICB9CgogICAgICB2YXIgdG9rZW5fbmFtZSA9IFRPS0VOX05BTUVTW3N0cmVhbS5wZWVrKCldIHx8IHN0cmVhbS5za2lwVG9FbmQoKTsKCiAgICAgIGlmICh0d19wb3MgPT09IC0xKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHN0cmVhbS5wb3MgPSB0d19wb3M7CiAgICAgIH0KCiAgICAgIHJldHVybiB0b2tlbl9uYW1lOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZGlmZiIsICJkaWZmIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IERpZmYgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImRpZmYuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO30KICAgICAgc3Bhbi5jbS1tZXRhIHtjb2xvcjogI2EwYiAhaW1wb3J0YW50O30KICAgICAgc3Bhbi5jbS1lcnJvciB7IGJhY2tncm91bmQtY29sb3I6IGJsYWNrOyBvcGFjaXR5OiAwLjQ7fQogICAgICBzcGFuLmNtLWVycm9yLmNtLXN0cmluZyB7IGJhY2tncm91bmQtY29sb3I6IHJlZDsgfQogICAgICBzcGFuLmNtLWVycm9yLmNtLXRhZyB7IGJhY2tncm91bmQtY29sb3I6ICMyYjI7IH0KICAgIDwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IERpZmYgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgpkaWZmIC0tZ2l0IGEvaW5kZXguaHRtbCBiL2luZGV4Lmh0bWwKaW5kZXggYzFkOTE1Ni4uNzc2NDc0NCAxMDA2NDQKLS0tIGEvaW5kZXguaHRtbAorKysgYi9pbmRleC5odG1sCkBAIC05NSw3ICs5NSw4IEBAIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUgPSB7CiAgICAgPHNjcmlwdD4KICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAotICAgICAgICBhdXRvTWF0Y2hCcmFja2V0czogdHJ1ZQorICAgICAgICBhdXRvTWF0Y2hCcmFja2V0czogdHJ1ZSwKKyAgICAgIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKHgpe2NvbnNvbGUubG9nKHgpO30KICAgICAgIH0pOwogICAgIDwvc2NyaXB0PgogICA8L2JvZHk+CmRpZmYgLS1naXQgYS9saWIvY29kZW1pcnJvci5qcyBiL2xpYi9jb2RlbWlycm9yLmpzCmluZGV4IDA0NjQ2YTkuLjlhMzljYzcgMTAwNjQ0Ci0tLSBhL2xpYi9jb2RlbWlycm9yLmpzCisrKyBiL2xpYi9jb2RlbWlycm9yLmpzCkBAIC0zOTksMTAgKzM5OSwxNiBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAKICAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7Ci0gICAgICB2YXIgc3RhcnQgPSBwb3NGcm9tTW91c2UoZSksIGxhc3QgPSBzdGFydDsgICAgCisgICAgICB2YXIgc3RhcnQgPSBwb3NGcm9tTW91c2UoZSksIGxhc3QgPSBzdGFydCwgdGFyZ2V0ID0gZS50YXJnZXQoKTsKICAgICAgIGlmICghc3RhcnQpIHJldHVybjsKICAgICAgIHNldEN1cnNvcihzdGFydC5saW5lLCBzdGFydC5jaCwgZmFsc2UpOwogICAgICAgaWYgKGUuYnV0dG9uKCkgIT0gMSkgcmV0dXJuOworICAgICAgaWYgKHRhcmdldC5wYXJlbnROb2RlID09IGd1dHRlcikgeyAgICAKKyAgICAgICAgaWYgKG9wdGlvbnMub25HdXR0ZXJDbGljaykKKyAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5kZXhPZihndXR0ZXIuY2hpbGROb2RlcywgdGFyZ2V0KSArIHNob3dpbmdGcm9tKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCiAgICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKIAogICAgICAgZS5zdG9wKCk7CkBAIC04MDgsNyArODE0LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBmb3IgKHZhciBpID0gc2hvd2luZ0Zyb207IGkgPCBzaG93aW5nVG87ICsraSkgewogICAgICAgICB2YXIgbWFya2VyID0gbGluZXNbaV0uZ3V0dGVyTWFya2VyOwogICAgICAgICBpZiAobWFya2VyKSBodG1sLnB1c2goJzxkaXYgY2xhc3M9IicgKyBtYXJrZXIuc3R5bGUgKyAnIj4nICsgaHRtbEVzY2FwZShtYXJrZXIudGV4dCkgKyAnPC9kaXY+Jyk7Ci0gICAgICAgIGVsc2UgaHRtbC5wdXNoKCI8ZGl2PiIgKyAob3B0aW9ucy5saW5lTnVtYmVycyA/IGkgKyAxIDogIlx1MDBhMCIpICsgIjwvZGl2PiIpOworICAgICAgICBlbHNlIGh0bWwucHVzaCgiPGRpdj4iICsgKG9wdGlvbnMubGluZU51bWJlcnMgPyBpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIgOiAiXHUwMGEwIikgKyAiPC9kaXY+Iik7CiAgICAgICB9CiAgICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgLy8gVE9ETyB0ZXN0IHdoZXRoZXIgdGhpcyBhY3R1YWxseSBoZWxwcwogICAgICAgZ3V0dGVyLmlubmVySFRNTCA9IGh0bWwuam9pbigiIik7CkBAIC0xMzcxLDEwICsxMzc3LDggQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChvcHRpb24gPT0gInBhcnNlciIpIHNldFBhcnNlcih2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PT0gImxpbmVOdW1iZXJzIikgc2V0TGluZU51bWJlcnModmFsdWUpOwogICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJndXR0ZXIiKSBzZXRHdXR0ZXIodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJyZWFkT25seSIpIG9wdGlvbnMucmVhZE9ubHkgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiaW5kZW50VW5pdCIpIHtvcHRpb25zLmluZGVudFVuaXQgPSBpbmRlbnRVbml0ID0gdmFsdWU7IHNldFBhcnNlcihvcHRpb25zLnBhcnNlcik7fQotICAgICAgICBlbHNlIGlmICgvXig/OmVudGVyTW9kZXx0YWJNb2RlfGluZGVudFdpdGhUYWJzfHJlYWRPbmx5fGF1dG9NYXRjaEJyYWNrZXRzfHVuZG9EZXB0aCkkLy50ZXN0KG9wdGlvbikpIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwotICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigiQ2FuJ3Qgc2V0IG9wdGlvbiAiICsgb3B0aW9uKTsKKyAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiaW5kZW50VW5pdCIpIHtvcHRpb25zLmluZGVudFVuaXQgPSB2YWx1ZTsgc2V0UGFyc2VyKG9wdGlvbnMucGFyc2VyKTt9CisgICAgICAgIGVsc2Ugb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7CiAgICAgICB9LAogICAgICAgY3Vyc29yQ29vcmRzOiBjdXJzb3JDb29yZHMsCiAgICAgICB1bmRvOiBvcGVyYXRpb24odW5kbyksCkBAIC0xNDAyLDcgKzE0MDYsOCBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJlcGxhY2VSYW5nZTogb3BlcmF0aW9uKHJlcGxhY2VSYW5nZSksCiAKICAgICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIG9wZXJhdGlvbihmKSgpO30sCi0gICAgICByZWZyZXNoOiBmdW5jdGlvbigpe3VwZGF0ZURpc3BsYXkoW3tmcm9tOiAwLCB0bzogbGluZXMubGVuZ3RofV0pO30KKyAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCl7dXBkYXRlRGlzcGxheShbe2Zyb206IDAsIHRvOiBsaW5lcy5sZW5ndGh9XSk7fSwKKyAgICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGlucHV0O30KICAgICB9OwogICAgIHJldHVybiBpbnN0YW5jZTsKICAgfQpAQCAtMTQyMCw2ICsxNDI1LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmVhZE9ubHk6IGZhbHNlLAogICAgIG9uQ2hhbmdlOiBudWxsLAogICAgIG9uQ3Vyc29yQWN0aXZpdHk6IG51bGwsCisgICAgb25HdXR0ZXJDbGljazogbnVsbCwKICAgICBhdXRvTWF0Y2hCcmFja2V0czogZmFsc2UsCiAgICAgd29ya1RpbWU6IDIwMCwKICAgICB3b3JrRGVsYXk6IDMwMCwKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1kaWZmPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ecl/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ecl/ecl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJlY2wiLCBmdW5jdGlvbihjb25maWcpIHsNCg0KICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsNCiAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7DQogICAgcmV0dXJuIG9iajsNCiAgfQ0KDQogIGZ1bmN0aW9uIG1ldGFIb29rKHN0cmVhbSwgc3RhdGUpIHsNCiAgICBpZiAoIXN0YXRlLnN0YXJ0T2ZMaW5lKSByZXR1cm4gZmFsc2U7DQogICAgc3RyZWFtLnNraXBUb0VuZCgpOw0KICAgIHJldHVybiAibWV0YSI7DQogIH0NCg0KICBmdW5jdGlvbiB0b2tlbkF0U3RyaW5nKHN0cmVhbSwgc3RhdGUpIHsNCiAgICB2YXIgbmV4dDsNCiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7DQogICAgICBpZiAobmV4dCA9PSAnIicgJiYgIXN0cmVhbS5lYXQoJyInKSkgew0KICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7DQogICAgICAgIGJyZWFrOw0KICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gInN0cmluZyI7DQogIH0NCg0KICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0Ow0KICB2YXIga2V5d29yZCA9IHdvcmRzKCJhYnMgYWNvcyBhbGxub2RlcyBhc2NpaSBhc2luIGFzc3RyaW5nIGF0YW4gYXRhbjIgYXZlIGNhc2UgY2hvb3NlIGNob29zZW4gY2hvb3Nlc2V0cyBjbHVzdGVyc2l6ZSBjb21iaW5lIGNvcnJlbGF0aW9uIGNvcyBjb3NoIGNvdW50IGNvdmFyaWFuY2UgY3JvbiBkYXRhc2V0IGRlZHVwIGRlZmluZSBkZW5vcm1hbGl6ZSBkaXN0cmlidXRlIGRpc3RyaWJ1dGVkIGRpc3RyaWJ1dGlvbiBlYmNkaWMgZW50aCBlcnJvciBldmFsdWF0ZSBldmVudCBldmVudGV4dHJhIGV2ZW50bmFtZSBleGlzdHMgZXhwIGZhaWxjb2RlIGZhaWxtZXNzYWdlIGZldGNoIGZyb211bmljb2RlIGdldGlzdmFsaWQgZ2xvYmFsIGdyYXBoIGdyb3VwIGhhc2ggaGFzaDMyIGhhc2g2NCBoYXNoY3JjIGhhc2htZDUgaGF2aW5nIGlmIGluZGV4IGludGZvcm1hdCBpc3ZhbGlkIGl0ZXJhdGUgam9pbiBrZXl1bmljb2RlIGxlbmd0aCBsaWJyYXJ5IGxpbWl0IGxuIGxvY2FsIGxvZyBsb29wIG1hcCBtYXRjaGVkIG1hdGNobGVuZ3RoIG1hdGNocG9zaXRpb24gbWF0Y2h0ZXh0IG1hdGNodW5pY29kZSBtYXggbWVyZ2UgbWVyZ2Vqb2luIG1pbiBub2xvY2FsIG5vbmVtcHR5IG5vcm1hbGl6ZSBwYXJzZSBwaXBlIHBvd2VyIHByZWxvYWQgcHJvY2VzcyBwcm9qZWN0IHB1bGwgcmFuZG9tIHJhbmdlIHJhbmsgcmFua2VkIHJlYWxmb3JtYXQgcmVjb3Jkb2YgcmVnZXhmaW5kIHJlZ2V4cmVwbGFjZSByZWdyb3VwIHJlamVjdGVkIHJvbGx1cCByb3VuZCByb3VuZHVwIHJvdyByb3dkaWZmIHNhbXBsZSBzZXQgc2luIHNpbmggc2l6ZW9mIHNvYXBjYWxsIHNvcnQgc29ydGVkIHNxcnQgc3RlcHBlZCBzdG9yZWQgc3VtIHRhYmxlIHRhbiB0YW5oIHRoaXNub2RlIHRvcG4gdG91bmljb2RlIHRyYW5zZmVyIHRyaW0gdHJ1bmNhdGUgdHlwZW9mIHVuZ3JvdXAgdW5pY29kZW9yZGVyIHZhcmlhbmNlIHdoaWNoIHdvcmt1bml0IHhtbGRlY29kZSB4bWxlbmNvZGUgeG1sdGV4dCB4bWx1bmljb2RlIik7DQogIHZhciB2YXJpYWJsZSA9IHdvcmRzKCJhcHBseSBhc3NlcnQgYnVpbGQgYnVpbGRpbmRleCBldmFsdWF0ZSBmYWlsIGtleWRpZmYga2V5cGF0Y2ggbG9hZHhtbCBub3Rob3Igbm90aWZ5IG91dHB1dCBwYXJhbGxlbCBzZXF1ZW50aWFsIHNvYXBjYWxsIHdhaXQiKTsNCiAgdmFyIHZhcmlhYmxlXzIgPSB3b3JkcygiX19jb21wcmVzc2VkX18gYWxsIGFuZCBhbnkgYXMgYXRtb3N0IGJlZm9yZSBiZWdpbmMrKyBiZXN0IGJldHdlZW4gY2FzZSBjb25zdCBjb3VudGVyIGNzdiBkZXNjZW5kIGVuY3J5cHQgZW5kIGVuZGMrKyBlbmRtYWNybyBleGNlcHQgZXhjbHVzaXZlIGV4cGlyZSBleHBvcnQgZXh0ZW5kIGZhbHNlIGZldyBmaXJzdCBmbGF0IGZyb20gZnVsbCBmdW5jdGlvbiBncm91cCBoZWFkZXIgaGVhZGluZyBob2xlIGlmYmxvY2sgaW1wb3J0IGluIGludGVyZmFjZSBqb2luZWQga2VlcCBrZXllZCBsYXN0IGxlZnQgbGltaXQgbG9hZCBsb2NhbCBsb2NhbGUgbG9va3VwIG1hY3JvIG1hbnkgbWF4Y291bnQgbWF4bGVuZ3RoIG1pbiBza2V3IG1vZHVsZSBuYW1lZCBub2Nhc2Ugbm9yb290IG5vc2NhbiBub3NvcnQgbm90IG9mIG9ubHkgb3B0IG9yIG91dGVyIG92ZXJ3cml0ZSBwYWNrZWQgcGFydGl0aW9uIHBlbmFsdHkgcGh5c2ljYWxsZW5ndGggcGlwZSBxdW90ZSByZWNvcmQgcmVsYXRpb25zaGlwIHJlcGVhdCByZXR1cm4gcmlnaHQgc2NhbiBzZWxmIHNlcGFyYXRvciBzZXJ2aWNlIHNoYXJlZCBza2V3IHNraXAgc3FsIHN0b3JlIHRlcm1pbmF0b3IgdGhvciB0aHJlc2hvbGQgdG9rZW4gdHJhbnNmb3JtIHRyaW0gdHJ1ZSB0eXBlIHVuaWNvZGVvcmRlciB1bnNvcnRlZCB2YWxpZGF0ZSB2aXJ0dWFsIHdob2xlIHdpbGQgd2l0aGluIHhtbCB4cGF0aCIpOw0KICB2YXIgdmFyaWFibGVfMyA9IHdvcmRzKCJhc2NpaSBiaWdfZW5kaWFuIGJvb2xlYW4gZGF0YSBkZWNpbWFsIGViY2RpYyBpbnRlZ2VyIHBhdHRlcm4gcXN0cmluZyByZWFsIHJlY29yZCBydWxlIHNldCBvZiBzdHJpbmcgdG9rZW4gdWRlY2ltYWwgdW5pY29kZSB1bnNpZ25lZCB2YXJzdHJpbmcgdmFydW5pY29kZSIpOw0KICB2YXIgYnVpbHRpbiA9IHdvcmRzKCJjaGVja3BvaW50IGRlcHJlY2F0ZWQgZmFpbGNvZGUgZmFpbG1lc3NhZ2UgZmFpbHVyZSBnbG9iYWwgaW5kZXBlbmRlbnQgb253YXJuaW5nIHBlcnNpc3QgcHJpb3JpdHkgcmVjb3Zlcnkgc3RvcmVkIHN1Y2Nlc3Mgd2FpdCB3aGVuIik7DQogIHZhciBibG9ja0tleXdvcmRzID0gd29yZHMoImNhdGNoIGNsYXNzIGRvIGVsc2UgZmluYWxseSBmb3IgaWYgc3dpdGNoIHRyeSB3aGlsZSIpOw0KICB2YXIgYXRvbXMgPSB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIik7DQogIHZhciBob29rcyA9IHsiIyI6IG1ldGFIb29rfTsNCiAgdmFyIG11bHRpTGluZVN0cmluZ3M7DQogIHZhciBpc09wZXJhdG9yQ2hhciA9IC9bK1wtKiYlPTw+IT98XC9dLzsNCg0KICB2YXIgY3VyUHVuYzsNCg0KICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgew0KICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7DQogICAgaWYgKGhvb2tzW2NoXSkgew0KICAgICAgdmFyIHJlc3VsdCA9IGhvb2tzW2NoXShzdHJlYW0sIHN0YXRlKTsNCiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0Ow0KICAgIH0NCiAgICBpZiAoY2ggPT0gJyInIHx8IGNoID09ICInIikgew0KICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7DQogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7DQogICAgfQ0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgew0KICAgICAgY3VyUHVuYyA9IGNoOw0KICAgICAgcmV0dXJuIG51bGwNCiAgICB9DQogICAgaWYgKC9cZC8udGVzdChjaCkpIHsNCiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLyk7DQogICAgICByZXR1cm4gIm51bWJlciI7DQogICAgfQ0KICAgIGlmIChjaCA9PSAiLyIpIHsNCiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7DQogICAgICAgIHJldHVybiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7DQogICAgICB9DQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7DQogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsNCiAgICAgICAgcmV0dXJuICJjb21tZW50IjsNCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7DQogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOw0KICAgICAgcmV0dXJuICJvcGVyYXRvciI7DQogICAgfQ0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOw0KICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7DQogICAgaWYgKGtleXdvcmQucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgew0KICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9ICJuZXdzdGF0ZW1lbnQiOw0KICAgICAgcmV0dXJuICJrZXl3b3JkIjsNCiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsNCiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsNCiAgICAgIHJldHVybiAidmFyaWFibGUiOw0KICAgIH0gZWxzZSBpZiAodmFyaWFibGVfMi5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7DQogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7DQogICAgICByZXR1cm4gInZhcmlhYmxlLTIiOw0KICAgIH0gZWxzZSBpZiAodmFyaWFibGVfMy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7DQogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7DQogICAgICByZXR1cm4gInZhcmlhYmxlLTMiOw0KICAgIH0gZWxzZSBpZiAoYnVpbHRpbi5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7DQogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7DQogICAgICByZXR1cm4gImJ1aWx0aW4iOw0KICAgIH0gZWxzZSB7IC8vRGF0YSB0eXBlcyBhcmUgb2YgZnJvbSBLRVlXT1JEIyMgDQoJCXZhciBpID0gY3VyLmxlbmd0aCAtIDE7DQoJCXdoaWxlKGkgPj0gMCAmJiAoIWlzTmFOKGN1cltpXSkgfHwgY3VyW2ldID09ICdfJykpDQoJCQktLWk7DQoJCQ0KCQlpZiAoaSA+IDApIHsNCgkJCXZhciBjdXIyID0gY3VyLnN1YnN0cigwLCBpICsgMSk7DQoJICAgIAlpZiAodmFyaWFibGVfMy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIyKSkgew0KCSAgICAgIAkJaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyMikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsNCgkgICAgICAJCXJldHVybiAidmFyaWFibGUtMyI7DQoJICAgICAgCX0NCgkgICAgfQ0KICAgIH0NCiAgICBpZiAoYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuICJhdG9tIjsNCiAgICByZXR1cm4gIndvcmQiOw0KICB9DQoNCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsNCiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgew0KICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7DQogICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7DQogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQ0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOw0KICAgICAgfQ0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpDQogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOw0KICAgICAgcmV0dXJuICJzdHJpbmciOw0KICAgIH07DQogIH0NCg0KICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgew0KICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsNCiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7DQogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7DQogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOw0KICAgICAgICBicmVhazsNCiAgICAgIH0NCiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7DQogICAgfQ0KICAgIHJldHVybiAiY29tbWVudCI7DQogIH0NCg0KICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7DQogICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkOw0KICAgIHRoaXMuY29sdW1uID0gY29sdW1uOw0KICAgIHRoaXMudHlwZSA9IHR5cGU7DQogICAgdGhpcy5hbGlnbiA9IGFsaWduOw0KICAgIHRoaXMucHJldiA9IHByZXY7DQogIH0NCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIGNvbCwgdHlwZSkgew0KICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7DQogIH0NCiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkgew0KICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlOw0KICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiB8fCB0ID09ICJ9IikNCiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDsNCiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsNCiAgfQ0KDQogIC8vIEludGVyZmFjZQ0KDQogIHJldHVybiB7DQogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgew0KICAgICAgcmV0dXJuIHsNCiAgICAgICAgdG9rZW5pemU6IG51bGwsDQogICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgInRvcCIsIGZhbHNlKSwNCiAgICAgICAgaW5kZW50ZWQ6IDAsDQogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlDQogICAgICB9Ow0KICAgIH0sDQoNCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgew0KICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7DQogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7DQogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7DQogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7DQogICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7DQogICAgICBjdXJQdW5jID0gbnVsbDsNCiAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpOw0KICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IiB8fCBzdHlsZSA9PSAibWV0YSIpIHJldHVybiBzdHlsZTsNCiAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gdHJ1ZTsNCg0KICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOw0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAieyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJ9Iik7DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJbIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIl0iKTsNCiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOw0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAifSIpIHsNCiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7DQogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7DQogICAgICB9DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgIGVsc2UgaWYgKGN0eC50eXBlID09ICJ9IiB8fCBjdHgudHlwZSA9PSAidG9wIiB8fCAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgY3VyUHVuYyA9PSAibmV3c3RhdGVtZW50IikpDQogICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJzdGF0ZW1lbnQiKTsNCiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7DQogICAgICByZXR1cm4gc3R5bGU7DQogICAgfSwNCg0KICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgew0KICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSAmJiBzdGF0ZS50b2tlbml6ZSAhPSBudWxsKSByZXR1cm4gMDsNCiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsNCiAgICAgIGlmIChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBmaXJzdENoYXIgPT0gIn0iKSBjdHggPSBjdHgucHJldjsNCiAgICAgIHZhciBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlOw0KICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7DQogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7DQogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsNCiAgICB9LA0KDQogICAgZWxlY3RyaWNDaGFyczogInt9Ig0KICB9Ow0KfSk7DQoNCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWVjbCIsICJlY2wiKTsNCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ecl/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCiAgPGhlYWQ+DQogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEVDTCBtb2RlPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+DQogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iZWNsLmpzIj48L3NjcmlwdD4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+DQogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4NCiAgPC9oZWFkPg0KICA8Ym9keT4NCiAgICA8aDE+Q29kZU1pcnJvcjogRUNMIG1vZGU8L2gxPg0KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+DQovKg0Kc2FtcGxlIHVzZWxlc3MgY29kZSB0byBkZW1vbnN0cmF0ZSBlY2wgc3ludGF4IGhpZ2hsaWdodGluZw0KdGhpcyBpcyBhIG11bHRpbGluZSBjb21tZW50IQ0KKi8NCg0KLy8gIHRoaXMgaXMgYSBzaW5nbGVsaW5lIGNvbW1lbnQhDQoNCmltcG9ydCB1dDsNCnIgOj0gDQogIHJlY29yZA0KICAgc3RyaW5nMjIgczEgOj0gJzEyMyc7DQogICBpbnRlZ2VyNCBpMSA6PSAxMjM7DQogIGVuZDsNCiNvcHRpb24oJ3RtcCcsIHRydWUpOw0KZCA6PSBkYXRhc2V0KCd0bXA6OnFiJywgciwgdGhvcik7DQpvdXRwdXQoZCk7DQo8L3RleHRhcmVhPjwvZm9ybT4NCiAgICA8c2NyaXB0Pg0KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsNCiAgICAgICAgdGFiTW9kZTogImluZGVudCIsDQogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsDQogICAgICB9KTsNCiAgICA8L3NjcmlwdD4NCg0KICAgIDxwPkJhc2VkIG9uIENvZGVNaXJyb3IncyBjbGlrZSBtb2RlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDxhIGhyZWY9Imh0dHA6Ly9ocGNjc3lzdGVtcy5jb20iPkhQQ0MgU3lzdGVtczwvYT4gd2ViIHNpdGUuPC9wPg0KICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtZWNsPC9jb2RlPi48L3A+DQoNCiAgPC9ib2R5Pg0KPC9odG1sPg0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/erlang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/erlang/erlang.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gZXJsYW5nICAgIC0+IENvZGVNaXJyb3IgdGFnCi8vCi8vIGF0b20gICAgICAtPiBhdG9tCi8vIGF0dHJpYnV0ZSAtPiBhdHRyaWJ1dGUKLy8gYnVpbHRpbiAgIC0+IGJ1aWx0aW4KLy8gY29tbWVudCAgIC0+IGNvbW1lbnQKLy8gZXJyb3IgICAgIC0+IGVycm9yCi8vIGZ1biAgICAgICAtPiBtZXRhCi8vIGZ1bmN0aW9uICAtPiB0YWcKLy8gZ3VhcmQgICAgIC0+IHByb3BlcnR5Ci8vIGtleXdvcmQgICAtPiBrZXl3b3JkCi8vIG1hY3JvICAgICAtPiB2YXJpYWJsZS0yCi8vIG51bWJlciAgICAtPiBudW1iZXIKLy8gb3BlcmF0b3IgIC0+IG9wZXJhdG9yCi8vIHJlY29yZCAgICAtPiBicmFja2V0Ci8vIHN0cmluZyAgICAtPiBzdHJpbmcKLy8gdHlwZSAgICAgIC0+IGRlZgovLyB2YXJpYWJsZSAgLT4gdmFyaWFibGUKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWVybGFuZyIsICJlcmxhbmciKTsKCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgiZXJsYW5nIiwgZnVuY3Rpb24oY21DZmcsIG1vZGVDZmcpIHsKCiAgdmFyIHR5cGVXb3JkcyA9IFsKICAgICItdHlwZSIsICItc3BlYyIsICItZXhwb3J0X3R5cGUiLCAiLW9wYXF1ZSJdOwoKICB2YXIga2V5d29yZFdvcmRzID0gWwogICAgImFmdGVyIiwiYmVnaW4iLCJjYXRjaCIsImNhc2UiLCJjb25kIiwiZW5kIiwiZnVuIiwiaWYiLAogICAgImxldCIsIm9mIiwicXVlcnkiLCJyZWNlaXZlIiwidHJ5Iiwid2hlbiJdOwoKICB2YXIgb3BlcmF0b3JXb3JkcyA9IFsKICAgICJhbmQiLCJhbmRhbHNvIiwiYmFuZCIsImJub3QiLCJib3IiLCJic2wiLCJic3IiLCJieG9yIiwKICAgICJkaXYiLCJub3QiLCJvciIsIm9yZWxzZSIsInJlbSIsInhvciJdOwoKICB2YXIgb3BlcmF0b3JTeW1ib2xzID0gWwogICAgIisiLCItIiwiKiIsIi8iLCI+IiwiPj0iLCI8IiwiPTwiLCI9Oj0iLCI9PSIsIj0vPSIsIi89IiwifHwiLCI8LSJdOwoKICB2YXIgZ3VhcmRXb3JkcyA9IFsKICAgICJpc19hdG9tIiwiaXNfYmluYXJ5IiwiaXNfYml0c3RyaW5nIiwiaXNfYm9vbGVhbiIsImlzX2Zsb2F0IiwKICAgICJpc19mdW5jdGlvbiIsImlzX2ludGVnZXIiLCJpc19saXN0IiwiaXNfbnVtYmVyIiwiaXNfcGlkIiwKICAgICJpc19wb3J0IiwiaXNfcmVjb3JkIiwiaXNfcmVmZXJlbmNlIiwiaXNfdHVwbGUiLAogICAgImF0b20iLCJiaW5hcnkiLCJiaXRzdHJpbmciLCJib29sZWFuIiwiZnVuY3Rpb24iLCJpbnRlZ2VyIiwibGlzdCIsCiAgICAibnVtYmVyIiwicGlkIiwicG9ydCIsInJlY29yZCIsInJlZmVyZW5jZSIsInR1cGxlIl07CgogIHZhciBiaWZXb3JkcyA9IFsKICAgICJhYnMiLCJhZGxlcjMyIiwiYWRsZXIzMl9jb21iaW5lIiwiYWxpdmUiLCJhcHBseSIsImF0b21fdG9fYmluYXJ5IiwKICAgICJhdG9tX3RvX2xpc3QiLCJiaW5hcnlfdG9fYXRvbSIsImJpbmFyeV90b19leGlzdGluZ19hdG9tIiwKICAgICJiaW5hcnlfdG9fbGlzdCIsImJpbmFyeV90b190ZXJtIiwiYml0X3NpemUiLCJiaXRzdHJpbmdfdG9fbGlzdCIsCiAgICAiYnl0ZV9zaXplIiwiY2hlY2tfcHJvY2Vzc19jb2RlIiwiY29udGFjdF9iaW5hcnkiLCJjcmMzMiIsCiAgICAiY3JjMzJfY29tYmluZSIsImRhdGUiLCJkZWNvZGVfcGFja2V0IiwiZGVsZXRlX21vZHVsZSIsCiAgICAiZGlzY29ubmVjdF9ub2RlIiwiZWxlbWVudCIsImVyYXNlIiwiZXhpdCIsImZsb2F0IiwiZmxvYXRfdG9fbGlzdCIsCiAgICAiZ2FyYmFnZV9jb2xsZWN0IiwiZ2V0IiwiZ2V0X2tleXMiLCJncm91cF9sZWFkZXIiLCJoYWx0IiwiaGQiLAogICAgImludGVnZXJfdG9fbGlzdCIsImludGVybmFsX2JpZiIsImlvbGlzdF9zaXplIiwiaW9saXN0X3RvX2JpbmFyeSIsCiAgICAiaXNfYWxpdmUiLCJpc19hdG9tIiwiaXNfYmluYXJ5IiwiaXNfYml0c3RyaW5nIiwiaXNfYm9vbGVhbiIsCiAgICAiaXNfZmxvYXQiLCJpc19mdW5jdGlvbiIsImlzX2ludGVnZXIiLCJpc19saXN0IiwiaXNfbnVtYmVyIiwiaXNfcGlkIiwKICAgICJpc19wb3J0IiwiaXNfcHJvY2Vzc19hbGl2ZSIsImlzX3JlY29yZCIsImlzX3JlZmVyZW5jZSIsImlzX3R1cGxlIiwKICAgICJsZW5ndGgiLCJsaW5rIiwibGlzdF90b19hdG9tIiwibGlzdF90b19iaW5hcnkiLCJsaXN0X3RvX2JpdHN0cmluZyIsCiAgICAibGlzdF90b19leGlzdGluZ19hdG9tIiwibGlzdF90b19mbG9hdCIsImxpc3RfdG9faW50ZWdlciIsCiAgICAibGlzdF90b19waWQiLCJsaXN0X3RvX3R1cGxlIiwibG9hZF9tb2R1bGUiLCJtYWtlX3JlZiIsIm1vZHVsZV9sb2FkZWQiLAogICAgIm1vbml0b3Jfbm9kZSIsIm5vZGUiLCJub2RlX2xpbmsiLCJub2RlX3VubGluayIsIm5vZGVzIiwibm90YWxpdmUiLAogICAgIm5vdyIsIm9wZW5fcG9ydCIsInBpZF90b19saXN0IiwicG9ydF9jbG9zZSIsInBvcnRfY29tbWFuZCIsCiAgICAicG9ydF9jb25uZWN0IiwicG9ydF9jb250cm9sIiwicHJlX2xvYWRlZCIsInByb2Nlc3NfZmxhZyIsCiAgICAicHJvY2Vzc19pbmZvIiwicHJvY2Vzc2VzIiwicHVyZ2VfbW9kdWxlIiwicHV0IiwicmVnaXN0ZXIiLAogICAgInJlZ2lzdGVyZWQiLCJyb3VuZCIsInNlbGYiLCJzZXRlbGVtZW50Iiwic2l6ZSIsInNwYXduIiwic3Bhd25fbGluayIsCiAgICAic3Bhd25fbW9uaXRvciIsInNwYXduX29wdCIsInNwbGl0X2JpbmFyeSIsInN0YXRpc3RpY3MiLAogICAgInRlcm1fdG9fYmluYXJ5IiwidGltZSIsInRocm93IiwidGwiLCJ0cnVuYyIsInR1cGxlX3NpemUiLAogICAgInR1cGxlX3RvX2xpc3QiLCJ1bmxpbmsiLCJ1bnJlZ2lzdGVyIiwid2hlcmVpcyJdOwoKICBmdW5jdGlvbiBpc01lbWJlcihlbGVtZW50LGxpc3QpIHsKICAgIHJldHVybiAoLTEgPCBsaXN0LmluZGV4T2YoZWxlbWVudCkpOwogIH0KCiAgZnVuY3Rpb24gaXNQcmV2KHN0cmVhbSxzdHJpbmcpIHsKICAgIHZhciBzdGFydCA9IHN0cmVhbS5zdGFydDsKICAgIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoOwogICAgaWYgKGxlbiA8PSBzdGFydCkgewogICAgICB2YXIgd29yZCA9IHN0cmVhbS5zdHJpbmcuc2xpY2Uoc3RhcnQtbGVuLHN0YXJ0KTsKICAgICAgcmV0dXJuIHdvcmQgPT0gc3RyaW5nOwogICAgfWVsc2V7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIHZhciBzbWFsbFJFID0gL1thLXpfXS87CiAgdmFyIGxhcmdlUkUgPSAvW0EtWl9dLzsKICB2YXIgZGlnaXRSRSA9IC9bMC05XS87CiAgdmFyIG9jdGl0UkUgPSAvWzAtN10vOwogIHZhciBpZFJFID0gL1thLXpfQS1aMC05XS87CgogIGZ1bmN0aW9uIHRva2VuaXplKHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvLyBhdHRyaWJ1dGVzIGFuZCB0eXBlIHNwZWNzCiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5wZWVrKCkgPT0gJy0nKSB7CiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIGlmIChzdHJlYW0uZWF0KHNtYWxsUkUpICYmIHN0cmVhbS5lYXRXaGlsZShpZFJFKSkgewogICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09ICIoIikgewogICAgICAgICAgcmV0dXJuICJhdHRyaWJ1dGUiOwogICAgICAgIH1lbHNlIGlmIChpc01lbWJlcihzdHJlYW0uY3VycmVudCgpLHR5cGVXb3JkcykpIHsKICAgICAgICAgIHJldHVybiAiZGVmIjsKICAgICAgICB9ZWxzZXsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgfQoKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgLy8gY29tbWVudAogICAgaWYgKGNoID09ICclJykgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CgogICAgLy8gbWFjcm8KICAgIGlmIChjaCA9PSAnPycpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKGlkUkUpOwogICAgICByZXR1cm4gInZhcmlhYmxlLTIiOwogICAgfQoKICAgIC8vIHJlY29yZAogICAgaWYgKCBjaCA9PSAiIyIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKGlkUkUpOwogICAgICByZXR1cm4gImJyYWNrZXQiOwogICAgfQoKICAgIC8vIGNoYXIKICAgIGlmICggY2ggPT0gIiQiKSB7CiAgICAgIGlmIChzdHJlYW0ubmV4dCgpID09ICJcXCIpIHsKICAgICAgICBpZiAoIXN0cmVhbS5lYXRXaGlsZShvY3RpdFJFKSkgewogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfQoKICAgIC8vIHF1b3RlZCBhdG9tCiAgICBpZiAoY2ggPT0gJ1wnJykgewogICAgICByZXR1cm4gc2luZ2xlUXVvdGUoc3RyZWFtKTsKICAgIH0KCiAgICAvLyBzdHJpbmcKICAgIGlmIChjaCA9PSAnIicpIHsKICAgICAgcmV0dXJuIGRvdWJsZVF1b3RlKHN0cmVhbSk7CiAgICB9CgogICAgLy8gdmFyaWFibGUKICAgIGlmIChsYXJnZVJFLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpZFJFKTsKICAgICAgcmV0dXJuICJ2YXJpYWJsZSI7CiAgICB9CgogICAgLy8gYXRvbS9rZXl3b3JkL0JJRi9mdW5jdGlvbgogICAgaWYgKHNtYWxsUkUudGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKGlkUkUpOwoKICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gIi8iKSB7CiAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICBpZiAoc3RyZWFtLmVhdFdoaWxlKGRpZ2l0UkUpKSB7CiAgICAgICAgICByZXR1cm4gIm1ldGEiOyAgICAgIC8vIGYvMCBzdHlsZSBmdW4KICAgICAgICB9ZWxzZXsKICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICByZXR1cm4gImF0b20iOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIHcgPSBzdHJlYW0uY3VycmVudCgpOwoKICAgICAgaWYgKGlzTWVtYmVyKHcsa2V5d29yZFdvcmRzKSkgewogICAgICAgIHJldHVybiAia2V5d29yZCI7ICAgICAgICAgICAvLyBrZXl3b3JkCiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gIigiKSB7CiAgICAgICAgaWYgKGlzTWVtYmVyKHcsYmlmV29yZHMpICYmCiAgICAgICAgICAgICghaXNQcmV2KHN0cmVhbSwiOiIpIHx8IGlzUHJldihzdHJlYW0sImVybGFuZzoiKSkpIHsKICAgICAgICAgIHJldHVybiAiYnVpbHRpbiI7ICAgICAgICAgLy8gQklGCiAgICAgICAgfWVsc2V7CiAgICAgICAgICByZXR1cm4gInRhZyI7ICAgICAgICAgICAgIC8vIGZ1bmN0aW9uCiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc01lbWJlcih3LGd1YXJkV29yZHMpKSB7CiAgICAgICAgcmV0dXJuICJwcm9wZXJ0eSI7ICAgICAgICAgIC8vIGd1YXJkCiAgICAgIH0KICAgICAgaWYgKGlzTWVtYmVyKHcsb3BlcmF0b3JXb3JkcykpIHsKICAgICAgICByZXR1cm4gIm9wZXJhdG9yIjsgICAgICAgICAgLy8gb3BlcmF0b3IKICAgICAgfQoKCiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09ICI6IikgewogICAgICAgIGlmICh3ID09ICJlcmxhbmciKSB7ICAgICAgICAgLy8gZjpub3coKSBpcyBoaWdobGlnaHRlZCBpbmNvcnJlY3RseQogICAgICAgICAgcmV0dXJuICJidWlsdGluIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuICJ0YWciOyAgICAgICAgICAgICAgLy8gZnVuY3Rpb24gYXBwbGljYXRpb24KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiAiYXRvbSI7CiAgICB9CgogICAgLy8gbnVtYmVyCiAgICBpZiAoZGlnaXRSRS50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoZGlnaXRSRSk7CiAgICAgIGlmIChzdHJlYW0uZWF0KCcjJykpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoZGlnaXRSRSk7ICAgIC8vIDE2IzEwICBzdHlsZSBpbnRlZ2VyCiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHN0cmVhbS5lYXQoJy4nKSkgeyAgICAgICAvLyBmbG9hdAogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGRpZ2l0UkUpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLmVhdCgvW2VFXS8pKSB7CiAgICAgICAgICBzdHJlYW0uZWF0KC9bLStdLyk7ICAgICAgICAvLyBmbG9hdCB3aXRoIGV4cG9uZW50CiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoZGlnaXRSRSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAibnVtYmVyIjsgICAgICAgICAgICAgICAvLyBub3JtYWwgaW50ZWdlcgogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgZnVuY3Rpb24gZG91YmxlUXVvdGUoc3RyZWFtKSB7CiAgICByZXR1cm4gUXVvdGUoc3RyZWFtLCAnIicsICdcXCcsICJzdHJpbmciKTsKICB9CgogIGZ1bmN0aW9uIHNpbmdsZVF1b3RlKHN0cmVhbSkgewogICAgcmV0dXJuIFF1b3RlKHN0cmVhbSwnXCcnLCdcXCcsImF0b20iKTsKICB9CgogIGZ1bmN0aW9uIFF1b3RlKHN0cmVhbSxxdW90ZUNoYXIsZXNjYXBlQ2hhcix0YWcpIHsKICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgIGlmIChjaCA9PSBxdW90ZUNoYXIpIHsKICAgICAgICByZXR1cm4gdGFnOwogICAgICB9ZWxzZSBpZiAoY2ggPT0gZXNjYXBlQ2hhcikgewogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAiZXJyb3IiOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4ge307CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICB9Owp9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/erlang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEVybGFuZyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iZXJsYW5nLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUvZXJsYW5nLWRhcmsuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBFcmxhbmcgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgolJSAtKi0gbW9kZTogZXJsYW5nOyBlcmxhbmctaW5kZW50LWxldmVsOiAyIC0qLQolJSUgQ3JlYXRlZCA6ICA3IE1heSAyMDEyIGJ5IG1hdHMgY3JvbnF2aXN0IDxtYXNzZUBrbGFybmEuY29tPgoKJSUgQGRvYwolJSBEZW1vbnN0cmF0ZXMgaG93IHRvIHByaW50IGEgcmVjb3JkLgolJSBAZW5kCgotbW9kdWxlKCdleCcpLgotYXV0aG9yKCdtYXRzIGNyb25xdmlzdCcpLgotZXhwb3J0KFtkZW1vLzAsCiAgICAgICAgIHJlY19pbmZvLzFdKS4KCi1yZWNvcmQoZGVtbyx7YT0iT25lIixiPSJUd28iLGM9IlRocmVlIixkPSJGb3VyIn0pLgoKcmVjX2luZm8oZGVtbykgLT4gcmVjb3JkX2luZm8oZmllbGRzLGRlbW8pLgoKZGVtbygpIC0+IGV4cGFuZF9yZWNzKD9NT0RVTEUsI2RlbW97YT0iQSIsYj0iQkIifSkuCiAgCmV4cGFuZF9yZWNzKE0sTGlzdCkgd2hlbiBpc19saXN0KExpc3QpIC0+CiAgW2V4cGFuZF9yZWNzKE0sTCl8fEw8LUxpc3RdOwpleHBhbmRfcmVjcyhNLFR1cCkgd2hlbiBpc190dXBsZShUdXApIC0+CiAgY2FzZSB0dXBsZV9zaXplKFR1cCkgb2YKICAgIEwgd2hlbiBMIDwgMSAtPiBUdXA7CiAgICBMIC0+CiAgICAgIHRyeSBGaWVsZHMgPSBNOnJlY19pbmZvKGVsZW1lbnQoMSxUdXApKSwKICAgICAgICAgIEwgPSBsZW5ndGgoRmllbGRzKSsxLAogICAgICAgICAgbGlzdHM6emlwKEZpZWxkcyxleHBhbmRfcmVjcyhNLHRsKHR1cGxlX3RvX2xpc3QoVHVwKSkpKQogICAgICBjYXRjaCBfOl8gLT4KICAgICAgICAgIGxpc3RfdG9fdHVwbGUoZXhwYW5kX3JlY3MoTSx0dXBsZV90b19saXN0KFR1cCkpKQogICAgICBlbmQKICBlbmQ7CmV4cGFuZF9yZWNzKF8sVGVybSkgLT4KICBUZXJtLgo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgdGhlbWU6ICJlcmxhbmctZGFyayIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LWVybGFuZzwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/gfm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJnZm0iLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtZE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAibWFya2Rvd24iKTsKICB2YXIgYWxpYXNlcyA9IHsKICAgIGh0bWw6ICJodG1sbWl4ZWQiLAogICAganM6ICJqYXZhc2NyaXB0IiwKICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgIGM6ICJ0ZXh0L3gtY3NyYyIsCiAgICAiYysrIjogInRleHQveC1jKytzcmMiLAogICAgamF2YTogInRleHQveC1qYXZhIiwKICAgIGNzaGFycDogInRleHQveC1jc2hhcnAiLAogICAgImMjIjogInRleHQveC1jc2hhcnAiCiAgfTsKCiAgLy8gbWFrZSB0aGlzIGxhenkgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGxvYWQgR0ZNIGxhc3QKICB2YXIgZ2V0TW9kZSA9IChmdW5jdGlvbiAoKSB7CiAgICB2YXIgaSwgbW9kZXMgPSB7fSwgbWltZXMgPSB7fSwgbWltZTsKCiAgICB2YXIgbGlzdCA9IENvZGVNaXJyb3IubGlzdE1vZGVzKCk7CiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICBtb2Rlc1tsaXN0W2ldXSA9IGxpc3RbaV07CiAgICB9CiAgICB2YXIgbWltZXNMaXN0ID0gQ29kZU1pcnJvci5saXN0TUlNRXMoKTsKICAgIGZvciAoaSA9IDA7IGkgPCBtaW1lc0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbWltZSA9IG1pbWVzTGlzdFtpXS5taW1lOwogICAgICBtaW1lc1ttaW1lXSA9IG1pbWVzTGlzdFtpXS5taW1lOwogICAgfQoKICAgIGZvciAodmFyIGEgaW4gYWxpYXNlcykgewogICAgICBpZiAoYWxpYXNlc1thXSBpbiBtb2RlcyB8fCBhbGlhc2VzW2FdIGluIG1pbWVzKQogICAgICAgIG1vZGVzW2FdID0gYWxpYXNlc1thXTsKICAgIH0KICAgIAogICAgcmV0dXJuIGZ1bmN0aW9uIChsYW5nKSB7CiAgICAgIHJldHVybiBtb2Rlc1tsYW5nXSA/IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIG1vZGVzW2xhbmddKSA6IG51bGw7CiAgICB9CiAgfSgpKTsKCiAgZnVuY3Rpb24gbWFya2Rvd24oc3RyZWFtLCBzdGF0ZSkgewogICAgLy8gaW50ZXJjZXB0IGZlbmNlZCBjb2RlIGJsb2NrcwogICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2goL15gYGAoW1x3KyNdKikvKSkgewogICAgICAvLyB0cnkgc3dpdGNoaW5nIG1vZGUKICAgICAgc3RhdGUubG9jYWxNb2RlID0gZ2V0TW9kZShSZWdFeHAuJDEpCiAgICAgIGlmIChzdGF0ZS5sb2NhbE1vZGUpCiAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IHN0YXRlLmxvY2FsTW9kZS5zdGFydFN0YXRlKCk7CgogICAgICBzdGF0ZS50b2tlbiA9IGxvY2FsOwogICAgICByZXR1cm4gJ2NvZGUnOwogICAgfQoKICAgIHJldHVybiBtZE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5tZFN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIGxvY2FsKHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKC9eYGBgLykpIHsKICAgICAgc3RhdGUubG9jYWxNb2RlID0gc3RhdGUubG9jYWxTdGF0ZSA9IG51bGw7CiAgICAgIHN0YXRlLnRva2VuID0gbWFya2Rvd247CiAgICAgIHJldHVybiAnY29kZSc7CiAgICB9CiAgICBlbHNlIGlmIChzdGF0ZS5sb2NhbE1vZGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmxvY2FsTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpOwogICAgfSBlbHNlIHsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gJ2NvZGUnOwogICAgfQogIH0KCiAgLy8gY3VzdG9tIGhhbmRsZVRleHQgdG8gcHJldmVudCBlbXBoYXNpcyBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZAogIC8vIGFuZCBhZGQgYXV0b2xpbmtpbmcKICBmdW5jdGlvbiBoYW5kbGVUZXh0KHN0cmVhbSwgbWRTdGF0ZSkgewogICAgdmFyIG1hdGNoOwogICAgaWYgKHN0cmVhbS5tYXRjaCgvXlx3KzpcL1wvXFMrLykpIHsKICAgICAgcmV0dXJuICdsaW5rJzsKICAgIH0KICAgIGlmIChzdHJlYW0ubWF0Y2goL15bXlxbKlxcPD5gIF9dW15cWypcXDw+YCBdKlteXFsqXFw8PmAgX10vKSkgewogICAgICByZXR1cm4gbWRNb2RlLmdldFR5cGUobWRTdGF0ZSk7CiAgICB9CiAgICBpZiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goL15bXlxbKlxcPD5gIF0rLykpIHsKICAgICAgdmFyIHdvcmQgPSBtYXRjaFswXTsKICAgICAgaWYgKHdvcmRbMF0gPT09ICdfJyAmJiB3b3JkW3dvcmQubGVuZ3RoLTFdID09PSAnXycpIHsKICAgICAgICBzdHJlYW0uYmFja1VwKHdvcmQubGVuZ3RoKTsKICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIHJldHVybiBtZE1vZGUuZ2V0VHlwZShtZFN0YXRlKTsKICAgIH0KICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIG1kU3RhdGUgPSBtZE1vZGUuc3RhcnRTdGF0ZSgpOwogICAgICBtZFN0YXRlLnRleHQgPSBoYW5kbGVUZXh0OwogICAgICByZXR1cm4ge3Rva2VuOiBtYXJrZG93biwgbW9kZTogIm1hcmtkb3duIiwgbWRTdGF0ZTogbWRTdGF0ZSwKICAgICAgICAgICAgICBsb2NhbE1vZGU6IG51bGwsIGxvY2FsU3RhdGU6IG51bGx9OwogICAgfSwKCiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRva2VuLCBtb2RlOiBzdGF0ZS5tb2RlLCBtZFN0YXRlOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShtZE1vZGUsIHN0YXRlLm1kU3RhdGUpLAogICAgICAgICAgICAgIGxvY2FsTW9kZTogc3RhdGUubG9jYWxNb2RlLAogICAgICAgICAgICAgIGxvY2FsU3RhdGU6IHN0YXRlLmxvY2FsTW9kZSA/IENvZGVNaXJyb3IuY29weVN0YXRlKHN0YXRlLmxvY2FsTW9kZSwgc3RhdGUubG9jYWxTdGF0ZSkgOiBudWxsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAvKiBQYXJzZSBHRk0gZG91YmxlIGJyYWNrZXQgbGlua3MgKi8KICAgICAgICBpZiAoKGNoID0gc3RyZWFtLnBlZWsoKSkgIT0gdW5kZWZpbmVkICYmIGNoID09ICdbJykgewogICAgICAgICAgICBzdHJlYW0ubmV4dCgpOyAvLyBBZHZhbmNlIHRoZSBzdHJlYW0KCiAgICAgICAgICAgIC8qIE9ubHkgaGFuZGxlIGRvdWJsZSBicmFja2V0IGxpbmtzICovCiAgICAgICAgICAgIGlmICgoY2ggPSBzdHJlYW0ucGVlaygpKSA9PSB1bmRlZmluZWQgfHwgY2ggIT0gJ1snKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICB9IAoKICAgICAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IHVuZGVmaW5lZCAmJiBjaCAhPSAnXScpIHt9CgogICAgICAgICAgICBpZiAoY2ggPT0gJ10nICYmIChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IHVuZGVmaW5lZCAmJiBjaCA9PSAnXScpIAogICAgICAgICAgICAgICAgcmV0dXJuICdsaW5rJzsKCiAgICAgICAgICAgIC8qIElmIHdlIGRpZCBub3QgZmluZCB0aGUgc2Vjb25kICddJyAqLwogICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgIH0KCiAgICAgICAgLyogTWF0Y2ggR0ZNIGxhdGV4IGZvcm11bGFzLCBhcyB3ZWxsIGFzIGxhdGV4IGZvcm11bGFzIHdpdGhpbiAnJCcgKi8KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXCRbXlwkXStcJC8pKSB7CiAgICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXFwoKC4qPylcXFwpLykpIHsKICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwkXCRbXlwkXStcJFwkLykpIHsKICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxcWyguKj8pXFxcXS8pKSB7CiAgICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdGF0ZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgIH0KICB9Cn0sICJtYXJrZG93biIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdGTSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbWFya2Rvd24vbWFya2Rvd24uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImdmbS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbWFya2Rvd24vbWFya2Rvd24uY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBHRk0gbW9kZTwvaDE+Cgo8IS0tIHNvdXJjZTogaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9iYXNpY3MudGV4dCAtLT4KPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KR2l0aHViIEZsYXZvcmVkIE1hcmtkb3duCj09PT09PT09PT09PT09PT09PT09PT09PQoKRXZlcnl0aGluZyBmcm9tIG1hcmtkb3duIHBsdXMgR0ZNIGZlYXR1cmVzOgoKIyMgRmVuY2VkIGNvZGUgYmxvY2tzCgpgYGBqYXZhc2NyaXB0CmZvciAodmFyIGkgPSAwOyBpICZsdDsgaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgIGNvbnNvbGUubG9nKGl0ZW1zW2ldLCBpKTsgLy8gbG9nIHRoZW0KfQpgYGAKClNlZSBodHRwOi8vZ2l0aHViLmdpdGh1Yi5jb20vZ2l0aHViLWZsYXZvcmVkLW1hcmtkb3duLwoKPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiAnZ2ZtJywKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAiZGVmYXVsdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/go.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJnbyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKCiAgdmFyIGtleXdvcmRzID0gewogICAgImJyZWFrIjp0cnVlLCAiY2FzZSI6dHJ1ZSwgImNoYW4iOnRydWUsICJjb25zdCI6dHJ1ZSwgImNvbnRpbnVlIjp0cnVlLAogICAgImRlZmF1bHQiOnRydWUsICJkZWZlciI6dHJ1ZSwgImVsc2UiOnRydWUsICJmYWxsdGhyb3VnaCI6dHJ1ZSwgImZvciI6dHJ1ZSwKICAgICJmdW5jIjp0cnVlLCAiZ28iOnRydWUsICJnb3RvIjp0cnVlLCAiaWYiOnRydWUsICJpbXBvcnQiOnRydWUsCiAgICAiaW50ZXJmYWNlIjp0cnVlLCAibWFwIjp0cnVlLCAicGFja2FnZSI6dHJ1ZSwgInJhbmdlIjp0cnVlLCAicmV0dXJuIjp0cnVlLAogICAgInNlbGVjdCI6dHJ1ZSwgInN0cnVjdCI6dHJ1ZSwgInN3aXRjaCI6dHJ1ZSwgInR5cGUiOnRydWUsICJ2YXIiOnRydWUsCiAgICAiYm9vbCI6dHJ1ZSwgImJ5dGUiOnRydWUsICJjb21wbGV4NjQiOnRydWUsICJjb21wbGV4MTI4Ijp0cnVlLAogICAgImZsb2F0MzIiOnRydWUsICJmbG9hdDY0Ijp0cnVlLCAiaW50OCI6dHJ1ZSwgImludDE2Ijp0cnVlLCAiaW50MzIiOnRydWUsCiAgICAiaW50NjQiOnRydWUsICJzdHJpbmciOnRydWUsICJ1aW50OCI6dHJ1ZSwgInVpbnQxNiI6dHJ1ZSwgInVpbnQzMiI6dHJ1ZSwKICAgICJ1aW50NjQiOnRydWUsICJpbnQiOnRydWUsICJ1aW50Ijp0cnVlLCAidWludHB0ciI6dHJ1ZQogIH07CgogIHZhciBhdG9tcyA9IHsKICAgICJ0cnVlIjp0cnVlLCAiZmFsc2UiOnRydWUsICJpb3RhIjp0cnVlLCAibmlsIjp0cnVlLCAiYXBwZW5kIjp0cnVlLAogICAgImNhcCI6dHJ1ZSwgImNsb3NlIjp0cnVlLCAiY29tcGxleCI6dHJ1ZSwgImNvcHkiOnRydWUsICJpbWFnIjp0cnVlLAogICAgImxlbiI6dHJ1ZSwgIm1ha2UiOnRydWUsICJuZXciOnRydWUsICJwYW5pYyI6dHJ1ZSwgInByaW50Ijp0cnVlLAogICAgInByaW50bG4iOnRydWUsICJyZWFsIjp0cnVlLCAicmVjb3ZlciI6dHJ1ZQogIH07CgogIHZhciBibG9ja0tleXdvcmRzID0gewogICAgImVsc2UiOnRydWUsICJmb3IiOnRydWUsICJmdW5jIjp0cnVlLCAiaWYiOnRydWUsICJpbnRlcmZhY2UiOnRydWUsCiAgICAic2VsZWN0Ijp0cnVlLCAic3RydWN0Ijp0cnVlLCAic3dpdGNoIjp0cnVlCiAgfTsKCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJl4lOj08PiF8XC9dLzsKCiAgdmFyIGN1clB1bmM7CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIgfHwgY2ggPT0gImAiKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoL1tcZFwuXS8udGVzdChjaCkpIHsKICAgICAgaWYgKGNoID09ICIuIikgewogICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKyhbZUVdW1wtK10/WzAtOV0rKT8vKTsKICAgICAgfSBlbHNlIGlmIChjaCA9PSAiMCIpIHsKICAgICAgICBzdHJlYW0ubWF0Y2goL15beFhdWzAtOWEtZkEtRl0rLykgfHwgc3RyZWFtLm1hdGNoKC9eMFswLTddKy8pOwogICAgICB9IGVsc2UgewogICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKlwuP1swLTldKihbZUVdW1wtK10/WzAtOV0rKT8vKTsKICAgICAgfQogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbAogICAgfQogICAgaWYgKGNoID09ICIvIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiKiIpKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7CiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgewogICAgICBpZiAoY3VyID09ICJjYXNlIiB8fCBjdXIgPT0gImRlZmF1bHQiKSBjdXJQdW5jID0gImNhc2UiOwogICAgICByZXR1cm4gImtleXdvcmQiOwogICAgfQogICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiAiYXRvbSI7CiAgICByZXR1cm4gIndvcmQiOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlOwogICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBxdW90ZSA9PSAiYCIpKQogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgaWYgKGNoID09ICIvIiAmJiBtYXliZUVuZCkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICB9CiAgICByZXR1cm4gImNvbW1lbnQiOwogIH0KCiAgZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldikgewogICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkOwogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5hbGlnbiA9IGFsaWduOwogICAgdGhpcy5wcmV2ID0gcHJldjsKICB9CiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIGNvbCwgdHlwZSkgewogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZS5pbmRlbnRlZCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTsKICB9CiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkgewogICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7CiAgICBpZiAodCA9PSAiKSIgfHwgdCA9PSAiXSIgfHwgdCA9PSAifSIpCiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IG51bGwsCiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLAogICAgICAgIGluZGVudGVkOiAwLAogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlCiAgICAgIH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsKICAgICAgICBpZiAoY3R4LnR5cGUgPT0gImNhc2UiKSBjdHgudHlwZSA9ICJ9IjsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICBjdXJQdW5jID0gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSkoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAifSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJbIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIl0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiKCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICIpIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gImNhc2UiKSBjdHgudHlwZSA9ICJjYXNlIgogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IiAmJiBjdHgudHlwZSA9PSAifSIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSAmJiBzdGF0ZS50b2tlbml6ZSAhPSBudWxsKSByZXR1cm4gMDsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQsIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApOwogICAgICBpZiAoY3R4LnR5cGUgPT0gImNhc2UiICYmIC9eKD86Y2FzZXxkZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikpIHsKICAgICAgICBzdGF0ZS5jb250ZXh0LnR5cGUgPSAifSI7CiAgICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZDsKICAgICAgfQogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZSByZXR1cm4gY3R4LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ7fToiCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1nbyIsICJnbyIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdvIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImdvLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBiYWNrZ3JvdW5kOiNmZmN9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogR28gbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovLyBQcmltZSBTaWV2ZSBpbiBHby4KLy8gVGFrZW4gZnJvbSB0aGUgR28gc3BlY2lmaWNhdGlvbi4KLy8gQ29weXJpZ2h0IMKpIFRoZSBHbyBBdXRob3JzLgoKcGFja2FnZSBtYWluCgppbXBvcnQgImZtdCIKCi8vIFNlbmQgdGhlIHNlcXVlbmNlIDIsIDMsIDQsIC4uLiB0byBjaGFubmVsICdjaCcuCmZ1bmMgZ2VuZXJhdGUoY2ggY2hhbiZsdDstIGludCkgewoJZm9yIGkgOj0gMjsgOyBpKysgewoJCWNoICZsdDstIGkgIC8vIFNlbmQgJ2knIHRvIGNoYW5uZWwgJ2NoJwoJfQp9CgovLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBjaGFubmVsICdzcmMnIHRvIGNoYW5uZWwgJ2RzdCcsCi8vIHJlbW92aW5nIHRob3NlIGRpdmlzaWJsZSBieSAncHJpbWUnLgpmdW5jIGZpbHRlcihzcmMgJmx0Oy1jaGFuIGludCwgZHN0IGNoYW4mbHQ7LSBpbnQsIHByaW1lIGludCkgewoJZm9yIGkgOj0gcmFuZ2Ugc3JjIHsgICAgLy8gTG9vcCBvdmVyIHZhbHVlcyByZWNlaXZlZCBmcm9tICdzcmMnLgoJCWlmIGklcHJpbWUgIT0gMCB7CgkJCWRzdCAmbHQ7LSBpICAvLyBTZW5kICdpJyB0byBjaGFubmVsICdkc3QnLgoJCX0KCX0KfQoKLy8gVGhlIHByaW1lIHNpZXZlOiBEYWlzeS1jaGFpbiBmaWx0ZXIgcHJvY2Vzc2VzIHRvZ2V0aGVyLgpmdW5jIHNpZXZlKCkgewoJY2ggOj0gbWFrZShjaGFuIGludCkgIC8vIENyZWF0ZSBhIG5ldyBjaGFubmVsLgoJZ28gZ2VuZXJhdGUoY2gpICAgICAgIC8vIFN0YXJ0IGdlbmVyYXRlKCkgYXMgYSBzdWJwcm9jZXNzLgoJZm9yIHsKCQlwcmltZSA6PSAmbHQ7LWNoCgkJZm10LlByaW50KHByaW1lLCAiXG4iKQoJCWNoMSA6PSBtYWtlKGNoYW4gaW50KQoJCWdvIGZpbHRlcihjaCwgY2gxLCBwcmltZSkKCQljaCA9IGNoMQoJfQp9CgpmdW5jIG1haW4oKSB7CglzaWV2ZSgpCn0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICB0aGVtZTogImVsZWdhbnQiLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgaW5kZW50VW5pdDogOCwKICAgICAgICB0YWJTaXplOiA4LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtZ28iCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGU6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1nbzwvY29kZT48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/groovy.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJncm9vdnkiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIGZ1bmN0aW9uIHdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIga2V5d29yZHMgPSB3b3JkcygKICAgICJhYnN0cmFjdCBhcyBhc3NlcnQgYm9vbGVhbiBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjbGFzcyBjb25zdCBjb250aW51ZSBkZWYgZGVmYXVsdCAiICsKICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCBpbiAiICsKICAgICJpbnN0YW5jZW9mIGludCBpbnRlcmZhY2UgbG9uZyBuYXRpdmUgbmV3IHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJldHVybiAiICsKICAgICJzaG9ydCBzdGF0aWMgc3RyaWN0ZnAgc3VwZXIgc3dpdGNoIHN5bmNocm9uaXplZCB0aHJlYWRzYWZlIHRocm93IHRocm93cyB0cmFuc2llbnQgIiArCiAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKTsKICB2YXIgYmxvY2tLZXl3b3JkcyA9IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN3aXRjaCB0cnkgd2hpbGUgZW51bSBpbnRlcmZhY2UgZGVmIik7CiAgdmFyIGF0b21zID0gd29yZHMoIm51bGwgdHJ1ZSBmYWxzZSB0aGlzIik7CgogIHZhciBjdXJQdW5jOwogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgcmV0dXJuIHN0YXJ0U3RyaW5nKGNoLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgvZUUvKSkgeyBzdHJlYW0uZWF0KC9cK1wtLyk7IHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsgfQogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuQ29tbWVudCk7CiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgICAgaWYgKGV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuKSkgewogICAgICAgIHJldHVybiBzdGFydFN0cmluZyhjaCwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgIGN1clB1bmMgPSAiLT4iOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICgvWytcLSomJT08PiE/fFwvfl0vLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWytcLSomJT08Pnx+XS8pOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgaWYgKGNoID09ICJAIikgeyBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX1wuXS8pOyByZXR1cm4gIm1ldGEiOyB9CiAgICBpZiAoc3RhdGUubGFzdFRva2VuID09ICIuIikgcmV0dXJuICJwcm9wZXJ0eSI7CiAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7IGN1clB1bmMgPSAicHJvcGxhYmVsIjsgcmV0dXJuICJwcm9wZXJ0eSI7IH0KICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpOwogICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsgcmV0dXJuICJhdG9tIjsgfQogICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsKICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9ICJuZXdzdGF0ZW1lbnQiOwogICAgICByZXR1cm4gImtleXdvcmQiOwogICAgfQogICAgcmV0dXJuICJ3b3JkIjsKICB9CiAgdG9rZW5CYXNlLmlzQmFzZSA9IHRydWU7CgogIGZ1bmN0aW9uIHN0YXJ0U3RyaW5nKHF1b3RlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgdHJpcGxlUXVvdGVkID0gZmFsc2U7CiAgICBpZiAocXVvdGUgIT0gIi8iICYmIHN0cmVhbS5lYXQocXVvdGUpKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KHF1b3RlKSkgdHJpcGxlUXVvdGVkID0gdHJ1ZTsKICAgICAgZWxzZSByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBmdW5jdGlvbiB0KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gIXRyaXBsZVF1b3RlZDsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBpZiAoIXRyaXBsZVF1b3RlZCkgeyBicmVhazsgfQogICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChxdW90ZSArIHF1b3RlKSkgeyBlbmQgPSB0cnVlOyBicmVhazsgfQogICAgICAgIH0KICAgICAgICBpZiAocXVvdGUgPT0gJyInICYmIG5leHQgPT0gIiQiICYmICFlc2NhcGVkICYmIHN0cmVhbS5lYXQoInsiKSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VVbnRpbEJyYWNlKCkpOwogICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQpIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHQpOwogICAgcmV0dXJuIHQoc3RyZWFtLCBzdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkJhc2VVbnRpbEJyYWNlKCkgewogICAgdmFyIGRlcHRoID0gMTsKICAgIGZ1bmN0aW9uIHQoc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAifSIpIHsKICAgICAgICBkZXB0aC0tOwogICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT0gInsiKSB7CiAgICAgICAgZGVwdGgrKzsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgdC5pc0Jhc2UgPSB0cnVlOwogICAgcmV0dXJuIHQ7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBleHBlY3RFeHByZXNzaW9uKGxhc3QpIHsKICAgIHJldHVybiAhbGFzdCB8fCBsYXN0ID09ICJvcGVyYXRvciIgfHwgbGFzdCA9PSAiLT4iIHx8IC9bXC5cW1x7XCgsOzpdLy50ZXN0KGxhc3QpIHx8CiAgICAgIGxhc3QgPT0gIm5ld3N0YXRlbWVudCIgfHwgbGFzdCA9PSAia2V5d29yZCIgfHwgbGFzdCA9PSAicHJvcGxhYmVsIjsKICB9CgogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsKICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuYWxpZ24gPSBhbGlnbjsKICAgIHRoaXMucHJldiA9IHByZXY7CiAgfQogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlOwogICAgaWYgKHQgPT0gIikiIHx8IHQgPT0gIl0iIHx8IHQgPT0gIn0iKQogICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiBbdG9rZW5CYXNlXSwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGNvbmZpZy5pbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLAogICAgICAgIGluZGVudGVkOiAwLAogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlLAogICAgICAgIGxhc3RUb2tlbjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CiAgICAgICAgLy8gQXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24KICAgICAgICBpZiAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgIWV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuKSkgewogICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7IGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAvLyBIYW5kbGUgaW5kZW50YXRpb24gZm9yIHt4IC0+IFxuIC4uLiB9CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIi0+IiAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdHgucHJldi50eXBlID09ICJ9IikgewogICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgIHN0YXRlLmNvbnRleHQuYWxpZ24gPSBmYWxzZTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IikgewogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkKICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHN0YXRlLmxhc3RUb2tlbiA9IGN1clB1bmMgfHwgc3R5bGU7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmICghc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdLmlzQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiICYmICFleHBlY3RFeHByZXNzaW9uKHN0YXRlLmxhc3RUb2tlbikpIGN0eCA9IGN0eC5wcmV2OwogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZ3Jvb3Z5IiwgImdyb292eSIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdyb292eSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iZ3Jvb3Z5LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM1MDA7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNTAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBHcm9vdnkgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovL1BhdHRlcm4gZm9yIGdyb292eSBzY3JpcHQKZGVmIHAgPSB+Ly4qXC5ncm9vdnkvCm5ldyBGaWxlKCAnZDpcXHNjcmlwdHMnICkuZWFjaEZpbGVNYXRjaChwKSB7ZiAtPgogIC8vIGltcG9ydHMgbGlzdAogIGRlZiBpbXBvcnRzID0gW10KICBmLmVhY2hMaW5lIHsKICAgIC8vIGNvbmRpdGlvbiB0byBkZXRlY3QgYW4gaW1wb3J0IGluc3RydWN0aW9uCiAgICBsbiAtPiBpZiAoIGxuID1+ICdeaW1wb3J0IC4qJyApIHsKICAgICAgaW1wb3J0cyA8PCAiJHtsbiAtICdpbXBvcnQgJ30iCiAgICB9CiAgfQogIC8vIHByaW50IHRobWVuCiAgaWYgKCAhIGltcG9ydHMuZW1wdHkgKSB7CiAgICBwcmludGxuIGYKICAgIGltcG9ydHMuZWFjaHsgcHJpbnRsbiAiICAgJGl0IiB9CiAgfQp9CgovKiBDb2luIGNoYW5nZXIgZGVtbyBjb2RlIGZyb20gaHR0cDovL2dyb292eS5jb2RlaGF1cy5vcmcgKi8KCmVudW0gVXNDb2luIHsKICBxdWFydGVyKDI1KSwgZGltZSgxMCksIG5pY2tlbCg1KSwgcGVubnkoMSkKICBVc0NvaW4odikgeyB2YWx1ZSA9IHYgfQogIGZpbmFsIHZhbHVlCn0KCmVudW0gT3p6aWVDb2luIHsKICBmaWZ0eSg1MCksIHR3ZW50eSgyMCksIHRlbigxMCksIGZpdmUoNSkKICBPenppZUNvaW4odikgeyB2YWx1ZSA9IHYgfQogIGZpbmFsIHZhbHVlCn0KCmRlZiBwbHVyYWwod29yZCwgY291bnQpIHsKICBpZiAoY291bnQgPT0gMSkgcmV0dXJuIHdvcmQKICB3b3JkWy0xXSA9PSAneScgPyB3b3JkWzAuLi0yXSArICJpZXMiIDogd29yZCArICJzIgp9CgpkZWYgY2hhbmdlKGN1cnJlbmN5LCBhbW91bnQpIHsKICBjdXJyZW5jeS52YWx1ZXMoKS5pbmplY3QoW10peyBsaXN0LCBjb2luIC0+CiAgICAgaW50IGNvdW50ID0gYW1vdW50IC8gY29pbi52YWx1ZQogICAgIGFtb3VudCA9IGFtb3VudCAlIGNvaW4udmFsdWUKICAgICBsaXN0ICs9ICIkY291bnQgJHtwbHVyYWwoY29pbi50b1N0cmluZygpLCBjb3VudCl9IgogIH0KfQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1ncm9vdnkiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1ncm9vdnk8L2NvZGU+PC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/haskell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJoYXNrZWxsIiwgZnVuY3Rpb24oY21DZmcsIG1vZGVDZmcpIHsKCiAgZnVuY3Rpb24gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgZikgewogICAgc2V0U3RhdGUoZik7CiAgICByZXR1cm4gZihzb3VyY2UsIHNldFN0YXRlKTsKICB9CiAgCiAgLy8gVGhlc2Ugc2hvdWxkIGFsbCBiZSBVbmljb2RlIGV4dGVuZGVkLCBhcyBwZXIgdGhlIEhhc2tlbGwgMjAxMCByZXBvcnQKICB2YXIgc21hbGxSRSA9IC9bYS16X10vOwogIHZhciBsYXJnZVJFID0gL1tBLVpdLzsKICB2YXIgZGlnaXRSRSA9IC9bMC05XS87CiAgdmFyIGhleGl0UkUgPSAvWzAtOUEtRmEtZl0vOwogIHZhciBvY3RpdFJFID0gL1swLTddLzsKICB2YXIgaWRSRSA9IC9bYS16X0EtWjAtOSddLzsKICB2YXIgc3ltYm9sUkUgPSAvWy0hIyQlJiorLlwvPD0+P0BcXF58fjpdLzsKICB2YXIgc3BlY2lhbFJFID0gL1soKSw7W1xdYHt9XS87CiAgdmFyIHdoaXRlQ2hhclJFID0gL1sgXHRcdlxmXS87IC8vIG5ld2xpbmVzIGFyZSBoYW5kbGVkIGluIHRva2VuaXplcgogICAgCiAgZnVuY3Rpb24gbm9ybWFsKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgIGlmIChzb3VyY2UuZWF0V2hpbGUod2hpdGVDaGFyUkUpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgICAKICAgIHZhciBjaCA9IHNvdXJjZS5uZXh0KCk7CiAgICBpZiAoc3BlY2lhbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgdmFyIHQgPSAiY29tbWVudCI7CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyMnKSkgewogICAgICAgICAgdCA9ICJtZXRhIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN3aXRjaFN0YXRlKHNvdXJjZSwgc2V0U3RhdGUsIG5jb21tZW50KHQsIDEpKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgaWYgKGNoID09ICdcJycpIHsKICAgICAgaWYgKHNvdXJjZS5lYXQoJ1xcJykpIHsKICAgICAgICBzb3VyY2UubmV4dCgpOyAgLy8gc2hvdWxkIGhhbmRsZSBvdGhlciBlc2NhcGVzIGhlcmUKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzb3VyY2UubmV4dCgpOwogICAgICB9CiAgICAgIGlmIChzb3VyY2UuZWF0KCdcJycpKSB7CiAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICB9CiAgICAgIHJldHVybiAiZXJyb3IiOwogICAgfQogICAgCiAgICBpZiAoY2ggPT0gJyInKSB7CiAgICAgIHJldHVybiBzd2l0Y2hTdGF0ZShzb3VyY2UsIHNldFN0YXRlLCBzdHJpbmdMaXRlcmFsKTsKICAgIH0KICAgICAgCiAgICBpZiAobGFyZ2VSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHsKICAgICAgICByZXR1cm4gInF1YWxpZmllciI7CiAgICAgIH0KICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0KICAgICAgCiAgICBpZiAoc21hbGxSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgICAKICAgIGlmIChkaWdpdFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnMCcpIHsKICAgICAgICBpZiAoc291cmNlLmVhdCgvW3hYXS8pKSB7CiAgICAgICAgICBzb3VyY2UuZWF0V2hpbGUoaGV4aXRSRSk7IC8vIHNob3VsZCByZXF1aXJlIGF0IGxlYXN0IDEKICAgICAgICAgIHJldHVybiAiaW50ZWdlciI7CiAgICAgICAgfQogICAgICAgIGlmIChzb3VyY2UuZWF0KC9bb09dLykpIHsKICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShvY3RpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMQogICAgICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgICAgIH0KICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoZGlnaXRSRSk7CiAgICAgIHZhciB0ID0gIm51bWJlciI7CiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHsKICAgICAgICB0ID0gIm51bWJlciI7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgaWYgKHNvdXJjZS5lYXQoL1tlRV0vKSkgewogICAgICAgIHQgPSAibnVtYmVyIjsKICAgICAgICBzb3VyY2UuZWF0KC9bLStdLyk7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgcmV0dXJuIHQ7CiAgICB9CiAgICAgIAogICAgaWYgKHN5bWJvbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgvLS8pKSB7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKC8tLyk7CiAgICAgICAgaWYgKCFzb3VyY2UuZWF0KHN5bWJvbFJFKSkgewogICAgICAgICAgc291cmNlLnNraXBUb0VuZCgpOwogICAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHQgPSAidmFyaWFibGUiOwogICAgICBpZiAoY2ggPT0gJzonKSB7CiAgICAgICAgdCA9ICJ2YXJpYWJsZS0yIjsKICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoc3ltYm9sUkUpOwogICAgICByZXR1cm4gdDsgICAgCiAgICB9CiAgICAgIAogICAgcmV0dXJuICJlcnJvciI7CiAgfQogICAgCiAgZnVuY3Rpb24gbmNvbW1lbnQodHlwZSwgbmVzdCkgewogICAgaWYgKG5lc3QgPT0gMCkgewogICAgICByZXR1cm4gbm9ybWFsOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgICAgdmFyIGN1cnJOZXN0ID0gbmVzdDsKICAgICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgICB2YXIgY2ggPSBzb3VyY2UubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgICArK2N1cnJOZXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgnfScpKSB7CiAgICAgICAgICAtLWN1cnJOZXN0OwogICAgICAgICAgaWYgKGN1cnJOZXN0ID09IDApIHsKICAgICAgICAgICAgc2V0U3RhdGUobm9ybWFsKTsKICAgICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldFN0YXRlKG5jb21tZW50KHR5cGUsIGN1cnJOZXN0KSk7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQogIH0KICAgIAogIGZ1bmN0aW9uIHN0cmluZ0xpdGVyYWwoc291cmNlLCBzZXRTdGF0ZSkgewogICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgdmFyIGNoID0gc291cmNlLm5leHQoKTsKICAgICAgaWYgKGNoID09ICciJykgewogICAgICAgIHNldFN0YXRlKG5vcm1hbCk7CiAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICB9CiAgICAgIGlmIChjaCA9PSAnXFwnKSB7CiAgICAgICAgaWYgKHNvdXJjZS5lb2woKSB8fCBzb3VyY2UuZWF0KHdoaXRlQ2hhclJFKSkgewogICAgICAgICAgc2V0U3RhdGUoc3RyaW5nR2FwKTsKICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICB9CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyYnKSkgewogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNvdXJjZS5uZXh0KCk7IC8vIHNob3VsZCBoYW5kbGUgb3RoZXIgZXNjYXBlcyBoZXJlCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzZXRTdGF0ZShub3JtYWwpOwogICAgcmV0dXJuICJlcnJvciI7CiAgfQogIAogIGZ1bmN0aW9uIHN0cmluZ0dhcChzb3VyY2UsIHNldFN0YXRlKSB7CiAgICBpZiAoc291cmNlLmVhdCgnXFwnKSkgewogICAgICByZXR1cm4gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgc3RyaW5nTGl0ZXJhbCk7CiAgICB9CiAgICBzb3VyY2UubmV4dCgpOwogICAgc2V0U3RhdGUobm9ybWFsKTsKICAgIHJldHVybiAiZXJyb3IiOwogIH0KICAKICAKICB2YXIgd2VsbEtub3duV29yZHMgPSAoZnVuY3Rpb24oKSB7CiAgICB2YXIgd2t3ID0ge307CiAgICBmdW5jdGlvbiBzZXRUeXBlKHQpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKICAgICAgICAgIHdrd1thcmd1bWVudHNbaV1dID0gdDsKICAgICAgfQogICAgfQogICAgCiAgICBzZXRUeXBlKCJrZXl3b3JkIikoCiAgICAgICJjYXNlIiwgImNsYXNzIiwgImRhdGEiLCAiZGVmYXVsdCIsICJkZXJpdmluZyIsICJkbyIsICJlbHNlIiwgImZvcmVpZ24iLAogICAgICAiaWYiLCAiaW1wb3J0IiwgImluIiwgImluZml4IiwgImluZml4bCIsICJpbmZpeHIiLCAiaW5zdGFuY2UiLCAibGV0IiwKICAgICAgIm1vZHVsZSIsICJuZXd0eXBlIiwgIm9mIiwgInRoZW4iLCAidHlwZSIsICJ3aGVyZSIsICJfIik7CiAgICAgIAogICAgc2V0VHlwZSgia2V5d29yZCIpKAogICAgICAiXC5cLiIsICI6IiwgIjo6IiwgIj0iLCAiXFwiLCAiXCIiLCAiPC0iLCAiLT4iLCAiQCIsICJ+IiwgIj0+Iik7CiAgICAgIAogICAgc2V0VHlwZSgiYnVpbHRpbiIpKAogICAgICAiISEiLCAiJCEiLCAiJCIsICImJiIsICIrIiwgIisrIiwgIi0iLCAiLiIsICIvIiwgIi89IiwgIjwiLCAiPD0iLCAiPTw8IiwKICAgICAgIj09IiwgIj4iLCAiPj0iLCAiPj4iLCAiPj49IiwgIl4iLCAiXl4iLCAifHwiLCAiKiIsICIqKiIpOwogICAgICAKICAgIHNldFR5cGUoImJ1aWx0aW4iKSgKICAgICAgIkJvb2wiLCAiQm91bmRlZCIsICJDaGFyIiwgIkRvdWJsZSIsICJFUSIsICJFaXRoZXIiLCAiRW51bSIsICJFcSIsCiAgICAgICJGYWxzZSIsICJGaWxlUGF0aCIsICJGbG9hdCIsICJGbG9hdGluZyIsICJGcmFjdGlvbmFsIiwgIkZ1bmN0b3IiLCAiR1QiLAogICAgICAiSU8iLCAiSU9FcnJvciIsICJJbnQiLCAiSW50ZWdlciIsICJJbnRlZ3JhbCIsICJKdXN0IiwgIkxUIiwgIkxlZnQiLAogICAgICAiTWF5YmUiLCAiTW9uYWQiLCAiTm90aGluZyIsICJOdW0iLCAiT3JkIiwgIk9yZGVyaW5nIiwgIlJhdGlvbmFsIiwgIlJlYWQiLAogICAgICAiUmVhZFMiLCAiUmVhbCIsICJSZWFsRmxvYXQiLCAiUmVhbEZyYWMiLCAiUmlnaHQiLCAiU2hvdyIsICJTaG93UyIsCiAgICAgICJTdHJpbmciLCAiVHJ1ZSIpOwogICAgICAKICAgIHNldFR5cGUoImJ1aWx0aW4iKSgKICAgICAgImFicyIsICJhY29zIiwgImFjb3NoIiwgImFsbCIsICJhbmQiLCAiYW55IiwgImFwcGVuZEZpbGUiLCAiYXNUeXBlT2YiLAogICAgICAiYXNpbiIsICJhc2luaCIsICJhdGFuIiwgImF0YW4yIiwgImF0YW5oIiwgImJyZWFrIiwgImNhdGNoIiwgImNlaWxpbmciLAogICAgICAiY29tcGFyZSIsICJjb25jYXQiLCAiY29uY2F0TWFwIiwgImNvbnN0IiwgImNvcyIsICJjb3NoIiwgImN1cnJ5IiwKICAgICAgImN5Y2xlIiwgImRlY29kZUZsb2F0IiwgImRpdiIsICJkaXZNb2QiLCAiZHJvcCIsICJkcm9wV2hpbGUiLCAiZWl0aGVyIiwKICAgICAgImVsZW0iLCAiZW5jb2RlRmxvYXQiLCAiZW51bUZyb20iLCAiZW51bUZyb21UaGVuIiwgImVudW1Gcm9tVGhlblRvIiwKICAgICAgImVudW1Gcm9tVG8iLCAiZXJyb3IiLCAiZXZlbiIsICJleHAiLCAiZXhwb25lbnQiLCAiZmFpbCIsICJmaWx0ZXIiLAogICAgICAiZmxpcCIsICJmbG9hdERpZ2l0cyIsICJmbG9hdFJhZGl4IiwgImZsb2F0UmFuZ2UiLCAiZmxvb3IiLCAiZm1hcCIsCiAgICAgICJmb2xkbCIsICJmb2xkbDEiLCAiZm9sZHIiLCAiZm9sZHIxIiwgImZyb21FbnVtIiwgImZyb21JbnRlZ2VyIiwKICAgICAgImZyb21JbnRlZ3JhbCIsICJmcm9tUmF0aW9uYWwiLCAiZnN0IiwgImdjZCIsICJnZXRDaGFyIiwgImdldENvbnRlbnRzIiwKICAgICAgImdldExpbmUiLCAiaGVhZCIsICJpZCIsICJpbml0IiwgImludGVyYWN0IiwgImlvRXJyb3IiLCAiaXNEZW5vcm1hbGl6ZWQiLAogICAgICAiaXNJRUVFIiwgImlzSW5maW5pdGUiLCAiaXNOYU4iLCAiaXNOZWdhdGl2ZVplcm8iLCAiaXRlcmF0ZSIsICJsYXN0IiwKICAgICAgImxjbSIsICJsZW5ndGgiLCAibGV4IiwgImxpbmVzIiwgImxvZyIsICJsb2dCYXNlIiwgImxvb2t1cCIsICJtYXAiLAogICAgICAibWFwTSIsICJtYXBNXyIsICJtYXgiLCAibWF4Qm91bmQiLCAibWF4aW11bSIsICJtYXliZSIsICJtaW4iLCAibWluQm91bmQiLAogICAgICAibWluaW11bSIsICJtb2QiLCAibmVnYXRlIiwgIm5vdCIsICJub3RFbGVtIiwgIm51bGwiLCAib2RkIiwgIm9yIiwKICAgICAgIm90aGVyd2lzZSIsICJwaSIsICJwcmVkIiwgInByaW50IiwgInByb2R1Y3QiLCAicHJvcGVyRnJhY3Rpb24iLAogICAgICAicHV0Q2hhciIsICJwdXRTdHIiLCAicHV0U3RyTG4iLCAicXVvdCIsICJxdW90UmVtIiwgInJlYWQiLCAicmVhZEZpbGUiLAogICAgICAicmVhZElPIiwgInJlYWRMaXN0IiwgInJlYWRMbiIsICJyZWFkUGFyZW4iLCAicmVhZHMiLCAicmVhZHNQcmVjIiwKICAgICAgInJlYWxUb0ZyYWMiLCAicmVjaXAiLCAicmVtIiwgInJlcGVhdCIsICJyZXBsaWNhdGUiLCAicmV0dXJuIiwgInJldmVyc2UiLAogICAgICAicm91bmQiLCAic2NhbGVGbG9hdCIsICJzY2FubCIsICJzY2FubDEiLCAic2NhbnIiLCAic2NhbnIxIiwgInNlcSIsCiAgICAgICJzZXF1ZW5jZSIsICJzZXF1ZW5jZV8iLCAic2hvdyIsICJzaG93Q2hhciIsICJzaG93TGlzdCIsICJzaG93UGFyZW4iLAogICAgICAic2hvd1N0cmluZyIsICJzaG93cyIsICJzaG93c1ByZWMiLCAic2lnbmlmaWNhbmQiLCAic2lnbnVtIiwgInNpbiIsCiAgICAgICJzaW5oIiwgInNuZCIsICJzcGFuIiwgInNwbGl0QXQiLCAic3FydCIsICJzdWJ0cmFjdCIsICJzdWNjIiwgInN1bSIsCiAgICAgICJ0YWlsIiwgInRha2UiLCAidGFrZVdoaWxlIiwgInRhbiIsICJ0YW5oIiwgInRvRW51bSIsICJ0b0ludGVnZXIiLAogICAgICAidG9SYXRpb25hbCIsICJ0cnVuY2F0ZSIsICJ1bmN1cnJ5IiwgInVuZGVmaW5lZCIsICJ1bmxpbmVzIiwgInVudGlsIiwKICAgICAgInVud29yZHMiLCAidW56aXAiLCAidW56aXAzIiwgInVzZXJFcnJvciIsICJ3b3JkcyIsICJ3cml0ZUZpbGUiLCAiemlwIiwKICAgICAgInppcDMiLCAiemlwV2l0aCIsICJ6aXBXaXRoMyIpOwogICAgICAKICAgIHJldHVybiB3a3c7CiAgfSkoKTsKICAgIAogIAogIAogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSAgeyByZXR1cm4geyBmOiBub3JtYWwgfTsgfSwKICAgIGNvcHlTdGF0ZTogIGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IGY6IHMuZiB9OyB9LAogICAgCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgdCA9IHN0YXRlLmYoc3RyZWFtLCBmdW5jdGlvbihzKSB7IHN0YXRlLmYgPSBzOyB9KTsKICAgICAgdmFyIHcgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICByZXR1cm4gKHcgaW4gd2VsbEtub3duV29yZHMpID8gd2VsbEtub3duV29yZHNbd10gOiB0OwogICAgfQogIH07Cgp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWhhc2tlbGwiLCAiaGFza2VsbCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhhc2tlbGwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imhhc2tlbGwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogSGFza2VsbCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cm1vZHVsZSBVbmlxdWVQZXJtcyAoCiAgICB1bmlxdWVQZXJtcwogICAgKQp3aGVyZQoKLS0gfCBGaW5kIGFsbCB1bmlxdWUgcGVybXV0YXRpb25zIG9mIGEgbGlzdCB3aGVyZSB0aGVyZSBtaWdodCBiZSBkdXBsaWNhdGVzLgp1bmlxdWVQZXJtcyA6OiAoRXEgYSkgPT4gW2FdIC0+IFtbYV1dCnVuaXF1ZVBlcm1zID0gcGVybUJhZyAuIG1ha2VCYWcKCi0tIHwgQW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gd2hlcmUgZHVwbGljYXRlIHZhbHVlcyBhcmUgYWxsb3dlZCwKLS0gYnV0IHJlcHJlc2VudGVkIHdpdGggYSBzaW5nbGUgdmFsdWUgYW5kIGEgY291bnQuCnR5cGUgQmFnIGEgPSBbKGEsIEludCldCgptYWtlQmFnIDo6IChFcSBhKSA9PiBbYV0gLT4gQmFnIGEKbWFrZUJhZyBbXSA9IFtdCm1ha2VCYWcgKGE6YXMpID0gbWl4IGEgJCBtYWtlQmFnIGFzCiAgd2hlcmUKICAgIG1peCBhIFtdICAgICAgICAgICAgICAgICAgICAgICAgPSBbKGEsMSldCiAgICBtaXggYSAoYm5AKGIsbik6YnMpIHwgYSA9PSBiICAgID0gKGIsbisxKTpicwogICAgICAgICAgICAgICAgICAgICAgICB8IG90aGVyd2lzZSA9IGJuIDogbWl4IGEgYnMKCnBlcm1CYWcgOjogQmFnIGEgLT4gW1thXV0KcGVybUJhZyBbXSA9IFtbXV0KcGVybUJhZyBicyA9IGNvbmNhdE1hcCAoXChmLGNzKSAtPiBtYXAgKGY6KSAkIHBlcm1CYWcgY3MpIC4gb25lT2ZFYWNoICQgYnMKICB3aGVyZQogICAgb25lT2ZFYWNoIFtdID0gW10KICAgIG9uZU9mRWFjaCAoYW5AKGEsbik6YnMpID0KICAgICAgICBsZXQgYnMnID0gaWYgbiA9PSAxIHRoZW4gYnMgZWxzZSAoYSxuLTEpOmJzCiAgICAgICAgaW4gKGEsYnMnKSA6IG1hcFNuZCAoYW46KSAob25lT2ZFYWNoIGJzKQogICAgCiAgICBhcFNuZCBmIChhLGIpID0gKGEsIGYgYikKICAgIG1hcFNuZCA9IG1hcCAuIGFwU25kCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogImVsZWdhbnQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1oYXNrZWxsPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/htmlembedded.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sZW1iZWRkZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIAogIC8vY29uZmlnIHNldHRpbmdzCiAgdmFyIHNjcmlwdFN0YXJ0UmVnZXggPSBwYXJzZXJDb25maWcuc2NyaXB0U3RhcnRSZWdleCB8fCAvXjwlL2ksCiAgICAgIHNjcmlwdEVuZFJlZ2V4ID0gcGFyc2VyQ29uZmlnLnNjcmlwdEVuZFJlZ2V4IHx8IC9eJT4vaTsKICAKICAvL2lubmVyIG1vZGVzCiAgdmFyIHNjcmlwdGluZ01vZGUsIGh0bWxNaXhlZE1vZGU7CiAgCiAgLy90b2tlbml6ZXIgd2hlbiBpbiBodG1sIG1vZGUKICBmdW5jdGlvbiBodG1sRGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHNjcmlwdFN0YXJ0UmVnZXgsIGZhbHNlKSkgewogICAgICAgICAgc3RhdGUudG9rZW49c2NyaXB0aW5nRGlzcGF0Y2g7CiAgICAgICAgICByZXR1cm4gc2NyaXB0aW5nTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLnNjcmlwdFN0YXRlKTsKICAgICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGh0bWxNaXhlZE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwogICAgfQoKICAvL3Rva2VuaXplciB3aGVuIGluIHNjcmlwdGluZyBtb2RlCiAgZnVuY3Rpb24gc2NyaXB0aW5nRGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHNjcmlwdEVuZFJlZ2V4LCBmYWxzZSkpICB7CiAgICAgICAgICBzdGF0ZS50b2tlbj1odG1sRGlzcGF0Y2g7CiAgICAgICAgICByZXR1cm4gaHRtbE1peGVkTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHNjcmlwdGluZ01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5zY3JpcHRTdGF0ZSk7CiAgICAgICAgIH0KCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgc2NyaXB0aW5nTW9kZSA9IHNjcmlwdGluZ01vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLnNjcmlwdGluZ01vZGVTcGVjKTsKICAgICAgaHRtbE1peGVkTW9kZSA9IGh0bWxNaXhlZE1vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImh0bWxtaXhlZCIpOwogICAgICByZXR1cm4geyAKICAgICAgICAgIHRva2VuIDogIHBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBzY3JpcHRpbmdEaXNwYXRjaCA6IGh0bWxEaXNwYXRjaCwKICAgICAgICAgIGh0bWxTdGF0ZSA6IGh0bWxNaXhlZE1vZGUuc3RhcnRTdGF0ZSgpLAogICAgICAgICAgc2NyaXB0U3RhdGUgOiBzY3JpcHRpbmdNb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgfQogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW4gPT0gaHRtbERpc3BhdGNoKQogICAgICAgIHJldHVybiBodG1sTWl4ZWRNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsIHRleHRBZnRlcik7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gc2NyaXB0aW5nTW9kZS5pbmRlbnQoc3RhdGUuc2NyaXB0U3RhdGUsIHRleHRBZnRlcik7CiAgICB9LAogICAgCiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgIHJldHVybiB7CiAgICAgICB0b2tlbiA6IHN0YXRlLnRva2VuLAogICAgICAgaHRtbFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1peGVkTW9kZSwgc3RhdGUuaHRtbFN0YXRlKSwKICAgICAgIHNjcmlwdFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUoc2NyaXB0aW5nTW9kZSwgc3RhdGUuc2NyaXB0U3RhdGUpCiAgICAgICB9CiAgICB9LAogICAgCgogICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgfQp9LCAiaHRtbG1peGVkIik7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3gtZWpzIiwgeyBuYW1lOiAiaHRtbGVtYmVkZGVkIiwgc2NyaXB0aW5nTW9kZVNwZWM6ImphdmFzY3JpcHQifSk7CkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1hc3B4IiwgeyBuYW1lOiAiaHRtbGVtYmVkZGVkIiwgc2NyaXB0aW5nTW9kZVNwZWM6InRleHQveC1jc2hhcnAifSk7CkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1qc3AiLCB7IG5hbWU6ICJodG1sZW1iZWRkZWQiLCBzY3JpcHRpbmdNb2RlU3BlYzoidGV4dC94LWphdmEifSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEh0bWwgRW1iZWRkZWQgU2NyaXB0cyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodG1sZW1iZWRkZWQuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEh0bWwgRW1iZWRkZWQgU2NyaXB0cyBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CjwlCmZ1bmN0aW9uIGhlbGxvKHdobykgewoJcmV0dXJuICJIZWxsbyAiICsgd2hvOwp9CiU+ClRoaXMgaXMgYW4gZXhhbXBsZSBvZiBFSlMgKGVtYmVkZGVkIGphdmFzY3JpcHQpCjxwPlRoZSBwcm9ncmFtIHNheXMgPCU9IGhlbGxvKCJ3b3JsZCIpICU+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIG5vcm1hbCBKUyBjb2RlIik7IC8vIGFsc28gY29sb3JlZAo8L3NjcmlwdD4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJhcHBsaWNhdGlvbi94LWVqcyIsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBpbmRlbnRXaXRoVGFiczogdHJ1ZSwKICAgICAgICBlbnRlck1vZGU6ICJrZWVwIiwKICAgICAgICB0YWJNb2RlOiAic2hpZnQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+TW9kZSBmb3IgaHRtbCBlbWJlZGRlZCBzY3JpcHRzIGxpa2UgSlNQIGFuZCBBU1AuTkVULiBEZXBlbmRzIG9uIEh0bWxNaXhlZCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24KICAgIEphdmFTY3JpcHQsIENTUyBhbmQgWE1MLjxiciAvPk90aGVyIGRlcGVuZGFuY2llcyBpbmNsdWRlIHRob3NlIG9mIHRoZSBzY3JpcGluZyBsYW5ndWFnZSBjaG9zZW4uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94LWFzcHg8L2NvZGU+IChBU1AuTkVUKSwgCiAgICA8Y29kZT5hcHBsaWNhdGlvbi94LWVqczwvY29kZT4gKEVtYmVkZGVkIEphdmFzY3JpcHQpLCA8Y29kZT5hcHBsaWNhdGlvbi94LWpzcDwvY29kZT4gKEphdmFTZXJ2ZXIgUGFnZXMpPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/htmlmixed.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICB2YXIganNNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImphdmFzY3JpcHQiKTsKICB2YXIgY3NzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJjc3MiKTsKCiAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICBpZiAoc3R5bGUgPT0gInRhZyIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQpIHsKICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiA9IGphdmFzY3JpcHQ7CiAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9ICJqYXZhc2NyaXB0IjsKICAgICAgfQogICAgICBlbHNlIGlmICgvXnN0eWxlJC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiA9IGNzczsKICAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gY3NzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9ICJjc3MiOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3R5bGU7CiAgfQogIGZ1bmN0aW9uIG1heWJlQmFja3VwKHN0cmVhbSwgcGF0LCBzdHlsZSkgewogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICB2YXIgY2xvc2UgPSBjdXIuc2VhcmNoKHBhdCk7CiAgICBpZiAoY2xvc2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gY2xvc2UpOwogICAgcmV0dXJuIHN0eWxlOwogIH0KICBmdW5jdGlvbiBqYXZhc2NyaXB0KHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0ubWF0Y2goL148XC9ccypzY3JpcHRccyo+L2ksIGZhbHNlKSkgewogICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7CiAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBudWxsOwogICAgICBzdGF0ZS5tb2RlID0gImh0bWwiOwogICAgICByZXR1cm4gaHRtbChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzY3JpcHRccyo+LywKICAgICAgICAgICAgICAgICAgICAgICBqc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKSk7CiAgfQogIGZ1bmN0aW9uIGNzcyhzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFwvXHMqc3R5bGVccyo+L2ksIGZhbHNlKSkgewogICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7CiAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBudWxsOwogICAgICBzdGF0ZS5tb2RlID0gImh0bWwiOwogICAgICByZXR1cm4gaHRtbChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzdHlsZVxzKj4vLAogICAgICAgICAgICAgICAgICAgICAgIGNzc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKSk7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzdGF0ZSA9IGh0bWxNb2RlLnN0YXJ0U3RhdGUoKTsKICAgICAgcmV0dXJuIHt0b2tlbjogaHRtbCwgbG9jYWxTdGF0ZTogbnVsbCwgbW9kZTogImh0bWwiLCBodG1sU3RhdGU6IHN0YXRlfTsKICAgIH0sCgogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICBpZiAoc3RhdGUubG9jYWxTdGF0ZSkKICAgICAgICB2YXIgbG9jYWwgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS50b2tlbiA9PSBjc3MgPyBjc3NNb2RlIDoganNNb2RlLCBzdGF0ZS5sb2NhbFN0YXRlKTsKICAgICAgcmV0dXJuIHt0b2tlbjogc3RhdGUudG9rZW4sIGxvY2FsU3RhdGU6IGxvY2FsLCBtb2RlOiBzdGF0ZS5tb2RlLAogICAgICAgICAgICAgIGh0bWxTdGF0ZTogQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIHN0YXRlLmh0bWxTdGF0ZSl9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW4gPT0gaHRtbCB8fCAvXlxzKjxcLy8udGVzdCh0ZXh0QWZ0ZXIpKQogICAgICAgIHJldHVybiBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbFN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PSBqYXZhc2NyaXB0KQogICAgICAgIHJldHVybiBqc01vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlcik7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gY3NzTW9kZS5pbmRlbnQoc3RhdGUubG9jYWxTdGF0ZSwgdGV4dEFmdGVyKTsKICAgIH0sCgogICAgY29tcGFyZVN0YXRlczogZnVuY3Rpb24oYSwgYikgewogICAgICBpZiAoYS5tb2RlICE9IGIubW9kZSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoYS5sb2NhbFN0YXRlKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwogICAgICByZXR1cm4gaHRtbE1vZGUuY29tcGFyZVN0YXRlcyhhLmh0bWxTdGF0ZSwgYi5odG1sU3RhdGUpOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAiL3t9OiIKICB9Cn0sICJ4bWwiLCAiamF2YXNjcmlwdCIsICJjc3MiKTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwgImh0bWxtaXhlZCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhUTUwgbWl4ZWQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEhUTUwgbWl4ZWQgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIj4KICA8IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tPgogIDxoZWFkPgogICAgPHRpdGxlPk1peGVkIEhUTUwgRXhhbXBsZTwvdGl0bGU+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICBoMSB7Zm9udC1mYW1pbHk6IGNvbWljIHNhbnM7IGNvbG9yOiAjZjBmO30KICAgICAgZGl2IHtiYWNrZ3JvdW5kOiB5ZWxsb3cgIWltcG9ydGFudDt9CiAgICAgIGJvZHkgewogICAgICAgIG1heC13aWR0aDogNTBlbTsKICAgICAgICBtYXJnaW46IDFlbSAyZW0gMWVtIDVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+TWl4ZWQgSFRNTCBFeGFtcGxlPC9oMT4KICAgIDxzY3JpcHQ+CiAgICAgIGZ1bmN0aW9uIGpzRnVuYyhhcmcxLCBhcmcyKSB7CiAgICAgICAgaWYgKGFyZzEgJiYgYXJnMikgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiYWNob28iOwogICAgICB9CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6ICJ0ZXh0L2h0bWwiLCB0YWJNb2RlOiAiaW5kZW50In0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+VGhlIEhUTUwgbWl4ZWQgbW9kZSBkZXBlbmRzIG9uIHRoZSBYTUwsIEphdmFTY3JpcHQsIGFuZCBDU1MgbW9kZXMuPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+CiAgICAocmVkZWZpbmVkLCBvbmx5IHRha2VzIGVmZmVjdCBpZiB5b3UgbG9hZCB0aGlzIHBhcnNlciBhZnRlciB0aGUKICAgIFhNTCBwYXJzZXIpLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEphdmFTY3JpcHQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImphdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEphdmFTY3JpcHQgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZSAodGhlIGFjdHVhbCBuZXcgcGFyc2VyIGNoYXJhY3RlciBzdHJlYW0gaW1wbGVtZW50YXRpb24pCgpmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyaW5nKSB7CiAgdGhpcy5wb3MgPSAwOwogIHRoaXMuc3RyaW5nID0gc3RyaW5nOwp9CgpTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogIGRvbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTt9LAogIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMucG9zICZsdDsgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogIH0sCiAgZWF0OiBmdW5jdGlvbihtYXRjaCkgewogICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgZWxzZSB2YXIgb2sgPSBjaCAmYW1wOyZhbXA7IG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKTsKICAgIGlmIChvaykge3RoaXMucG9zKys7IHJldHVybiBjaDt9CiAgfSwKICBlYXRXaGlsZTogZnVuY3Rpb24obWF0Y2gpIHsKICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSk7CiAgICBpZiAodGhpcy5wb3MgPiBzdGFydCkgcmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHN0YXJ0LCB0aGlzLnBvcyk7CiAgfSwKICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgY29sdW1uOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3M7fSwKICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgIHdoaWxlICgvXHMvLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHRoaXMucG9zKys7CiAgICByZXR1cm4gdGhpcy5wb3MgLSBzdGFydDsKICB9LAogIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICBpZiAoY2FzZWQodGhpcy5zdHJpbmcpLmluZGV4T2YoY2FzZWQocGF0dGVybiksIHRoaXMucG9zKSA9PSB0aGlzLnBvcykgewogICAgICAgIGlmIChjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gc3RyLmxlbmd0aDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgaWYgKG1hdGNoICZhbXA7JmFtcDsgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgcmV0dXJuIG1hdGNoOwogICAgfQogIH0KfTsKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5KYXZhU2NyaXB0IG1vZGUgc3VwcG9ydHMgYSBzaW5nbGUgY29uZmlndXJhdGlvbgogICAgb3B0aW9uLCA8Y29kZT5qc29uPC9jb2RlPiwgd2hpY2ggd2lsbCBzZXQgdGhlIG1vZGUgdG8gZXhwZWN0IEpTT04KICAgIGRhdGEgcmF0aGVyIHRoYW4gYSBKYXZhU2NyaXB0IHByb2dyYW0uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2phdmFzY3JpcHQ8L2NvZGU+LCA8Y29kZT5hcHBsaWNhdGlvbi9qc29uPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uOwoKICAvLyBUb2tlbml6ZXIKCiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXsKICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAia2V5d29yZCJ9O30KICAgIHZhciBBID0ga3coImtleXdvcmQgYSIpLCBCID0ga3coImtleXdvcmQgYiIpLCBDID0ga3coImtleXdvcmQgYyIpOwogICAgdmFyIG9wZXJhdG9yID0ga3coIm9wZXJhdG9yIiksIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifTsKICAgIHJldHVybiB7CiAgICAgICJpZiI6IEEsICJ3aGlsZSI6IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBCLAogICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAogICAgICAidmFyIjoga3coInZhciIpLCAiY29uc3QiOiBrdygidmFyIiksICJsZXQiOiBrdygidmFyIiksCiAgICAgICJmdW5jdGlvbiI6IGt3KCJmdW5jdGlvbiIpLCAiY2F0Y2giOiBrdygiY2F0Y2giKSwKICAgICAgImZvciI6IGt3KCJmb3IiKSwgInN3aXRjaCI6IGt3KCJzd2l0Y2giKSwgImNhc2UiOiBrdygiY2FzZSIpLCAiZGVmYXVsdCI6IGt3KCJkZWZhdWx0IiksCiAgICAgICJpbiI6IG9wZXJhdG9yLCAidHlwZW9mIjogb3BlcmF0b3IsICJpbnN0YW5jZW9mIjogb3BlcmF0b3IsCiAgICAgICJ0cnVlIjogYXRvbSwgImZhbHNlIjogYXRvbSwgIm51bGwiOiBhdG9tLCAidW5kZWZpbmVkIjogYXRvbSwgIk5hTiI6IGF0b20sICJJbmZpbml0eSI6IGF0b20KICAgIH07CiAgfSgpOwoKICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fF0vOwoKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sIGVuZCkgewogICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dDsKICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgaWYgKG5leHQgPT0gZW5kICYmICFlc2NhcGVkKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgIH0KICAgIHJldHVybiBlc2NhcGVkOwogIH0KCiAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlcyB0byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dAogIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgogIHZhciB0eXBlLCBjb250ZW50OwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUsIGNvbnQpIHsKICAgIHR5cGUgPSB0cDsgY29udGVudCA9IGNvbnQ7CiAgICByZXR1cm4gc3R5bGU7CiAgfQoKICBmdW5jdGlvbiBqc1Rva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuU3RyaW5nKGNoKSk7CiAgICBlbHNlIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkKICAgICAgcmV0dXJuIHJldChjaCk7CiAgICBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFtLmVhdCgveC9pKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcZGEtZl0vaSk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKICAgIH0gICAgICAKICAgIGVsc2UgaWYgKC9cZC8udGVzdChjaCkgfHwgY2ggPT0gIi0iICYmIHN0cmVhbS5lYXQoL1xkLykpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXGQqKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy8pOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuQ29tbWVudCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLnJlQWxsb3dlZCkgewogICAgICAgIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3kiIG9wdGlvbiBpbiBNb3ppbGxhCiAgICAgICAgcmV0dXJuIHJldCgicmVnZXhwIiwgInN0cmluZy0yIik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsIG51bGwsIHN0cmVhbS5jdXJyZW50KCkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiIyIpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIHJldCgiZXJyb3IiLCAiZXJyb3IiKTsKICAgIH0KICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgbnVsbCwgc3RyZWFtLmN1cnJlbnQoKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSAmJiBrZXl3b3Jkc1t3b3JkXTsKICAgICAgcmV0dXJuIChrbm93biAmJiBzdGF0ZS5rd0FsbG93ZWQpID8gcmV0KGtub3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKSA6CiAgICAgICAgICAgICAgICAgICAgIHJldCgidmFyaWFibGUiLCAidmFyaWFibGUiLCB3b3JkKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGpzVG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmICghbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgcXVvdGUpKQogICAgICAgIHN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBqc1Rva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICB9CiAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKICB9CgogIC8vIFBhcnNlcgoKICB2YXIgYXRvbWljVHlwZXMgPSB7ImF0b20iOiB0cnVlLCAibnVtYmVyIjogdHJ1ZSwgInZhcmlhYmxlIjogdHJ1ZSwgInN0cmluZyI6IHRydWUsICJyZWdleHAiOiB0cnVlfTsKCiAgZnVuY3Rpb24gSlNMZXhpY2FsKGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2LCBpbmZvKSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLnByZXYgPSBwcmV2OwogICAgdGhpcy5pbmZvID0gaW5mbzsKICAgIGlmIChhbGlnbiAhPSBudWxsKSB0aGlzLmFsaWduID0gYWxpZ247CiAgfQoKICBmdW5jdGlvbiBpblNjb3BlKHN0YXRlLCB2YXJuYW1lKSB7CiAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KQogICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSkgewogICAgdmFyIGNjID0gc3RhdGUuY2M7CiAgICAvLyBDb21tdW5pY2F0ZSBvdXIgY29udGV4dCB0byB0aGUgY29tYmluYXRvcnMuCiAgICAvLyAoTGVzcyB3YXN0ZWZ1bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1cmVzIG9uIGV2ZXJ5IGNhbGwuKQogICAgY3guc3RhdGUgPSBzdGF0ZTsgY3guc3RyZWFtID0gc3RyZWFtOyBjeC5tYXJrZWQgPSBudWxsLCBjeC5jYyA9IGNjOwogIAogICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICBzdGF0ZS5sZXhpY2FsLmFsaWduID0gdHJ1ZTsKCiAgICB3aGlsZSh0cnVlKSB7CiAgICAgIHZhciBjb21iaW5hdG9yID0gY2MubGVuZ3RoID8gY2MucG9wKCkgOiBqc29uTW9kZSA/IGV4cHJlc3Npb24gOiBzdGF0ZW1lbnQ7CiAgICAgIGlmIChjb21iaW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7CiAgICAgICAgd2hpbGUoY2MubGVuZ3RoICYmIGNjW2NjLmxlbmd0aCAtIDFdLmxleCkKICAgICAgICAgIGNjLnBvcCgpKCk7CiAgICAgICAgaWYgKGN4Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDsKICAgICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiICYmIGluU2NvcGUoc3RhdGUsIGNvbnRlbnQpKSByZXR1cm4gInZhcmlhYmxlLTIiOwogICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gQ29tYmluYXRvciB1dGlscwoKICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIGNvbHVtbjogbnVsbCwgbWFya2VkOiBudWxsLCBjYzogbnVsbH07CiAgZnVuY3Rpb24gcGFzcygpIHsKICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTsKICB9CiAgZnVuY3Rpb24gY29udCgpIHsKICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIHJldHVybiB0cnVlOwogIH0KICBmdW5jdGlvbiByZWdpc3Rlcih2YXJuYW1lKSB7CiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7CiAgICAgIGN4Lm1hcmtlZCA9ICJkZWYiOwogICAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KQogICAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuOwogICAgICBzdGF0ZS5sb2NhbFZhcnMgPSB7bmFtZTogdmFybmFtZSwgbmV4dDogc3RhdGUubG9jYWxWYXJzfTsKICAgIH0KICB9CgogIC8vIENvbWJpbmF0b3JzCgogIHZhciBkZWZhdWx0VmFycyA9IHtuYW1lOiAidGhpcyIsIG5leHQ6IHtuYW1lOiAiYXJndW1lbnRzIn19OwogIGZ1bmN0aW9uIHB1c2hjb250ZXh0KCkgewogICAgaWYgKCFjeC5zdGF0ZS5jb250ZXh0KSBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBkZWZhdWx0VmFyczsKICAgIGN4LnN0YXRlLmNvbnRleHQgPSB7cHJldjogY3guc3RhdGUuY29udGV4dCwgdmFyczogY3guc3RhdGUubG9jYWxWYXJzfTsKICB9CiAgZnVuY3Rpb24gcG9wY29udGV4dCgpIHsKICAgIGN4LnN0YXRlLmxvY2FsVmFycyA9IGN4LnN0YXRlLmNvbnRleHQudmFyczsKICAgIGN4LnN0YXRlLmNvbnRleHQgPSBjeC5zdGF0ZS5jb250ZXh0LnByZXY7CiAgfQogIGZ1bmN0aW9uIHB1c2hsZXgodHlwZSwgaW5mbykgewogICAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgICAgc3RhdGUubGV4aWNhbCA9IG5ldyBKU0xleGljYWwoc3RhdGUuaW5kZW50ZWQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4aWNhbCwgaW5mbykKICAgIH07CiAgICByZXN1bHQubGV4ID0gdHJ1ZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvcGxleCgpIHsKICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgaWYgKHN0YXRlLmxleGljYWwucHJldikgewogICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICIpIikKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7CiAgICAgIHN0YXRlLmxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLnByZXY7CiAgICB9CiAgfQogIHBvcGxleC5sZXggPSB0cnVlOwoKICBmdW5jdGlvbiBleHBlY3Qod2FudGVkKSB7CiAgICByZXR1cm4gZnVuY3Rpb24gZXhwZWN0aW5nKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gd2FudGVkKSByZXR1cm4gY29udCgpOwogICAgICBlbHNlIGlmICh3YW50ZWQgPT0gIjsiKSByZXR1cm4gcGFzcygpOwogICAgICBlbHNlIHJldHVybiBjb250KGFyZ3VtZW50cy5jYWxsZWUpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHN0YXRlbWVudCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0dXJuIGNvbnQocHVzaGxleCgidmFyZGVmIiksIHZhcmRlZjEsIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwogICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwZWN0KCIoIiksIHB1c2hsZXgoIikiKSwgZm9yc3BlYzEsIGV4cGVjdCgiKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQocHVzaGxleCgic3RhdCIpLCBtYXliZWxhYmVsKTsKICAgIGlmICh0eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAiY2FzZSIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgiOiIpKTsKICAgIGlmICh0eXBlID09ICJkZWZhdWx0IikgcmV0dXJuIGNvbnQoZXhwZWN0KCI6IikpOwogICAgaWYgKHR5cGUgPT0gImNhdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBwdXNoY29udGV4dCwgZXhwZWN0KCIoIiksIGZ1bmFyZywgZXhwZWN0KCIpIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHBvcGxleCwgcG9wY29udGV4dCk7CiAgICByZXR1cm4gcGFzcyhwdXNobGV4KCJzdGF0IiksIGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogIH0KICBmdW5jdGlvbiBleHByZXNzaW9uKHR5cGUpIHsKICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7CiAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0dXJuIGNvbnQobWF5YmVleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBtYXliZWV4cHJlc3Npb24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgY29tbWFzZXAoZXhwcmVzc2lvbiwgIl0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21tYXNlcChvYmpwcm9wLCAifSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxdLykpIHJldHVybiBwYXNzKCk7CiAgICByZXR1cm4gcGFzcyhleHByZXNzaW9uKTsKICB9CiAgICAKICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiICYmIC9cK1wrfC0tLy50ZXN0KHZhbHVlKSkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiIHx8IHR5cGUgPT0gIjoiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuOwogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGNvbW1hc2VwKGV4cHJlc3Npb24sICIpIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAiLiIpIHJldHVybiBjb250KHByb3BlcnR5LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBleHByZXNzaW9uLCBleHBlY3QoIl0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVsYWJlbCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KHBvcGxleCwgc3RhdGVtZW50KTsKICAgIHJldHVybiBwYXNzKG1heWJlb3BlcmF0b3IsIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogIH0KICBmdW5jdGlvbiBwcm9wZXJ0eSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7Y3gubWFya2VkID0gInByb3BlcnR5IjsgcmV0dXJuIGNvbnQoKTt9CiAgfQogIGZ1bmN0aW9uIG9ianByb3AodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgY3gubWFya2VkID0gInByb3BlcnR5IjsKICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQoZXhwZWN0KCI6IiksIGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBjb21tYXNlcCh3aGF0LCBlbmQpIHsKICAgIGZ1bmN0aW9uIHByb2NlZWQodHlwZSkgewogICAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHdoYXQsIHByb2NlZWQpOwogICAgICBpZiAodHlwZSA9PSBlbmQpIHJldHVybiBjb250KCk7CiAgICAgIHJldHVybiBjb250KGV4cGVjdChlbmQpKTsKICAgIH0KICAgIHJldHVybiBmdW5jdGlvbiBjb21tYVNlcGFyYXRlZCh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgZWxzZSByZXR1cm4gcGFzcyh3aGF0LCBwcm9jZWVkKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIGNvbnQoKTsKICAgIHJldHVybiBwYXNzKHN0YXRlbWVudCwgYmxvY2spOwogIH0KICBmdW5jdGlvbiB2YXJkZWYxKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKXtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KHZhcmRlZjIpO30KICAgIHJldHVybiBjb250KCk7CiAgfQogIGZ1bmN0aW9uIHZhcmRlZjIodHlwZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIHZhcmRlZjIpOwogICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udCh2YXJkZWYxKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHZhcmRlZjEsIGZvcnNwZWMyKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIHBhc3MoZm9yc3BlYzIpOwogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQoZm9ybWF5YmVpbik7CiAgICByZXR1cm4gcGFzcyhmb3JzcGVjMik7CiAgfQogIGZ1bmN0aW9uIGZvcm1heWJlaW4odHlwZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAiaW4iKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIHJldHVybiBjb250KG1heWJlb3BlcmF0b3IsIGZvcnNwZWMyKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzIodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoZm9yc3BlYzMpOwogICAgaWYgKHZhbHVlID09ICJpbiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI7IiksIGZvcnNwZWMzKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzModHlwZSkgewogICAgaWYgKHR5cGUgIT0gIikiKSBjb250KGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO30KICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBwdXNoY29udGV4dCwgY29tbWFzZXAoZnVuYXJnLCAiKSIpLCBwb3BsZXgsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIGZ1bmFyZyh0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoKTt9CiAgfQoKICAvLyBJbnRlcmZhY2UKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZToganNUb2tlbkJhc2UsCiAgICAgICAgcmVBbGxvd2VkOiB0cnVlLAogICAgICAgIGt3QWxsb3dlZDogdHJ1ZSwKICAgICAgICBjYzogW10sCiAgICAgICAgbGV4aWNhbDogbmV3IEpTTGV4aWNhbCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJibG9jayIsIGZhbHNlKSwKICAgICAgICBsb2NhbFZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMsCiAgICAgICAgY29udGV4dDogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyAmJiB7dmFyczogcGFyc2VyQ29uZmlnLmxvY2FsVmFyc30sCiAgICAgICAgaW5kZW50ZWQ6IDAKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmICghc3RhdGUubGV4aWNhbC5oYXNPd25Qcm9wZXJ0eSgiYWxpZ24iKSkKICAgICAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSBmYWxzZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAodHlwZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgc3RhdGUucmVBbGxvd2VkID0gISEodHlwZSA9PSAib3BlcmF0b3IiIHx8IHR5cGUgPT0gImtleXdvcmQgYyIgfHwgdHlwZS5tYXRjaCgvXltcW3t9XCgsOzpdJC8pKTsKICAgICAgc3RhdGUua3dBbGxvd2VkID0gdHlwZSAhPSAnLic7CiAgICAgIHJldHVybiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFtKTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBqc1Rva2VuQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWw7CiAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0gInN0YXQiICYmIGZpcnN0Q2hhciA9PSAifSIpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7CiAgICAgIHZhciB0eXBlID0gbGV4aWNhbC50eXBlLCBjbG9zaW5nID0gZmlyc3RDaGFyID09IHR5cGU7CiAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIDQ7CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkOwogICAgICBlbHNlIGlmICh0eXBlID09ICJzdGF0IiB8fCB0eXBlID09ICJmb3JtIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0OwogICAgICBlbHNlIGlmIChsZXhpY2FsLmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcpCiAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoL14oPzpjYXNlfGRlZmF1bHQpXGIvLnRlc3QodGV4dEFmdGVyKSA/IGluZGVudFVuaXQgOiAyICogaW5kZW50VW5pdCk7CiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICI6e30iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vanNvbiIsIHtuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEppbmphMiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iamluamEyLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBKaW5qYTIgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0ppbmphMiBFeGFtcGxlJmx0Oy90aXRsZSZndDsKICAmbHQ7L2hlYWQmZ3Q7CiAgJmx0O2JvZHkmZ3Q7CiAgICAmbHQ7dWwmZ3Q7CiAgICB7IyB0aGlzIGlzIGEgY29tbWVudCAjfQogICAgeyUtIGZvciBpdGVtIGluIGxpIC0lfQogICAgICAmbHQ7bGkmZ3Q7CiAgICAgICAge3sgaXRlbS5sYWJlbCB9fQogICAgICAmbHQ7L2xpJmd0OwogICAgeyUgZW5kZm9yIC0lfQogICAgJmx0Oy91bCZndDsKICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6CiAgICAgICAge25hbWU6ICJqaW5qYTIiLCBodG1sTW9kZTogdHJ1ZX19KTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/jinja2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqaW5qYTIiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmYpIHsKICAgIHZhciBrZXl3b3JkcyA9IFsiYmxvY2siLCAiZW5kYmxvY2siLCAiZm9yIiwgImVuZGZvciIsICJpbiIsICJ0cnVlIiwgImZhbHNlIiwgCiAgICAgICAgICAgICAgICAgICAgImxvb3AiLCAibm9uZSIsICJzZWxmIiwgInN1cGVyIiwgImlmIiwgImFzIiwgIm5vdCIsICJhbmQiLAogICAgICAgICAgICAgICAgICAgICJlbHNlIiwgImltcG9ydCIsICJ3aXRoIiwgIndpdGhvdXQiLCAiY29udGV4dCJdOwogICAga2V5d29yZHMgPSBuZXcgUmVnRXhwKCJeKCgiICsga2V5d29yZHMuam9pbigiKXwoIikgKyAiKSlcXGIiKTsKCiAgICBmdW5jdGlvbiB0b2tlbkJhc2UgKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAieyIpIHsKICAgICAgICAgICAgaWYgKGNoID0gc3RyZWFtLmVhdCgvXHt8JXwjLykpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoIi0iKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWcoY2gpOwogICAgICAgICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaW5UYWcgKGNsb3NlKSB7CiAgICAgICAgaWYgKGNsb3NlID09ICJ7IikgewogICAgICAgICAgICBjbG9zZSA9ICJ9IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgIGlmICgoY2ggPT0gY2xvc2UgfHwgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KGNsb3NlKSkpCiAgICAgICAgICAgICAgICAmJiBzdHJlYW0uZWF0KCJ9IikpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbG9zZSA9PSAiIyIgPyAiY29tbWVudCIgOiAic3RyaW5nIjsKICAgICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZX07CiAgICAgICAgfSwKICAgICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgIH07IAp9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IExFU1MgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imxlc3MuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBmb250LXNpemU6MTJweH0gLkNvZGVNaXJyb3Itc2Nyb2xsIHtoZWlnaHQ6IDQwMHB4fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL2xlc3Nlci1kYXJrLmNzcyI+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTEVTUyBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+LyogU29tZSBMRVNTIGNvZGUgKi8KCmJ1dHRvbiB7CiAgICB3aWR0aDogIDMycHg7CiAgICBoZWlnaHQ6IDMycHg7CiAgICBib3JkZXI6IDA7CiAgICBtYXJnaW46IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQpidXR0b24uaWNvbi1wbHVzIHsgYmFja2dyb3VuZDogdXJsKGh0dHA6Ly9kYWhsc3Ryw7ZtLm5ldC90bXAvc2hhcnAtaWNvbnMvc3ZnLWljb24tdGFyZ2V0LnN2ZyNwbHVzKSBuby1yZXBlYXQ7IH0KYnV0dG9uLmljb24tY2hhcnQgeyBiYWNrZ3JvdW5kOiB1cmwoaHR0cDovL2RhaGxzdHLDtm0ubmV0L3RtcC9zaGFycC1pY29ucy9zdmctaWNvbi10YXJnZXQuc3ZnI2NoYXJ0KSBuby1yZXBlYXQ7IH0KCmJ1dHRvbjpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6ICM5OTk7IH0KYnV0dG9uOmFjdGl2ZSB7IGJhY2tncm91bmQtY29sb3I6ICM2NjY7IH0KCkB0ZXN0X2E6ICNlZWVRUVE7Ly90aGlzIGlzIG5vdCBhIHZhbGlkIGhleCB2YWx1ZSBhbmQgdGh1cyBwYXJzZWQgYXMgYW4gZWxlbWVudCBpZApAdGVzdF9iOiAjZWVlRkZGIC8vdGhpcyBpcyBhIHZhbGlkIGhleCB2YWx1ZSBidXQgdGhlIGRlY2xhcmF0aW9uIGRvZXNuJ3QgZW5kIHdpdGggYSBzZW1pY29sb24gYW5kIHRodXMgcGFyc2VkIGFzIGFuIGVsZW1lbnQgaWQKCiNlZWUgYWFhIC5ib3gKewogICN0ZXN0IGJiYiB7CiAgICB3aWR0aDogNTAwcHg7CiAgICBoZWlnaHQ6IDI1MHB4OwogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRpci9vdXRwdXQvc2hlZXAucG5nKSwgdXJsKCBiZXR3ZWVuZ3Jhc3NhbmRza3kucG5nICk7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgYm90dG9tLCBsZWZ0IHRvcDsKICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgfQp9CgpAYmFzZTogI2Y5MzhhYjsKCi5ib3gtc2hhZG93KEBzdHlsZSwgQGMpIHdoZW4gKGlzY29sb3IoQGMpKSB7CiAgYm94LXNoYWRvdzogICAgICAgICBAc3R5bGUgQGM7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBAc3R5bGUgQGM7CiAgLW1vei1ib3gtc2hhZG93OiAgICBAc3R5bGUgQGM7Cn0KLmJveC1zaGFkb3coQHN0eWxlLCBAYWxwaGE6IDUwJSkgd2hlbiAoaXNudW1iZXIoQGFscGhhKSkgewogIC5ib3gtc2hhZG93KEBzdHlsZSwgcmdiYSgwLCAwLCAwLCBAYWxwaGEpKTsKfQoKQGNvbG9yOiAjNEQ5MjZGOwoKI2hlYWRlciB7CiAgY29sb3I6IEBjb2xvcjsKICBjb2xvcjogIzAwMDAwMDsKfQpoMiB7CiAgY29sb3I6IEBjb2xvcjsKfQoKLnJvdW5kZWQtY29ybmVycyAoQHJhZGl1czogNXB4KSB7CiAgYm9yZGVyLXJhZGl1czogQHJhZGl1czsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IEByYWRpdXM7CiAgLW1vei1ib3JkZXItcmFkaXVzOiBAcmFkaXVzOwp9CgojaGVhZGVyIHsKICAucm91bmRlZC1jb3JuZXJzOwp9CiNmb290ZXIgewogIC5yb3VuZGVkLWNvcm5lcnMoMTBweCk7Cn0KCi5ib3gtc2hhZG93IChAeDogMCwgQHk6IDAsIEBibHVyOiAxcHgsIEBhbHBoYSkgewogIEB2YWw6IEB4IEB5IEBibHVyIHJnYmEoMCwgMCwgMCwgQGFscGhhKTsKCiAgYm94LXNoYWRvdzogICAgICAgICBAdmFsOwogIC13ZWJraXQtYm94LXNoYWRvdzogQHZhbDsKICAtbW96LWJveC1zaGFkb3c6ICAgIEB2YWw7Cn0KLmJveCB7IEBiYXNlOiAjZjkzOGFiOwogIGNvbG9yOiAgICAgICAgc2F0dXJhdGUoQGJhc2UsIDUlKTsKICBib3JkZXItY29sb3I6IGxpZ2h0ZW4oQGJhc2UsIDMwJSk7CiAgZGl2IHsgLmJveC1zaGFkb3coMCwgMCwgNXB4LCAwLjQpIH0KfQoKQGltcG9ydCB1cmwoInNvbWV0aGluZy5jc3MiKTsKCkBsaWdodC1ibHVlOiAgIGhzbCgxOTAsIDUwJSwgNjUlKTsKQGxpZ2h0LXllbGxvdzogZGVzYXR1cmF0ZSgjZmVmZWM4LCAxMCUpOwpAZGFyay15ZWxsb3c6ICBkZXNhdHVyYXRlKGRhcmtlbihAbGlnaHQteWVsbG93LCAxMCUpLCA0MCUpOwpAZGFya2VzdDogICAgICBoc2woMjAsIDAlLCAxNSUpOwpAZGFyazogICAgICAgICBoc2woMTkwLCAyMCUsIDMwJSk7CkBtZWRpdW06ICAgICAgIGhzbCgxMCwgNjAlLCAzMCUpOwpAbGlnaHQ6ICAgICAgICBoc2woOTAsIDQwJSwgMjAlKTsKQGxpZ2h0ZXN0OiAgICAgaHNsKDkwLCAyMCUsIDkwJSk7CkBoaWdobGlnaHQ6ICAgIGhzbCg4MCwgNTAlLCA5MCUpOwpAYmx1ZTogICAgICAgICBoc2woMjEwLCA2MCUsIDIwJSk7CkBhbHBoYS1ibHVlOiAgIGhzbGEoMjEwLCA2MCUsIDQwJSwgMC41KTsKCi5ib3gtc2hhZG93IChAeCwgQHksIEBibHVyLCBAYWxwaGEpIHsKICBAdmFsdWU6IEB4IEB5IEBibHVyIHJnYmEoMCwgMCwgMCwgQGFscGhhKTsKICBib3gtc2hhZG93OiAgICAgICAgIEB2YWx1ZTsKICAtbW96LWJveC1zaGFkb3c6ICAgIEB2YWx1ZTsKICAtd2Via2l0LWJveC1zaGFkb3c6IEB2YWx1ZTsKfQouYm9yZGVyLXJhZGl1cyAoQHJhZGl1cykgewogIGJvcmRlci1yYWRpdXM6IEByYWRpdXM7CiAgLW1vei1ib3JkZXItcmFkaXVzOiBAcmFkaXVzOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogQHJhZGl1czsKfQoKLmJvcmRlci1yYWRpdXMgKEByYWRpdXMsIGJvdHRvbSkgewogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAtbW96LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Cn0KLmJvcmRlci1yYWRpdXMgKEByYWRpdXMsIHJpZ2h0KSB7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKICAtbW96LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKfQouYm94LXNoYWRvdy1pbnNldCAoQHgsIEB5LCBAYmx1ciwgQGNvbG9yKSB7CiAgYm94LXNoYWRvdzogQHggQHkgQGJsdXIgQGNvbG9yIGluc2V0OwogIC1tb3otYm94LXNoYWRvdzogQHggQHkgQGJsdXIgQGNvbG9yIGluc2V0OwogIC13ZWJraXQtYm94LXNoYWRvdzogQHggQHkgQGJsdXIgQGNvbG9yIGluc2V0Owp9Ci5jb2RlICgpIHsKICBmb250LWZhbWlseTogJ0JpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubycsCiAgICAgICAgICAgICAgICdEZWphVnUgU2FucyBNb25vJywKICAgICAgICAgICAgICAgJ01vbmFjbycsCiAgICAgICAgICAgICAgIENvdXJpZXIsCiAgICAgICAgICAgICAgIG1vbm9zcGFjZSAhaW1wb3J0YW50Owp9Ci53cmFwICgpIHsKICB0ZXh0LXdyYXA6IHdyYXA7CiAgd2hpdGUtc3BhY2U6IHByZS13cmFwOyAgICAgICAvKiBjc3MtMyAqLwogIHdoaXRlLXNwYWNlOiAtbW96LXByZS13cmFwOyAgLyogTW96aWxsYSwgc2luY2UgMTk5OSAqLwogIHdoaXRlLXNwYWNlOiAtcHJlLXdyYXA7ICAgICAgLyogT3BlcmEgNC02ICovCiAgd2hpdGUtc3BhY2U6IC1vLXByZS13cmFwOyAgICAvKiBPcGVyYSA3ICovCiAgd29yZC13cmFwOiBicmVhay13b3JkOyAgICAgICAvKiBJbnRlcm5ldCBFeHBsb3JlciA1LjUrICovCn0KCmh0bWwgeyBtYXJnaW46IDAgfQpib2R5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAZGFya2VzdDsKICBtYXJnaW46IDAgYXV0bzsKICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMDAlOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKfQpuYXYsIGhlYWRlciwgZm9vdGVyLCBzZWN0aW9uLCBhcnRpY2xlIHsKICBkaXNwbGF5OiBibG9jazsKfQphIHsKICBjb2xvcjogI2I4MzAwMDsKfQpoMSBhIHsKICBjb2xvcjogYmxhY2s7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CmE6aG92ZXIgewogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CmgxLCBoMiwgaDMsIGg0IHsKICBtYXJnaW46IDA7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKfQp1bCwgbGkgewogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKfQpjb2RlIHsgLmNvZGU7IH0KY29kZSB7CiAgLnN0cmluZywgLnJlZ2V4cCB7IGNvbG9yOiBAZGFyayB9CiAgLmtleXdvcmQgeyBmb250LXdlaWdodDogYm9sZCB9CiAgLmNvbW1lbnQgeyBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpIH0KICAubnVtYmVyIHsgY29sb3I6IEBibHVlIH0KICAuY2xhc3MsIC5zcGVjaWFsIHsgY29sb3I6IHJnYmEoMCwgNTAsIDEwMCwgMC44KSB9Cn0KcHJlIHsKICBwYWRkaW5nOiAwIDMwcHg7CiAgLndyYXA7Cn0KYmxvY2txdW90ZSB7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CmJvZHkgPiBmb290ZXIgewogIHRleHQtYWxpZ246IGxlZnQ7CiAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtc2l6ZTogMThweDsKICBjb2xvcjogIzg4ODsKfQoKI2xvZ28gewogIG1hcmdpbi10b3A6IDMwcHg7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTk5cHg7CiAgaGVpZ2h0OiA4MXB4OwogIGJhY2tncm91bmQ6IHVybCgvaW1hZ2VzL2xvZ28ucG5nKSBuby1yZXBlYXQ7Cn0KbmF2IHsKICBtYXJnaW4tbGVmdDogMTVweDsKfQpuYXYgYSwgI2Ryb3Bkb3duIGxpIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgY29sb3I6IHdoaXRlOwogIGxpbmUtaGVpZ2h0OiA0MnB4OwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwcHggMTVweDsKICB0ZXh0LXNoYWRvdzogLTFweCAtMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci13aWR0aDogMCAycHg7CiAgJjpob3ZlciB7CiAgICAuZGFyay1yZWQ7IAogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIH0KfQouZGFyay1yZWQgewogICAgQHJlZDogQG1lZGl1bTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIGRhcmtlbihAcmVkLCAyNSUpOwogICAgYm9yZGVyLWxlZnQtY29sb3I6IGRhcmtlbihAcmVkLCAxNSUpOwogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBkYXJrZW4oQHJlZCwgMTUlKTsKICAgIGJvcmRlci1ib3R0b206IDA7CiAgICBib3JkZXItdG9wOiAwOwogICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEByZWQsIDEwJSk7Cn0KCi5jb250ZW50IHsKICBtYXJnaW46IDAgYXV0bzsKICB3aWR0aDogOTgwcHg7Cn0KCiNtZW51IHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDEwMCU7CiAgei1pbmRleDogMzsKICBjbGVhcjogYm90aDsKICBkaXNwbGF5OiBibG9jazsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmx1ZTsKICBoZWlnaHQ6IDQycHg7CiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIGxpZ2h0ZW4oQGFscGhhLWJsdWUsIDIwJSk7CiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGRhcmtlbihAYWxwaGEtYmx1ZSwgMjUlKTsKICAuYm94LXNoYWRvdygwLCAxcHgsIDhweCwgMC42KTsKICAtbW96LWJveC1zaGFkb3c6IDAgMCAwICMwMDA7IC8vIEJlY2F1c2UgZmlyZWZveCBzdWNrcy4KCiAgJi5kb2NrZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjogaHNsYSgyMTAsIDYwJSwgNDAlLCAwLjQpOwogIH0KICAmOmhvdmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IEBibHVlOwogIH0KCiAgI2Ryb3Bkb3duIHsKICAgIG1hcmdpbjogMCAwIDAgMTE3cHg7CiAgICBwYWRkaW5nOiAwOwogICAgcGFkZGluZy10b3A6IDVweDsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICB3aWR0aDogMTkwcHg7CiAgICBib3JkZXItdG9wOiAycHggc29saWQgQG1lZGl1bTsKICAgIGNvbG9yOiBAaGlnaGxpZ2h0OwogICAgYm9yZGVyOiAycHggc29saWQgZGFya2VuKEBtZWRpdW0sIDI1JSk7CiAgICBib3JkZXItbGVmdC1jb2xvcjogZGFya2VuKEBtZWRpdW0sIDE1JSk7CiAgICBib3JkZXItcmlnaHQtY29sb3I6IGRhcmtlbihAbWVkaXVtLCAxNSUpOwogICAgYm9yZGVyLXRvcC13aWR0aDogMDsKICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbihAbWVkaXVtLCAxMCUpOwogICAgdWwgewogICAgICBwYWRkaW5nOiAwcHg7ICAKICAgIH0KICAgIGxpIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgcGFkZGluZzogMDsKICAgICAgYm9yZGVyOiAwOwogICAgICBhIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiAwcHggMTVweDsgIAogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBjb2xvcjogd2hpdGU7ICAKICAgICAgICAmOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbihAbWVkaXVtLCAxNSUpOwogICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLmJvcmRlci1yYWRpdXMoNXB4LCBib3R0b20pOwogICAgLmJveC1zaGFkb3coMCwgNnB4LCA4cHgsIDAuNSk7CiAgfQp9CgojbWFpbiB7CiAgbWFyZ2luOiAwIGF1dG87CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogQGxpZ2h0LWJsdWU7CiAgYm9yZGVyLXRvcDogOHB4IHNvbGlkIGRhcmtlbihAbGlnaHQtYmx1ZSwgNSUpOwoKICAjaW50cm8gewogICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAbGlnaHQtYmx1ZSwgMjUlKTsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXRvcDogLThweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwoKICAgIGhlaWdodDogMzgwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgZm9udC1mYW1pbHk6ICdEcm9pZCBTZXJpZicsICdHZW9yZ2lhJzsKICAgIHdpZHRoOiAzOTVweDsKICAgIHBhZGRpbmc6IDQ1cHggMjBweCAyM3B4IDMwcHg7CiAgICBib3JkZXI6IDJweCBkYXNoZWQgZGFya2VuKEBsaWdodC1ibHVlLCAxMCUpOwogICAgLmJveC1zaGFkb3coMXB4LCAwcHgsIDZweCwgMC41KTsKICAgIGJvcmRlci1ib3R0b206IDA7CiAgICBib3JkZXItdG9wOiAwOwogICAgI2Rvd25sb2FkIHsgY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXI6IDA7IGZsb2F0OiBsZWZ0OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbjogMTVweCAwIDE1cHggLTVweDsgfQogICAgI2Rvd25sb2FkIGltZyB7IGRpc3BsYXk6IGlubGluZS1ibG9ja30KICAgICNkb3dubG9hZC1pbmZvIHsKICAgICAgY29kZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OyAgCiAgICAgIH0KICAgICAgY29sb3I6IEBibHVlICsgIzMzMzsgZGlzcGxheTogaW5saW5lOyBmbG9hdDogbGVmdDsgbWFyZ2luOiAzNnB4IDAgMCAxNXB4IH0KICB9CiAgaDIgewogICAgc3BhbiB7CiAgICAgIGNvbG9yOiBAbWVkaXVtOyAgCiAgICB9CiAgICBjb2xvcjogQGJsdWU7CiAgICBtYXJnaW46IDIwcHggMDsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTsKICB9CiAgaDMgewogICAgY29sb3I6IEBibHVlOwogICAgbGluZS1oZWlnaHQ6IDEuNGVtOwogICAgbWFyZ2luOiAzMHB4IDAgMTVweCAwOwogICAgZm9udC1zaXplOiAxZW07CiAgICB0ZXh0LXNoYWRvdzogMHB4IDBweCAwcHggQGxpZ2h0ZXN0OwogICAgc3BhbiB7IGNvbG9yOiBAbWVkaXVtIH0KICB9CiAgI2V4YW1wbGUgewogICAgcCB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgY29sb3I6IEBibHVlOwogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgdGV4dC1zaGFkb3c6IDBweCAxcHggMXB4IEBsaWdodGVzdDsKICAgIH0KICAgIHByZSB7CiAgICAgIG1hcmdpbjogMDsKICAgICAgdGV4dC1zaGFkb3c6IDAgLTFweCAxcHggQGRhcmtlc3Q7CiAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUoQGRhcmtlc3QsIDglKTsKICAgICAgYm9yZGVyOiAwOwogICAgICB3aWR0aDogNDUwcHg7CiAgICAgIGNvbG9yOiBsaWdodGVuKEBsaWdodGVzdCwgMiUpOwogICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0OwogICAgICBwYWRkaW5nOiAxNXB4OwogICAgICBib3JkZXI6IDFweCBkYXNoZWQgQGxpZ2h0ZXN0OwogICAgICBsaW5lLWhlaWdodDogMTVweDsKICAgICAgLmJveC1zaGFkb3coMCwgMHB4LCAxNXB4LCAwLjUpOwogICAgICAuY29kZTsKICAgICAgLmJvcmRlci1yYWRpdXMoMnB4KTsKICAgICAgY29kZSAuYXR0cmlidXRlIHsgY29sb3I6IGhzbCg0MCwgNTAlLCA3MCUpIH0KICAgICAgY29kZSAudmFyaWFibGUgIHsgY29sb3I6IGhzbCgxMjAsIDEwJSwgNTAlKSB9CiAgICAgIGNvZGUgLmVsZW1lbnQgICB7IGNvbG9yOiBoc2woMTcwLCAyMCUsIDUwJSkgfQoKICAgICAgY29kZSAuc3RyaW5nLCAucmVnZXhwIHsgY29sb3I6IGhzbCg3NSwgNTAlLCA2NSUpIH0KICAgICAgY29kZSAuY2xhc3MgeyBjb2xvcjogaHNsKDQwLCA0MCUsIDYwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgICBjb2RlIC5pZCB7IGNvbG9yOiBoc2woNTAsIDQwJSwgNjAlKTsgZm9udC13ZWlnaHQ6IG5vcm1hbCB9CiAgICAgIGNvZGUgLmNvbW1lbnQgeyBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIH0KICAgICAgY29kZSAubnVtYmVyLCAuY29sb3IgeyBjb2xvcjogaHNsKDEwLCA0MCUsIDUwJSkgfQogICAgICBjb2RlIC5jbGFzcywgY29kZSAubWl4aW4sIC5zcGVjaWFsIHsgY29sb3I6IGhzbCgxOTAsIDIwJSwgNTAlKSB9CiAgICAgICN0aW1lIHsgY29sb3I6ICNhYWEgfQogICAgfQogICAgZmxvYXQ6IHJpZ2h0OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLXRvcDogMTVweDsKICAgIHBhZGRpbmc6IDA7CiAgICB3aWR0aDogNTAwcHg7CiAgfQp9CgoKLnBhZ2UgewogIC5jb250ZW50IHsKICAgIHdpZHRoOiA4NzBweDsKICAgIHBhZGRpbmc6IDQ1cHg7CiAgfQogIG1hcmdpbjogMCBhdXRvOwogIGZvbnQtZmFtaWx5OiAnR2VvcmdpYScsIHNlcmlmOwogIGZvbnQtc2l6ZTogMThweDsKICBsaW5lLWhlaWdodDogMjZweDsKICBwYWRkaW5nOiAwIDYwcHg7CiAgY29kZSB7CiAgICBmb250LXNpemU6IDE2cHg7ICAKICB9CiAgcHJlIHsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7CiAgICBwYWRkaW5nOiAxNXB4OwogICAgbWFyZ2luOiAxNXB4IDA7CiAgfQogIGgxIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBmb250LXNpemU6IDQwcHg7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgbWFyZ2luLWJvdHRvbTogMzVweDsKICB9CiAgcCArIGgxIHsgbWFyZ2luLXRvcDogNjBweCB9CiAgaDIsIGgzIHsKICAgIG1hcmdpbjogMzBweCAwIDE1cHggMDsKICB9CiAgcCArIGgyLCBwcmUgKyBoMiwgY29kZSArIGgyIHsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBwYWRkaW5nLXRvcDogMzBweDsKICB9CiAgaDMgewogICAgbWFyZ2luOiAxNXB4IDA7CiAgfQp9CgoKI2RvY3MgewogIEBiZzogbGlnaHRlbihAbGlnaHQtYmx1ZSwgNSUpOwogIGJvcmRlci10b3A6IDJweCBzb2xpZCBsaWdodGVuKEBiZywgNSUpOwogIGNvbG9yOiBAYmx1ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlnaHQtYmx1ZTsKICAuYm94LXNoYWRvdygwLCAtMnB4LCA1cHgsIDAuMik7CgogIGgxIHsKICAgIGZvbnQtZmFtaWx5OiAnRHJvaWQgU2VyaWYnLCAnR2VvcmdpYScsIHNlcmlmOwogICAgcGFkZGluZy10b3A6IDMwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDQ1cHg7CiAgICBmb250LXNpemU6IDQ0cHg7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luOiAzMHB4IDAgIWltcG9ydGFudDsKICAgIHRleHQtc2hhZG93OiAwcHggMXB4IDFweCBAbGlnaHRlc3Q7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CiAgLmNvbnRlbnQgewogICAgY2xlYXI6IGJvdGg7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAbGlnaHQtYmx1ZSwgMjUlKTsKICAgIC5ib3gtc2hhZG93KDAsIDVweCwgNXB4LCAwLjQpOwogIH0KICBwcmUgewogICAgQGJhY2tncm91bmQ6IGxpZ2h0ZW4oQGJnLCAzMCUpOwogICAgY29sb3I6IGxpZ2h0ZW4oQGJsdWUsIDEwJSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFja2dyb3VuZDsKICAgIGJvcmRlci1jb2xvcjogbGlnaHRlbihAbGlnaHQtYmx1ZSwgMjUlKTsKICAgIGJvcmRlci13aWR0aDogMnB4OwogICAgY29kZSAuYXR0cmlidXRlIHsgY29sb3I6IGhzbCg0MCwgNTAlLCAzMCUpIH0KICAgIGNvZGUgLnZhcmlhYmxlICB7IGNvbG9yOiBoc2woMTIwLCAxMCUsIDMwJSkgfQogICAgY29kZSAuZWxlbWVudCAgIHsgY29sb3I6IGhzbCgxNzAsIDIwJSwgMzAlKSB9CgogICAgY29kZSAuc3RyaW5nLCAucmVnZXhwIHsgY29sb3I6IGhzbCg3NSwgNTAlLCAzNSUpIH0KICAgIGNvZGUgLmNsYXNzIHsgY29sb3I6IGhzbCg0MCwgNDAlLCAzMCUpOyBmb250LXdlaWdodDogbm9ybWFsIH0KICAgIGNvZGUgLmlkIHsgY29sb3I6IGhzbCg1MCwgNDAlLCAzMCUpOyBmb250LXdlaWdodDogbm9ybWFsIH0KICAgIGNvZGUgLmNvbW1lbnQgeyBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQpIH0KICAgIGNvZGUgLm51bWJlciwgLmNvbG9yIHsgY29sb3I6IGhzbCgxMCwgNDAlLCAzMCUpIH0KICAgIGNvZGUgLmNsYXNzLCBjb2RlIC5taXhpbiwgLnNwZWNpYWwgeyBjb2xvcjogaHNsKDE5MCwgMjAlLCAzMCUpIH0KICB9CiAgcHJlIGNvZGUgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAxNXB4ICB9CiAgcCArIGgyLCBwcmUgKyBoMiwgY29kZSArIGgyIHsgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIH0KfQoKdGQgewogIHBhZGRpbmctcmlnaHQ6IDMwcHg7ICAKfQojc3lub3BzaXMgewogIC5ib3gtc2hhZG93KDAsIDVweCwgNXB4LCAwLjIpOwp9CiNzeW5vcHNpcywgI2Fib3V0IHsKICBoMiB7CiAgICBmb250LXNpemU6IDMwcHg7ICAKICAgIHBhZGRpbmc6IDEwcHggMDsKICB9CiAgaDEgKyBoMiB7CiAgICAgIG1hcmdpbi10b3A6IDE1cHg7ICAKICB9CiAgaDMgeyBmb250LXNpemU6IDIycHggfQoKICAuY29kZS1leGFtcGxlIHsKICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IGRhc2hlZDsKICAgIHBhZGRpbmc6IDA7CiAgICBwcmUgeyBib3JkZXI6IDA7IG1hcmdpbjogMCB9CiAgICB0ZCB7CiAgICAgIGJvcmRlcjogMDsKICAgICAgbWFyZ2luOiAwOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkZXNhdHVyYXRlKGRhcmtlbihAZGFya2VzdCwgNSUpLCAyMCUpOwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICBwYWRkaW5nOiAwOwogICAgfQogICAgdHIgeyBwYWRkaW5nOiAwIH0KICB9CiAgLmNzcy1vdXRwdXQgewogICAgdGQgewogICAgICBib3JkZXItbGVmdDogMDsgIAogICAgfQogIH0KICAubGVzcy1leGFtcGxlIHsKICAgIC8vYm9yZGVyLXJpZ2h0OiAxcHggZG90dGVkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSAhaW1wb3J0YW50OwogIH0KICAuY3NzLW91dHB1dCwgLmxlc3MtZXhhbXBsZSB7CiAgICB3aWR0aDogMzkwcHg7CiAgfQogIHByZSB7CiAgICBwYWRkaW5nOiAyMHB4OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBmb250LXNpemU6IDE0cHg7CiAgfQp9CiNhYm91dCwgI3N5bm9wc2lzLCAjZ3VpZGUgewogIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgY29sb3I6IEBsaWdodC15ZWxsb3c7CiAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICY6aG92ZXIgewogICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgQGxpZ2h0LXllbGxvdzsKICAgIH0KICB9CiAgQGJnOiBkZXNhdHVyYXRlKGRhcmtlbihAZGFya2VzdCwgNSUpLCAyMCUpOwogIHRleHQtc2hhZG93OiAwIC0xcHggMXB4IGxpZ2h0ZW4oQGJnLCA1JSk7CiAgY29sb3I6IEBoaWdobGlnaHQ7CiAgYmFja2dyb3VuZC1jb2xvcjogQGJnOwogIC5jb250ZW50IHsKICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUoQGRhcmtlc3QsIDIwJSk7CiAgICBjbGVhcjogYm90aDsKICAgIC5ib3gtc2hhZG93KDAsIDVweCwgNXB4LCAwLjQpOwogIH0KICBoMSwgaDIsIGgzIHsKICAgIGNvbG9yOiBAZGFyay15ZWxsb3c7CiAgfQogIHByZSB7CiAgICAgIGNvZGUgLmF0dHJpYnV0ZSB7IGNvbG9yOiBoc2woNDAsIDUwJSwgNzAlKSB9CiAgICAgIGNvZGUgLnZhcmlhYmxlICB7IGNvbG9yOiBoc2woMTIwLCAxMCUsIDUwJSkgfQogICAgICBjb2RlIC5lbGVtZW50ICAgeyBjb2xvcjogaHNsKDE3MCwgMjAlLCA1MCUpIH0KCiAgICAgIGNvZGUgLnN0cmluZywgLnJlZ2V4cCB7IGNvbG9yOiBoc2woNzUsIDUwJSwgNjUlKSB9CiAgICAgIGNvZGUgLmNsYXNzIHsgY29sb3I6IGhzbCg0MCwgNDAlLCA2MCUpOyBmb250LXdlaWdodDogbm9ybWFsIH0KICAgICAgY29kZSAuaWQgeyBjb2xvcjogaHNsKDUwLCA0MCUsIDYwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgICBjb2RlIC5jb21tZW50IHsgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSB9CiAgICAgIGNvZGUgLm51bWJlciwgLmNvbG9yIHsgY29sb3I6IGhzbCgxMCwgNDAlLCA1MCUpIH0KICAgICAgY29kZSAuY2xhc3MsIGNvZGUgLm1peGluLCAuc3BlY2lhbCB7IGNvbG9yOiBoc2woMTkwLCAyMCUsIDUwJSkgfQogICAgYmFja2dyb3VuZC1jb2xvcjogQGJnOwogICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oQGxpZ2h0LXllbGxvdywgNSUpOwogIH0KICBjb2RlIHsKICAgIGNvbG9yOiBkYXJrZW4oQGRhcmsteWVsbG93LCA1JSk7CiAgICAuc3RyaW5nLCAucmVnZXhwIHsgY29sb3I6IGRlc2F0dXJhdGUoQGxpZ2h0LWJsdWUsIDE1JSkgfQogICAgLmtleXdvcmQgeyBjb2xvcjogaHNsKDQwLCA0MCUsIDYwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgLmNvbW1lbnQgeyBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIH0KICAgIC5udW1iZXIgeyBjb2xvcjogbGlnaHRlbihAYmx1ZSwgMTAlKSB9CiAgICAuY2xhc3MsIC5zcGVjaWFsIHsgY29sb3I6IGhzbCgxOTAsIDIwJSwgNTAlKSB9CiAgfQp9CiNndWlkZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogQGRhcmtlc3Q7CiAgLmNvbnRlbnQgewogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgfQoKfQoKI2Fib3V0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAZGFya2VzdCAhaW1wb3J0YW50OwogIC5jb250ZW50IHsKICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUobGlnaHRlbihAZGFya2VzdCwgMyUpLCA1JSk7CiAgfQp9CiNzeW5vcHNpcyB7CiAgYmFja2dyb3VuZC1jb2xvcjogZGVzYXR1cmF0ZShsaWdodGVuKEBkYXJrZXN0LCAzJSksIDUlKSAhaW1wb3J0YW50OwogIC5jb250ZW50IHsKICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUobGlnaHRlbihAZGFya2VzdCwgMyUpLCA1JSk7CiAgfQogIHByZSB7fQp9CiNzeW5vcHNpcywgI2d1aWRlIHsKICAuY29udGVudCB7CiAgICAuYm94LXNoYWRvdygwLCAwcHgsIDBweCwgMC4wKTsKICB9Cn0KI2Fib3V0IGZvb3RlciB7CiAgbWFyZ2luLXRvcDogMzBweDsKICBwYWRkaW5nLXRvcDogMzBweDsKICBib3JkZXItdG9wOiA2cHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDE2cHg7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgI2NvcHkgeyBmb250LXNpemU6IDEycHggfQogIHRleHQtc2hhZG93OiAtMXB4IC0xcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wMik7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIHRoZW1lOiAibGVzc2VyLWRhcmsiLAogICAgICAgIGxpbmVOdW1iZXJzIDogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzIDogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtbGVzczwvY29kZT4sIDxjb2RlPnRleHQvY3NzPC9jb2RlPiAoaWYgbm90IHByZXZpb3VzbHkgZGVmaW5lZCkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/less.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKTEVTUyBtb2RlIC0gaHR0cDovL3d3dy5sZXNzY3NzLm9yZy8KUG9ydGVkIHRvIENvZGVNaXJyb3IgYnkgUGV0ZXIgS3Jvb24KKi8KCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibGVzcyIsIGZ1bmN0aW9uKGNvbmZpZykgewogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQsIHR5cGU7CiAgZnVuY3Rpb24gcmV0KHN0eWxlLCB0cCkge3R5cGUgPSB0cDsgcmV0dXJuIHN0eWxlO30KICAvL2h0bWw1IHRhZ3MKICB2YXIgdGFncyA9IFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFwcGxldCIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiYXNlIiwiYmFzZWZvbnQiLCJiZGkiLCJiZG8iLCJiaWciLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb21tYW5kIiwiZGF0YWxpc3QiLCJkZCIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZW0iLCJlbWJlZCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiZnJhbWUiLCJmcmFtZXNldCIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaWZyYW1lIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrZXlnZW4iLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibGluayIsIm1hcCIsIm1hcmsiLCJtZW51IiwibWV0YSIsIm1ldGVyIiwibmF2Iiwibm9mcmFtZXMiLCJub3NjcmlwdCIsIm9iamVjdCIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGFyYW0iLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2NyaXB0Iiwic2VjdGlvbiIsInNlbGVjdCIsInNtYWxsIiwic291cmNlIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRpdGxlIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXTsKICAKICBmdW5jdGlvbiBpblRhZ3NBcnJheSh2YWwpewoJICBmb3IodmFyIGk9MDsgaTx0YWdzLmxlbmd0aDsgaSsrKXsKCQkgIGlmKHZhbCA9PT0gdGFnc1tpXSl7CgkJCSAgcmV0dXJuIHRydWU7CgkJICB9CgkgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwoKCWlmIChjaCA9PSAiQCIpIHtzdHJlYW0uZWF0V2hpbGUoL1tcd1wtXS8pOyByZXR1cm4gcmV0KCJtZXRhIiwgc3RyZWFtLmN1cnJlbnQoKSk7fQogICAgZWxzZSBpZiAoY2ggPT0gIi8iICYmIHN0cmVhbS5lYXQoIioiKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7CiAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIjwiICYmIHN0cmVhbS5lYXQoIiEiKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU0dNTENvbW1lbnQ7CiAgICAgIHJldHVybiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIj0iKSByZXQobnVsbCwgImNvbXBhcmUiKTsKICAgIGVsc2UgaWYgKChjaCA9PSAifiIgfHwgY2ggPT0gInwiKSAmJiBzdHJlYW0uZWF0KCI9IikpIHJldHVybiByZXQobnVsbCwgImNvbXBhcmUiKTsKICAgIGVsc2UgaWYgKGNoID09ICJcIiIgfHwgY2ggPT0gIiciKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CgllbHNlIGlmIChjaCA9PSAiLyIpIHsgLy8gbGVzc2NzcyBlLmcuOiAucG5nIHdpbGwgbm90IGJlIHBhcnNlZCBhcyBhIGNsYXNzCgkgIGlmKHN0cmVhbS5lYXQoIi8iKSl7CgkJc3RhdGUudG9rZW5pemUgPSB0b2tlblNDb21tZW50CiAgICAgIAlyZXR1cm4gdG9rZW5TQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKCSAgfWVsc2V7CgkgICAgc3RyZWFtLmVhdFdoaWxlKC9bXGEtekEtWjAtOVwtXy5cc10vKTsKCQlpZigvXC98XCl8Iy8udGVzdChzdHJlYW0ucGVlaygpIHx8IHN0cmVhbS5lb2woKSB8fCAoc3RyZWFtLmVhdFNwYWNlKCkgJiYgc3RyZWFtLnBlZWsoKSA9PSAiKSIpKSlyZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5nIik7Ly9sZXQgdXJsKC9pbWFnZXMvbG9nby5wbmcpIHdpdGhvdXQgcXVvdGVzIHJldHVybiBhcyBzdHJpbmcKICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwoJICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiISIpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7CiAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvWywrPD4qXC9dLy50ZXN0KGNoKSkgey8vcmVtb3ZlZCAuIGRvdCBjaGFyYWN0ZXIgb3JpZ2luYWwgd2FzIFssLis+KlwvXQogICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKICAgIH0KICAgIGVsc2UgaWYgKC9bO3t9OlxbXF0oKV0vLnRlc3QoY2gpKSB7IC8vYWRkZWQgKCkgY2hhciBmb3IgbGVzc2NzcyBvcmlnaW5hbCB3YXMgWzt7fTpcW1xdXQogICAgICBpZihjaCA9PSAiOiIpewoJCXN0cmVhbS5lYXRXaGlsZSgvW2FjdGl2ZXxob3ZlcnxsaW5rfHZpc2l0ZWRdLyk7CgkJaWYoIHN0cmVhbS5jdXJyZW50KCkubWF0Y2goL2FjdGl2ZXxob3ZlcnxsaW5rfHZpc2l0ZWQvKSl7CgkJICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CgkJfWVsc2V7CgkJICByZXR1cm4gcmV0KG51bGwsIGNoKTsJCgkJfQoJICB9ZWxzZXsKICAJICAgIHJldHVybiByZXQobnVsbCwgY2gpOwoJICB9CiAgICB9CgllbHNlIGlmIChjaCA9PSAiLiIpIHsgLy8gbGVzc2NzcwoJICBzdHJlYW0uZWF0V2hpbGUoL1tcYS16QS1aMC05XC1fXS8pOwogICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICB9CgllbHNlIGlmIChjaCA9PSAiIyIpIHsgLy8gbGVzc2NzcwoJICAvL3dlIGRvbid0IGVhdCB3aGl0ZS1zcGFjZSwgd2Ugd2FudCB0aGUgaGV4IGNvbG9yIGFuZCBvciBpZCBvbmx5CgkgIHN0cmVhbS5lYXRXaGlsZSgvW0EtWmEtejAtOV0vKTsKCSAgLy9jaGVjayBpZiB0aGVyZSBpcyBhIHByb3BlciBoZXggY29sb3IgbGVuZ3RoIGUuZy4gI2VlZSB8fCAjZWVlRUVFCgkgIGlmKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoID09PTQgfHwgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggPT09Nyl7CgkJICBpZihzdHJlYW0uY3VycmVudCgpLm1hdGNoKC9bQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfS8sZmFsc2UpICE9IG51bGwpey8vaXMgdGhlcmUgYSB2YWxpZCBoZXggY29sb3IgdmFsdWUgcHJlc2VudCBpbiB0aGUgY3VycmVudCBzdHJlYW0KCQkgIAkvL3doZW4gbm90IGEgdmFsaWQgaGV4IHZhbHVlLCBwYXJzZSBhcyBpZAoJCQlpZihzdHJlYW0uY3VycmVudCgpLnN1YnN0cmluZygxKSAhPSBzdHJlYW0uY3VycmVudCgpLm1hdGNoKC9bQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfS8sZmFsc2UpKXJldHVybiByZXQoImF0b20iLCAidGFnIik7CgkJCS8vZWF0IHdoaXRlLXNwYWNlCgkJCXN0cmVhbS5lYXRTcGFjZSgpOwoJCQkvL3doZW4gaGV4IHZhbHVlIGRlY2xhcmF0aW9uIGRvZXNuJ3QgZW5kIHdpdGggWzssXSBidXQgaXMgZG9lcyB3aXRoIGEgc2xhc2gvY2MgY29tbWVudCB0cmVhdCBpdCBhcyBhbiBpZCwganVzdCBsaWtlIHRoZSBvdGhlciBoZXggdmFsdWVzIHRoYXQgZG9uJ3QgZW5kIHdpdGhbOyxdCgkJCWlmKCAvW1wvPD4uKCl7ISQlXiYqX1wtXFw/PStcfCMnfmBdLy50ZXN0KHN0cmVhbS5wZWVrKCkpIClyZXR1cm4gcmV0KCJhdG9tIiwgInRhZyIpOwoJCQkvLyN0aW1lIHsgY29sb3I6ICNhYWEgfQoJCQllbHNlIGlmKHN0cmVhbS5wZWVrKCkgPT0gIn0iIClyZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwoJCQkvL3dlIGhhdmUgYSB2YWxpZCBoZXggY29sb3IgdmFsdWUsIHBhcnNlIGFzIGlkIHdoZW5ldmVyIGFuIGVsZW1lbnQvY2xhc3MgaXMgZGVmaW5lZCBhZnRlciB0aGUgaGV4KGlkKSB2YWx1ZSBlLmcuICNlZWUgYWFhIHx8ICNlZWUgLmFhYQoJCQllbHNlIGlmKCAvW2EtekEtWlxcXS8udGVzdChzdHJlYW0ucGVlaygpKSApcmV0dXJuIHJldCgiYXRvbSIsICJ0YWciKTsKCQkJLy93aGVuIGEgaGV4IHZhbHVlIGlzIG9uIHRoZSBlbmQgb2YgYSBsaW5lLCBwYXJzZSBhcyBpZAoJCQllbHNlIGlmKHN0cmVhbS5lb2woKSlyZXR1cm4gcmV0KCJhdG9tIiwgInRhZyIpOwoJCQkvL2RlZmF1bHQKCQkJZWxzZSByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwoJCSAgfWVsc2V7Ly93aGVuIG5vdCBhIHZhbGlkIGhleHZhbHVlIGluIHRoZSBjdXJyZW50IHN0cmVhbSBlLmcuICNmb290ZXIKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwoJCQlyZXR1cm4gcmV0KCJhdG9tIiwgInRhZyIpOyAKCQkgIH0KCSAgfWVsc2V7CgkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwkJCgkJcmV0dXJuIHJldCgiYXRvbSIsICJ0YWciKTsKCSAgfQogICAgfQoJZWxzZSBpZiAoY2ggPT0gIiYiKSB7CgkgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC1dLyk7CgkgIHJldHVybiByZXQobnVsbCwgY2gpOwoJfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV8lLntdLyk7CgkgIGlmKHN0cmVhbS5jdXJyZW50KCkubWF0Y2goL2h0dHB8aHR0cHMvKSAhPSBudWxsKXsKCQlzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1fJS57OlwvXS8pOwoJCXJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKCSAgfWVsc2UgaWYoc3RyZWFtLnBlZWsoKSA9PSAiPCIgfHwgc3RyZWFtLnBlZWsoKSA9PSAiPiIpewoJCXJldHVybiByZXQoInRhZyIsICJ0YWciKTsKCSAgfWVsc2UgaWYoIHN0cmVhbS5wZWVrKCkubWF0Y2goL1woLykgIT0gbnVsbCApey8vIGxlc3NjCgkJcmV0dXJuIHJldChudWxsLCBjaCk7CgkgIH1lbHNlIGlmIChzdHJlYW0ucGVlaygpID09ICIvIiAmJiBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gIT0gdW5kZWZpbmVkKXsgLy8gdXJsKGRpci9jZW50ZXIvaW1hZ2UucG5nKQoJICAJcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwoJICB9ZWxzZSBpZiggc3RyZWFtLmN1cnJlbnQoKS5tYXRjaCgvXC1cZHxcLS5cZC8pICl7IC8vIGxlc3Njc3MgbWF0Y2ggZS5nLjogLTVweCAtMC40IGV0Yy4uLiBvbmx5IGNvbG9yaXplIHRoZSBtaW51cyBzaWduCgkJLy9zdHJlYW0uYmFja1VwKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoLTEpOyAvL2NvbW1tZW50IG91dCB0aGVzZSAyIGNvbW1lbnQgaWYgeW91IHdhbnQgdGhlIG1pbnVzIHNpZ24gdG8gYmUgcGFyc2VkIGFzIG51bGwgLTUwMHB4CgkgIAkvL3JldHVybiByZXQobnVsbCwgY2gpOwoJCXJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CgkgIH1lbHNlIGlmKCBpblRhZ3NBcnJheShzdHJlYW0uY3VycmVudCgpKSApeyAvLyBsZXNzY3NzIG1hdGNoIGh0bWwgdGFncwoJICAJcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwoJICB9ZWxzZSBpZiggL1wvfFtcc1wpXS8udGVzdChzdHJlYW0ucGVlaygpIHx8IHN0cmVhbS5lb2woKSB8fCAoc3RyZWFtLmVhdFNwYWNlKCkgJiYgc3RyZWFtLnBlZWsoKSA9PSAiLyIpKSAmJiBzdHJlYW0uY3VycmVudCgpLmluZGV4T2YoIi4iKSAhPT0gLTEpewoJCWlmKHN0cmVhbS5jdXJyZW50KCkuc3Vic3RyaW5nKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoLTEsc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGgpID09ICJ7Iil7CgkJCXN0cmVhbS5iYWNrVXAoMSk7CgkJCXJldHVybiByZXQoInRhZyIsICJ0YWciKTsKCQl9Ly9lbmQgaWYKCQlpZiggKHN0cmVhbS5lYXRTcGFjZSgpICYmIHN0cmVhbS5wZWVrKCkubWF0Y2goL1t7PD4uYS16QS1aXS8pICE9IG51bGwpICB8fCBzdHJlYW0uZW9sKCkgKXJldHVybiByZXQoInRhZyIsICJ0YWciKTsvL2UuZy4gYnV0dG9uLmljb24tcGx1cwoJCXJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsvL2xldCB1cmwoL2ltYWdlcy9sb2dvLnBuZykgd2l0aG91dCBxdW90ZXMgcmV0dXJuIGFzIHN0cmluZwoJICB9ZWxzZSBpZiggc3RyZWFtLmVvbCgpICl7CgkJICBpZihzdHJlYW0uY3VycmVudCgpLnN1YnN0cmluZyhzdHJlYW0uY3VycmVudCgpLmxlbmd0aC0xLHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoKSA9PSAieyIpc3RyZWFtLmJhY2tVcCgxKTsKCQkgIHJldHVybiByZXQoInRhZyIsICJ0YWciKTsKCSAgfWVsc2V7CiAgICAgIAlyZXR1cm4gcmV0KCJ2YXJpYWJsZSIsICJ2YXJpYWJsZSIpOwoJICB9CiAgICB9CiAgICAKICB9CgogIGZ1bmN0aW9uIHRva2VuU0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgey8vIFNDb21tZW50ID0gU2xhc2ggY29tbWVudAogICAgc3RyZWFtLnNraXBUb0VuZCgpOwoJc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKICB9CiAgICAKICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSAiLyIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChkYXNoZXMgPj0gMiAmJiBjaCA9PSAiPiIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkYXNoZXMgPSAoY2ggPT0gIi0iKSA/IGRhc2hlcyArIDEgOiAwOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7IAogICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgYmFzZUluZGVudDogYmFzZSB8fCAwLAogICAgICAgICAgICAgIHN0YWNrOiBbXX07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV07CiAgICAgIGlmICh0eXBlID09ICJoYXNoIiAmJiBjb250ZXh0ID09ICJydWxlIikgc3R5bGUgPSAiYXRvbSI7CiAgICAgIGVsc2UgaWYgKHN0eWxlID09ICJ2YXJpYWJsZSIpIHsKICAgICAgICBpZiAoY29udGV4dCA9PSAicnVsZSIpIHN0eWxlID0gbnVsbDsgLy8idGFnIgogICAgICAgIGVsc2UgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQgPT0gIkBtZWRpYXsiKXsgCgkJCXN0eWxlID0gc3RyZWFtLmN1cnJlbnQoKSAJPT0gIndoZW4iIAk/ICJ2YXJpYWJsZSIgCTogCgkJCXN0cmVhbS5zdHJpbmcubWF0Y2goLyMvZykgCSE9IHVuZGVmaW5lZCAJPyBudWxsIAkJOiAKCQkJL1tccyx8XHNcKV0vLnRlc3Qoc3RyZWFtLnBlZWsoKSkgCQk/ICJ0YWciIAk6IG51bGw7CgkJfQogICAgICB9CgogICAgICBpZiAoY29udGV4dCA9PSAicnVsZSIgJiYgL15bXHtcfTtdJC8udGVzdCh0eXBlKSkKICAgICAgICBzdGF0ZS5zdGFjay5wb3AoKTsKICAgICAgaWYgKHR5cGUgPT0gInsiKSB7CiAgICAgICAgaWYgKGNvbnRleHQgPT0gIkBtZWRpYSIpIHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9ICJAbWVkaWF7IjsKICAgICAgICBlbHNlIHN0YXRlLnN0YWNrLnB1c2goInsiKTsKICAgICAgfQogICAgICBlbHNlIGlmICh0eXBlID09ICJ9Iikgc3RhdGUuc3RhY2sucG9wKCk7CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIkBtZWRpYSIpIHN0YXRlLnN0YWNrLnB1c2goIkBtZWRpYSIpOwogICAgICBlbHNlIGlmIChjb250ZXh0ID09ICJ7IiAmJiB0eXBlICE9ICJjb21tZW50Iikgc3RhdGUuc3RhY2sucHVzaCgicnVsZSIpOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICB2YXIgbiA9IHN0YXRlLnN0YWNrLmxlbmd0aDsKICAgICAgaWYgKC9eXH0vLnRlc3QodGV4dEFmdGVyKSkKICAgICAgICBuIC09IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9PSAicnVsZSIgPyAyIDogMTsKICAgICAgcmV0dXJuIHN0YXRlLmJhc2VJbmRlbnQgKyBuICogaW5kZW50VW5pdDsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogIn0iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1sZXNzIiwgImxlc3MiKTsKaWYgKCFDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9jc3MiKSkKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvY3NzIiwgImxlc3MiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEx1YSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ibHVhLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUvbmVhdC5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTHVhIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLS1bWwpleGFtcGxlIHVzZWxlc3MgY29kZSB0byBzaG93IGx1YSBzeW50YXggaGlnaGxpZ2h0aW5nCnRoaXMgaXMgbXVsdGlsaW5lIGNvbW1lbnQKXV0KCmZ1bmN0aW9uIGJsYWhibGFoYmxhaCh4KQoKICBsb2NhbCB0YWJsZSA9IHsKICAgICJhc2QiID0gMTIzLAogICAgIngiID0gMC4zNCwgIAogIH0KICBpZiB4IH49IDMgdGhlbgogICAgcHJpbnQoIHggKQogIGVsc2VpZiB4ID09ICJzdHJpbmciCiAgICBteV9jdXN0b21fZnVuY3Rpb24oIDB4MzQgKQogIGVsc2UKICAgIHVua25vd25fZnVuY3Rpb24oICJzb21lIHN0cmluZyIgKQogIGVuZAoKICAtLXNpbmdsZSBsaW5lIGNvbW1lbnQKICAKZW5kCgpmdW5jdGlvbiBibGFibGFibGEzKCkKCiAgZm9yIGssdiBpbiBpcGFpcnMoIHRhYmxlICkgZG8KICAgIC0tYWJjZGUuLgogICAgeT1bPVsKICB4PVtbCiAgICAgIHggaXMgYSBtdWx0aSBsaW5lIHN0cmluZwogICBdXQogIGJ1dCBpdHMgZGVmaW5pdGlvbiBpcyBpc2lkZSBhIGhpZ2hlc3QgbGV2ZWwgc3RyaW5nIQogIF09XQogICAgcHJpbnQoIiBcIlwiICIpCgogICAgcyA9IG1hdGguc2luKCB4ICkKICBlbmQKCmVuZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgdGFiTW9kZTogImluZGVudCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogIm5lYXQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+TG9vc2VseSBiYXNlZCBvbiBGcmFuY2lzemVrCiAgICBXYXdyemFrJ3MgPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LzEvY29udHJpYi9sdWEiPkNvZGVNaXJyb3IKICAgIDEgbW9kZTwvYT4uIE9uZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBpcwogICAgc3VwcG9ydGVkLCA8Y29kZT5zcGVjaWFsczwvY29kZT4sIHRvIHdoaWNoIHlvdSBjYW4gcHJvdmlkZSBhbgogICAgYXJyYXkgb2Ygc3RyaW5ncyB0byBoYXZlIHRob3NlIGlkZW50aWZpZXJzIGhpZ2hsaWdodGVkIHdpdGgKICAgIHRoZSA8Y29kZT5sdWEtc3BlY2lhbDwvY29kZT4gc3R5bGUuPC9wPgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1sdWE8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gTFVBIG1vZGUuIFBvcnRlZCB0byBDb2RlTWlycm9yIDIgZnJvbSBGcmFuY2lzemVrIFdhd3J6YWsncwovLyBDb2RlTWlycm9yIDEgbW9kZS4KLy8gaGlnaGxpZ2h0cyBrZXl3b3Jkcywgc3RyaW5ncywgY29tbWVudHMgKG5vIGxldmVsaW5nIHN1cHBvcnRlZCEgKCJbPT1bIikpLCB0b2tlbnMsIGJhc2ljIGluZGVudGluZwogCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibHVhIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwoKICBmdW5jdGlvbiBwcmVmaXhSRSh3b3JkcykgewogICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiICsgd29yZHMuam9pbigifCIpICsgIikiLCAiaSIpOwogIH0KICBmdW5jdGlvbiB3b3JkUkUod29yZHMpIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKCJeKD86IiArIHdvcmRzLmpvaW4oInwiKSArICIpJCIsICJpIik7CiAgfQogIHZhciBzcGVjaWFscyA9IHdvcmRSRShwYXJzZXJDb25maWcuc3BlY2lhbHMgfHwgW10pOwogCiAgLy8gbG9uZyBsaXN0IG9mIHN0YW5kYXJkIGZ1bmN0aW9ucyBmcm9tIGx1YSBtYW51YWwKICB2YXIgYnVpbHRpbnMgPSB3b3JkUkUoWwogICAgIl9HIiwiX1ZFUlNJT04iLCJhc3NlcnQiLCJjb2xsZWN0Z2FyYmFnZSIsImRvZmlsZSIsImVycm9yIiwiZ2V0ZmVudiIsImdldG1ldGF0YWJsZSIsImlwYWlycyIsImxvYWQiLAogICAgImxvYWRmaWxlIiwibG9hZHN0cmluZyIsIm1vZHVsZSIsIm5leHQiLCJwYWlycyIsInBjYWxsIiwicHJpbnQiLCJyYXdlcXVhbCIsInJhd2dldCIsInJhd3NldCIsInJlcXVpcmUiLAogICAgInNlbGVjdCIsInNldGZlbnYiLCJzZXRtZXRhdGFibGUiLCJ0b251bWJlciIsInRvc3RyaW5nIiwidHlwZSIsInVucGFjayIsInhwY2FsbCIsCgogICAgImNvcm91dGluZS5jcmVhdGUiLCJjb3JvdXRpbmUucmVzdW1lIiwiY29yb3V0aW5lLnJ1bm5pbmciLCJjb3JvdXRpbmUuc3RhdHVzIiwiY29yb3V0aW5lLndyYXAiLCJjb3JvdXRpbmUueWllbGQiLAoKICAgICJkZWJ1Zy5kZWJ1ZyIsImRlYnVnLmdldGZlbnYiLCJkZWJ1Zy5nZXRob29rIiwiZGVidWcuZ2V0aW5mbyIsImRlYnVnLmdldGxvY2FsIiwiZGVidWcuZ2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5nZXRyZWdpc3RyeSIsImRlYnVnLmdldHVwdmFsdWUiLCJkZWJ1Zy5zZXRmZW52IiwiZGVidWcuc2V0aG9vayIsImRlYnVnLnNldGxvY2FsIiwiZGVidWcuc2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5zZXR1cHZhbHVlIiwiZGVidWcudHJhY2ViYWNrIiwKCiAgICAiY2xvc2UiLCJmbHVzaCIsImxpbmVzIiwicmVhZCIsInNlZWsiLCJzZXR2YnVmIiwid3JpdGUiLAoKICAgICJpby5jbG9zZSIsImlvLmZsdXNoIiwiaW8uaW5wdXQiLCJpby5saW5lcyIsImlvLm9wZW4iLCJpby5vdXRwdXQiLCJpby5wb3BlbiIsImlvLnJlYWQiLCJpby5zdGRlcnIiLCJpby5zdGRpbiIsCiAgICAiaW8uc3Rkb3V0IiwiaW8udG1wZmlsZSIsImlvLnR5cGUiLCJpby53cml0ZSIsCgogICAgIm1hdGguYWJzIiwibWF0aC5hY29zIiwibWF0aC5hc2luIiwibWF0aC5hdGFuIiwibWF0aC5hdGFuMiIsIm1hdGguY2VpbCIsIm1hdGguY29zIiwibWF0aC5jb3NoIiwibWF0aC5kZWciLAogICAgIm1hdGguZXhwIiwibWF0aC5mbG9vciIsIm1hdGguZm1vZCIsIm1hdGguZnJleHAiLCJtYXRoLmh1Z2UiLCJtYXRoLmxkZXhwIiwibWF0aC5sb2ciLCJtYXRoLmxvZzEwIiwibWF0aC5tYXgiLAogICAgIm1hdGgubWluIiwibWF0aC5tb2RmIiwibWF0aC5waSIsIm1hdGgucG93IiwibWF0aC5yYWQiLCJtYXRoLnJhbmRvbSIsIm1hdGgucmFuZG9tc2VlZCIsIm1hdGguc2luIiwibWF0aC5zaW5oIiwKICAgICJtYXRoLnNxcnQiLCJtYXRoLnRhbiIsIm1hdGgudGFuaCIsCgogICAgIm9zLmNsb2NrIiwib3MuZGF0ZSIsIm9zLmRpZmZ0aW1lIiwib3MuZXhlY3V0ZSIsIm9zLmV4aXQiLCJvcy5nZXRlbnYiLCJvcy5yZW1vdmUiLCJvcy5yZW5hbWUiLCJvcy5zZXRsb2NhbGUiLAogICAgIm9zLnRpbWUiLCJvcy50bXBuYW1lIiwKCiAgICAicGFja2FnZS5jcGF0aCIsInBhY2thZ2UubG9hZGVkIiwicGFja2FnZS5sb2FkZXJzIiwicGFja2FnZS5sb2FkbGliIiwicGFja2FnZS5wYXRoIiwicGFja2FnZS5wcmVsb2FkIiwKICAgICJwYWNrYWdlLnNlZWFsbCIsCgogICAgInN0cmluZy5ieXRlIiwic3RyaW5nLmNoYXIiLCJzdHJpbmcuZHVtcCIsInN0cmluZy5maW5kIiwic3RyaW5nLmZvcm1hdCIsInN0cmluZy5nbWF0Y2giLCJzdHJpbmcuZ3N1YiIsCiAgICAic3RyaW5nLmxlbiIsInN0cmluZy5sb3dlciIsInN0cmluZy5tYXRjaCIsInN0cmluZy5yZXAiLCJzdHJpbmcucmV2ZXJzZSIsInN0cmluZy5zdWIiLCJzdHJpbmcudXBwZXIiLAoKICAgICJ0YWJsZS5jb25jYXQiLCJ0YWJsZS5pbnNlcnQiLCJ0YWJsZS5tYXhuIiwidGFibGUucmVtb3ZlIiwidGFibGUuc29ydCIKICBdKTsKICB2YXIga2V5d29yZHMgPSB3b3JkUkUoWyJhbmQiLCJicmVhayIsImVsc2VpZiIsImZhbHNlIiwibmlsIiwibm90Iiwib3IiLCJyZXR1cm4iLAoJCQkgInRydWUiLCJmdW5jdGlvbiIsICJlbmQiLCAiaWYiLCAidGhlbiIsICJlbHNlIiwgImRvIiwgCgkJCSAid2hpbGUiLCAicmVwZWF0IiwgInVudGlsIiwgImZvciIsICJpbiIsICJsb2NhbCIgXSk7CgogIHZhciBpbmRlbnRUb2tlbnMgPSB3b3JkUkUoWyJmdW5jdGlvbiIsICJpZiIsInJlcGVhdCIsImRvIiwgIlxcKCIsICJ7Il0pOwogIHZhciBkZWRlbnRUb2tlbnMgPSB3b3JkUkUoWyJlbmQiLCAidW50aWwiLCAiXFwpIiwgIn0iXSk7CiAgdmFyIGRlZGVudFBhcnRpYWwgPSBwcmVmaXhSRShbImVuZCIsICJ1bnRpbCIsICJcXCkiLCAifSIsICJlbHNlIiwgImVsc2VpZiJdKTsKCiAgZnVuY3Rpb24gcmVhZEJyYWNrZXQoc3RyZWFtKSB7CiAgICB2YXIgbGV2ZWwgPSAwOwogICAgd2hpbGUgKHN0cmVhbS5lYXQoIj0iKSkgKytsZXZlbDsKICAgIHN0cmVhbS5lYXQoIlsiKTsKICAgIHJldHVybiBsZXZlbDsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkKICAgICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAiY29tbWVudCIpKShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSAKICAgIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikKICAgICAgcmV0dXJuIChzdGF0ZS5jdXIgPSBzdHJpbmcoY2gpKShzdHJlYW0sIHN0YXRlKTsKICAgIGlmIChjaCA9PSAiWyIgJiYgL1tcWz1dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKQogICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAic3RyaW5nIikpKHN0cmVhbSwgc3RhdGUpOwogICAgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHcuJV0vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfQogICAgaWYgKC9bXHdfXS8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXy5dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBicmFja2V0ZWQobGV2ZWwsIHN0eWxlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3VybGV2ID0gbnVsbCwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGN1cmxldiA9PSBudWxsKSB7aWYgKGNoID09ICJdIikgY3VybGV2ID0gMDt9CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIj0iKSArK2N1cmxldjsKICAgICAgICBlbHNlIGlmIChjaCA9PSAiXSIgJiYgY3VybGV2ID09IGxldmVsKSB7IHN0YXRlLmN1ciA9IG5vcm1hbDsgYnJlYWs7IH0KICAgICAgICBlbHNlIGN1cmxldiA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoIWVzY2FwZWQpIHN0YXRlLmN1ciA9IG5vcm1hbDsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CiAgICAKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbCkgewogICAgICByZXR1cm4ge2Jhc2Vjb2w6IGJhc2Vjb2wgfHwgMCwgaW5kZW50RGVwdGg6IDAsIGN1cjogbm9ybWFsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUuY3VyKHN0cmVhbSwgc3RhdGUpOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChzdHlsZSA9PSAidmFyaWFibGUiKSB7CiAgICAgICAgaWYgKGtleXdvcmRzLnRlc3Qod29yZCkpIHN0eWxlID0gImtleXdvcmQiOwogICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5zLnRlc3Qod29yZCkpIHN0eWxlID0gImJ1aWx0aW4iOwoJZWxzZSBpZiAoc3BlY2lhbHMudGVzdCh3b3JkKSkgc3R5bGUgPSAidmFyaWFibGUtMiI7CiAgICAgIH0KICAgICAgaWYgKChzdHlsZSAhPSAiY29tbWVudCIpICYmIChzdHlsZSAhPSAic3RyaW5nIikpewogICAgICAgIGlmIChpbmRlbnRUb2tlbnMudGVzdCh3b3JkKSkgKytzdGF0ZS5pbmRlbnREZXB0aDsKICAgICAgICBlbHNlIGlmIChkZWRlbnRUb2tlbnMudGVzdCh3b3JkKSkgLS1zdGF0ZS5pbmRlbnREZXB0aDsKICAgICAgfQogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICB2YXIgY2xvc2luZyA9IGRlZGVudFBhcnRpYWwudGVzdCh0ZXh0QWZ0ZXIpOwogICAgICByZXR1cm4gc3RhdGUuYmFzZWNvbCArIGluZGVudFVuaXQgKiAoc3RhdGUuaW5kZW50RGVwdGggLSAoY2xvc2luZyA/IDEgOiAwKSk7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1sdWEiLCAibHVhIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1hcmtkb3duIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJtYXJrZG93bi5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTWFya2Rvd24gbW9kZTwvaDE+Cgo8IS0tIHNvdXJjZTogaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9iYXNpY3MudGV4dCAtLT4KPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KTWFya2Rvd246IEJhc2ljcwo9PT09PT09PT09PT09PT09CgombHQ7dWwgaWQ9IlByb2plY3RTdWJtZW51IiZndDsKICAgICZsdDtsaSZndDsmbHQ7YSBocmVmPSIvcHJvamVjdHMvbWFya2Rvd24vIiB0aXRsZT0iTWFya2Rvd24gUHJvamVjdCBQYWdlIiZndDtNYWluJmx0Oy9hJmd0OyZsdDsvbGkmZ3Q7CiAgICAmbHQ7bGkmZ3Q7Jmx0O2EgY2xhc3M9InNlbGVjdGVkIiB0aXRsZT0iTWFya2Rvd24gQmFzaWNzIiZndDtCYXNpY3MmbHQ7L2EmZ3Q7Jmx0Oy9saSZndDsKICAgICZsdDtsaSZndDsmbHQ7YSBocmVmPSIvcHJvamVjdHMvbWFya2Rvd24vc3ludGF4IiB0aXRsZT0iTWFya2Rvd24gU3ludGF4IERvY3VtZW50YXRpb24iJmd0O1N5bnRheCZsdDsvYSZndDsmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0OyZsdDthIGhyZWY9Ii9wcm9qZWN0cy9tYXJrZG93bi9saWNlbnNlIiB0aXRsZT0iUHJpY2luZyBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbiImZ3Q7TGljZW5zZSZsdDsvYSZndDsmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0OyZsdDthIGhyZWY9Ii9wcm9qZWN0cy9tYXJrZG93bi9kaW5ndXMiIHRpdGxlPSJPbmxpbmUgTWFya2Rvd24gV2ViIEZvcm0iJmd0O0Rpbmd1cyZsdDsvYSZndDsmbHQ7L2xpJmd0OwombHQ7L3VsJmd0OwoKCkdldHRpbmcgdGhlIEdpc3Qgb2YgTWFya2Rvd24ncyBGb3JtYXR0aW5nIFN5bnRheAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgcGFnZSBvZmZlcnMgYSBicmllZiBvdmVydmlldyBvZiB3aGF0IGl0J3MgbGlrZSB0byB1c2UgTWFya2Rvd24uClRoZSBbc3ludGF4IHBhZ2VdIFtzXSBwcm92aWRlcyBjb21wbGV0ZSwgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBmb3IKZXZlcnkgZmVhdHVyZSwgYnV0IE1hcmtkb3duIHNob3VsZCBiZSB2ZXJ5IGVhc3kgdG8gcGljayB1cCBzaW1wbHkgYnkKbG9va2luZyBhdCBhIGZldyBleGFtcGxlcyBvZiBpdCBpbiBhY3Rpb24uIFRoZSBleGFtcGxlcyBvbiB0aGlzIHBhZ2UKYXJlIHdyaXR0ZW4gaW4gYSBiZWZvcmUvYWZ0ZXIgc3R5bGUsIHNob3dpbmcgZXhhbXBsZSBzeW50YXggYW5kIHRoZQpIVE1MIG91dHB1dCBwcm9kdWNlZCBieSBNYXJrZG93bi4KCkl0J3MgYWxzbyBoZWxwZnVsIHRvIHNpbXBseSB0cnkgTWFya2Rvd24gb3V0OyB0aGUgW0Rpbmd1c10gW2RdIGlzIGEKd2ViIGFwcGxpY2F0aW9uIHRoYXQgYWxsb3dzIHlvdSB0eXBlIHlvdXIgb3duIE1hcmtkb3duLWZvcm1hdHRlZCB0ZXh0CmFuZCB0cmFuc2xhdGUgaXQgdG8gWEhUTUwuCgoqKk5vdGU6KiogVGhpcyBkb2N1bWVudCBpcyBpdHNlbGYgd3JpdHRlbiB1c2luZyBNYXJrZG93bjsgeW91CmNhbiBbc2VlIHRoZSBzb3VyY2UgZm9yIGl0IGJ5IGFkZGluZyAnLnRleHQnIHRvIHRoZSBVUkxdIFtzcmNdLgoKICBbc106IC9wcm9qZWN0cy9tYXJrZG93bi9zeW50YXggICJNYXJrZG93biBTeW50YXgiCiAgW2RdOiAvcHJvamVjdHMvbWFya2Rvd24vZGluZ3VzICAiTWFya2Rvd24gRGluZ3VzIgogIFtzcmNdOiAvcHJvamVjdHMvbWFya2Rvd24vYmFzaWNzLnRleHQKCgojIyBQYXJhZ3JhcGhzLCBIZWFkZXJzLCBCbG9ja3F1b3RlcyAjIwoKQSBwYXJhZ3JhcGggaXMgc2ltcGx5IG9uZSBvciBtb3JlIGNvbnNlY3V0aXZlIGxpbmVzIG9mIHRleHQsIHNlcGFyYXRlZApieSBvbmUgb3IgbW9yZSBibGFuayBsaW5lcy4gKEEgYmxhbmsgbGluZSBpcyBhbnkgbGluZSB0aGF0IGxvb2tzIGxpa2UKYSBibGFuayBsaW5lIC0tIGEgbGluZSBjb250YWluaW5nIG5vdGhpbmcgYnV0IHNwYWNlcyBvciB0YWJzIGlzCmNvbnNpZGVyZWQgYmxhbmsuKSBOb3JtYWwgcGFyYWdyYXBocyBzaG91bGQgbm90IGJlIGluZGVudGVkIHdpdGgKc3BhY2VzIG9yIHRhYnMuCgpNYXJrZG93biBvZmZlcnMgdHdvIHN0eWxlcyBvZiBoZWFkZXJzOiAqU2V0ZXh0KiBhbmQgKmF0eCouClNldGV4dC1zdHlsZSBoZWFkZXJzIGZvciBgJmx0O2gxJmd0O2AgYW5kIGAmbHQ7aDImZ3Q7YCBhcmUgY3JlYXRlZCBieQoidW5kZXJsaW5pbmciIHdpdGggZXF1YWwgc2lnbnMgKGA9YCkgYW5kIGh5cGhlbnMgKGAtYCksIHJlc3BlY3RpdmVseS4KVG8gY3JlYXRlIGFuIGF0eC1zdHlsZSBoZWFkZXIsIHlvdSBwdXQgMS02IGhhc2ggbWFya3MgKGAjYCkgYXQgdGhlCmJlZ2lubmluZyBvZiB0aGUgbGluZSAtLSB0aGUgbnVtYmVyIG9mIGhhc2hlcyBlcXVhbHMgdGhlIHJlc3VsdGluZwpIVE1MIGhlYWRlciBsZXZlbC4KCkJsb2NrcXVvdGVzIGFyZSBpbmRpY2F0ZWQgdXNpbmcgZW1haWwtc3R5bGUgJ2AmZ3Q7YCcgYW5nbGUgYnJhY2tldHMuCgpNYXJrZG93bjoKCiAgICBBIEZpcnN0IExldmVsIEhlYWRlcgogICAgPT09PT09PT09PT09PT09PT09PT0KICAgIAogICAgQSBTZWNvbmQgTGV2ZWwgSGVhZGVyCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBOb3cgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvCiAgICB0aGUgYWlkIG9mIHRoZWlyIGNvdW50cnkuIFRoaXMgaXMganVzdCBhCiAgICByZWd1bGFyIHBhcmFncmFwaC4KCiAgICBUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5CiAgICBkb2cncyBiYWNrLgogICAgCiAgICAjIyMgSGVhZGVyIDMKCiAgICAmZ3Q7IFRoaXMgaXMgYSBibG9ja3F1b3RlLgogICAgJmd0OyAKICAgICZndDsgVGhpcyBpcyB0aGUgc2Vjb25kIHBhcmFncmFwaCBpbiB0aGUgYmxvY2txdW90ZS4KICAgICZndDsKICAgICZndDsgIyMgVGhpcyBpcyBhbiBIMiBpbiBhIGJsb2NrcXVvdGUKCgpPdXRwdXQ6CgogICAgJmx0O2gxJmd0O0EgRmlyc3QgTGV2ZWwgSGVhZGVyJmx0Oy9oMSZndDsKICAgIAogICAgJmx0O2gyJmd0O0EgU2Vjb25kIExldmVsIEhlYWRlciZsdDsvaDImZ3Q7CiAgICAKICAgICZsdDtwJmd0O05vdyBpcyB0aGUgdGltZSBmb3IgYWxsIGdvb2QgbWVuIHRvIGNvbWUgdG8KICAgIHRoZSBhaWQgb2YgdGhlaXIgY291bnRyeS4gVGhpcyBpcyBqdXN0IGEKICAgIHJlZ3VsYXIgcGFyYWdyYXBoLiZsdDsvcCZndDsKICAgIAogICAgJmx0O3AmZ3Q7VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eQogICAgZG9nJ3MgYmFjay4mbHQ7L3AmZ3Q7CiAgICAKICAgICZsdDtoMyZndDtIZWFkZXIgMyZsdDsvaDMmZ3Q7CiAgICAKICAgICZsdDtibG9ja3F1b3RlJmd0OwogICAgICAgICZsdDtwJmd0O1RoaXMgaXMgYSBibG9ja3F1b3RlLiZsdDsvcCZndDsKICAgICAgICAKICAgICAgICAmbHQ7cCZndDtUaGlzIGlzIHRoZSBzZWNvbmQgcGFyYWdyYXBoIGluIHRoZSBibG9ja3F1b3RlLiZsdDsvcCZndDsKICAgICAgICAKICAgICAgICAmbHQ7aDImZ3Q7VGhpcyBpcyBhbiBIMiBpbiBhIGJsb2NrcXVvdGUmbHQ7L2gyJmd0OwogICAgJmx0Oy9ibG9ja3F1b3RlJmd0OwoKCgojIyMgUGhyYXNlIEVtcGhhc2lzICMjIwoKTWFya2Rvd24gdXNlcyBhc3Rlcmlza3MgYW5kIHVuZGVyc2NvcmVzIHRvIGluZGljYXRlIHNwYW5zIG9mIGVtcGhhc2lzLgoKTWFya2Rvd246CgogICAgU29tZSBvZiB0aGVzZSB3b3JkcyAqYXJlIGVtcGhhc2l6ZWQqLgogICAgU29tZSBvZiB0aGVzZSB3b3JkcyBfYXJlIGVtcGhhc2l6ZWQgYWxzb18uCiAgICAKICAgIFVzZSB0d28gYXN0ZXJpc2tzIGZvciAqKnN0cm9uZyBlbXBoYXNpcyoqLgogICAgT3IsIGlmIHlvdSBwcmVmZXIsIF9fdXNlIHR3byB1bmRlcnNjb3JlcyBpbnN0ZWFkX18uCgpPdXRwdXQ6CgogICAgJmx0O3AmZ3Q7U29tZSBvZiB0aGVzZSB3b3JkcyAmbHQ7ZW0mZ3Q7YXJlIGVtcGhhc2l6ZWQmbHQ7L2VtJmd0Oy4KICAgIFNvbWUgb2YgdGhlc2Ugd29yZHMgJmx0O2VtJmd0O2FyZSBlbXBoYXNpemVkIGFsc28mbHQ7L2VtJmd0Oy4mbHQ7L3AmZ3Q7CiAgICAKICAgICZsdDtwJmd0O1VzZSB0d28gYXN0ZXJpc2tzIGZvciAmbHQ7c3Ryb25nJmd0O3N0cm9uZyBlbXBoYXNpcyZsdDsvc3Ryb25nJmd0Oy4KICAgIE9yLCBpZiB5b3UgcHJlZmVyLCAmbHQ7c3Ryb25nJmd0O3VzZSB0d28gdW5kZXJzY29yZXMgaW5zdGVhZCZsdDsvc3Ryb25nJmd0Oy4mbHQ7L3AmZ3Q7CiAgIAoKCiMjIExpc3RzICMjCgpVbm9yZGVyZWQgKGJ1bGxldGVkKSBsaXN0cyB1c2UgYXN0ZXJpc2tzLCBwbHVzZXMsIGFuZCBoeXBoZW5zIChgKmAsCmArYCwgYW5kIGAtYCkgYXMgbGlzdCBtYXJrZXJzLiBUaGVzZSB0aHJlZSBtYXJrZXJzIGFyZQppbnRlcmNoYW5nYWJsZTsgdGhpczoKCiAgICAqICAgQ2FuZHkuCiAgICAqICAgR3VtLgogICAgKiAgIEJvb3plLgoKdGhpczoKCiAgICArICAgQ2FuZHkuCiAgICArICAgR3VtLgogICAgKyAgIEJvb3plLgoKYW5kIHRoaXM6CgogICAgLSAgIENhbmR5LgogICAgLSAgIEd1bS4KICAgIC0gICBCb296ZS4KCmFsbCBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dDoKCiAgICAmbHQ7dWwmZ3Q7CiAgICAmbHQ7bGkmZ3Q7Q2FuZHkuJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtHdW0uJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtCb296ZS4mbHQ7L2xpJmd0OwogICAgJmx0Oy91bCZndDsKCk9yZGVyZWQgKG51bWJlcmVkKSBsaXN0cyB1c2UgcmVndWxhciBudW1iZXJzLCBmb2xsb3dlZCBieSBwZXJpb2RzLCBhcwpsaXN0IG1hcmtlcnM6CgogICAgMS4gIFJlZAogICAgMi4gIEdyZWVuCiAgICAzLiAgQmx1ZQoKT3V0cHV0OgoKICAgICZsdDtvbCZndDsKICAgICZsdDtsaSZndDtSZWQmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0O0dyZWVuJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtCbHVlJmx0Oy9saSZndDsKICAgICZsdDsvb2wmZ3Q7CgpJZiB5b3UgcHV0IGJsYW5rIGxpbmVzIGJldHdlZW4gaXRlbXMsIHlvdSdsbCBnZXQgYCZsdDtwJmd0O2AgdGFncyBmb3IgdGhlCmxpc3QgaXRlbSB0ZXh0LiBZb3UgY2FuIGNyZWF0ZSBtdWx0aS1wYXJhZ3JhcGggbGlzdCBpdGVtcyBieSBpbmRlbnRpbmcKdGhlIHBhcmFncmFwaHMgYnkgNCBzcGFjZXMgb3IgMSB0YWI6CgogICAgKiAgIEEgbGlzdCBpdGVtLgogICAgCiAgICAgICAgV2l0aCBtdWx0aXBsZSBwYXJhZ3JhcGhzLgoKICAgICogICBBbm90aGVyIGl0ZW0gaW4gdGhlIGxpc3QuCgpPdXRwdXQ6CgogICAgJmx0O3VsJmd0OwogICAgJmx0O2xpJmd0OyZsdDtwJmd0O0EgbGlzdCBpdGVtLiZsdDsvcCZndDsKICAgICZsdDtwJmd0O1dpdGggbXVsdGlwbGUgcGFyYWdyYXBocy4mbHQ7L3AmZ3Q7Jmx0Oy9saSZndDsKICAgICZsdDtsaSZndDsmbHQ7cCZndDtBbm90aGVyIGl0ZW0gaW4gdGhlIGxpc3QuJmx0Oy9wJmd0OyZsdDsvbGkmZ3Q7CiAgICAmbHQ7L3VsJmd0OwogICAgCgoKIyMjIExpbmtzICMjIwoKTWFya2Rvd24gc3VwcG9ydHMgdHdvIHN0eWxlcyBmb3IgY3JlYXRpbmcgbGlua3M6ICppbmxpbmUqIGFuZAoqcmVmZXJlbmNlKi4gV2l0aCBib3RoIHN0eWxlcywgeW91IHVzZSBzcXVhcmUgYnJhY2tldHMgdG8gZGVsaW1pdCB0aGUKdGV4dCB5b3Ugd2FudCB0byB0dXJuIGludG8gYSBsaW5rLgoKSW5saW5lLXN0eWxlIGxpbmtzIHVzZSBwYXJlbnRoZXNlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGluayB0ZXh0LgpGb3IgZXhhbXBsZToKCiAgICBUaGlzIGlzIGFuIFtleGFtcGxlIGxpbmtdKGh0dHA6Ly9leGFtcGxlLmNvbS8pLgoKT3V0cHV0OgoKICAgICZsdDtwJmd0O1RoaXMgaXMgYW4gJmx0O2EgaHJlZj0iaHR0cDovL2V4YW1wbGUuY29tLyImZ3Q7CiAgICBleGFtcGxlIGxpbmsmbHQ7L2EmZ3Q7LiZsdDsvcCZndDsKCk9wdGlvbmFsbHksIHlvdSBtYXkgaW5jbHVkZSBhIHRpdGxlIGF0dHJpYnV0ZSBpbiB0aGUgcGFyZW50aGVzZXM6CgogICAgVGhpcyBpcyBhbiBbZXhhbXBsZSBsaW5rXShodHRwOi8vZXhhbXBsZS5jb20vICJXaXRoIGEgVGl0bGUiKS4KCk91dHB1dDoKCiAgICAmbHQ7cCZndDtUaGlzIGlzIGFuICZsdDthIGhyZWY9Imh0dHA6Ly9leGFtcGxlLmNvbS8iIHRpdGxlPSJXaXRoIGEgVGl0bGUiJmd0OwogICAgZXhhbXBsZSBsaW5rJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgpSZWZlcmVuY2Utc3R5bGUgbGlua3MgYWxsb3cgeW91IHRvIHJlZmVyIHRvIHlvdXIgbGlua3MgYnkgbmFtZXMsIHdoaWNoCnlvdSBkZWZpbmUgZWxzZXdoZXJlIGluIHlvdXIgZG9jdW1lbnQ6CgogICAgSSBnZXQgMTAgdGltZXMgbW9yZSB0cmFmZmljIGZyb20gW0dvb2dsZV1bMV0gdGhhbiBmcm9tCiAgICBbWWFob29dWzJdIG9yIFtNU05dWzNdLgoKICAgIFsxXTogaHR0cDovL2dvb2dsZS5jb20vICAgICAgICAiR29vZ2xlIgogICAgWzJdOiBodHRwOi8vc2VhcmNoLnlhaG9vLmNvbS8gICJZYWhvbyBTZWFyY2giCiAgICBbM106IGh0dHA6Ly9zZWFyY2gubXNuLmNvbS8gICAgIk1TTiBTZWFyY2giCgpPdXRwdXQ6CgogICAgJmx0O3AmZ3Q7SSBnZXQgMTAgdGltZXMgbW9yZSB0cmFmZmljIGZyb20gJmx0O2EgaHJlZj0iaHR0cDovL2dvb2dsZS5jb20vIgogICAgdGl0bGU9Ikdvb2dsZSImZ3Q7R29vZ2xlJmx0Oy9hJmd0OyB0aGFuIGZyb20gJmx0O2EgaHJlZj0iaHR0cDovL3NlYXJjaC55YWhvby5jb20vIgogICAgdGl0bGU9IllhaG9vIFNlYXJjaCImZ3Q7WWFob28mbHQ7L2EmZ3Q7IG9yICZsdDthIGhyZWY9Imh0dHA6Ly9zZWFyY2gubXNuLmNvbS8iCiAgICB0aXRsZT0iTVNOIFNlYXJjaCImZ3Q7TVNOJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgpUaGUgdGl0bGUgYXR0cmlidXRlIGlzIG9wdGlvbmFsLiBMaW5rIG5hbWVzIG1heSBjb250YWluIGxldHRlcnMsCm51bWJlcnMgYW5kIHNwYWNlcywgYnV0IGFyZSAqbm90KiBjYXNlIHNlbnNpdGl2ZToKCiAgICBJIHN0YXJ0IG15IG1vcm5pbmcgd2l0aCBhIGN1cCBvZiBjb2ZmZWUgYW5kCiAgICBbVGhlIE5ldyBZb3JrIFRpbWVzXVtOWSBUaW1lc10uCgogICAgW255IHRpbWVzXTogaHR0cDovL3d3dy5ueXRpbWVzLmNvbS8KCk91dHB1dDoKCiAgICAmbHQ7cCZndDtJIHN0YXJ0IG15IG1vcm5pbmcgd2l0aCBhIGN1cCBvZiBjb2ZmZWUgYW5kCiAgICAmbHQ7YSBocmVmPSJodHRwOi8vd3d3Lm55dGltZXMuY29tLyImZ3Q7VGhlIE5ldyBZb3JrIFRpbWVzJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgoKIyMjIEltYWdlcyAjIyMKCkltYWdlIHN5bnRheCBpcyB2ZXJ5IG11Y2ggbGlrZSBsaW5rIHN5bnRheC4KCklubGluZSAodGl0bGVzIGFyZSBvcHRpb25hbCk6CgogICAgIVthbHQgdGV4dF0oL3BhdGgvdG8vaW1nLmpwZyAiVGl0bGUiKQoKUmVmZXJlbmNlLXN0eWxlOgoKICAgICFbYWx0IHRleHRdW2lkXQoKICAgIFtpZF06IC9wYXRoL3RvL2ltZy5qcGcgIlRpdGxlIgoKQm90aCBvZiB0aGUgYWJvdmUgZXhhbXBsZXMgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQ6CgogICAgJmx0O2ltZyBzcmM9Ii9wYXRoL3RvL2ltZy5qcGciIGFsdD0iYWx0IHRleHQiIHRpdGxlPSJUaXRsZSIgLyZndDsKCgoKIyMjIENvZGUgIyMjCgpJbiBhIHJlZ3VsYXIgcGFyYWdyYXBoLCB5b3UgY2FuIGNyZWF0ZSBjb2RlIHNwYW4gYnkgd3JhcHBpbmcgdGV4dCBpbgpiYWNrdGljayBxdW90ZXMuIEFueSBhbXBlcnNhbmRzIChgJmFtcDtgKSBhbmQgYW5nbGUgYnJhY2tldHMgKGAmbHQ7YCBvcgpgJmd0O2ApIHdpbGwgYXV0b21hdGljYWxseSBiZSB0cmFuc2xhdGVkIGludG8gSFRNTCBlbnRpdGllcy4gVGhpcyBtYWtlcwppdCBlYXN5IHRvIHVzZSBNYXJrZG93biB0byB3cml0ZSBhYm91dCBIVE1MIGV4YW1wbGUgY29kZToKCiAgICBJIHN0cm9uZ2x5IHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIGFueSBgJmx0O2JsaW5rJmd0O2AgdGFncy4KCiAgICBJIHdpc2ggU21hcnR5UGFudHMgdXNlZCBuYW1lZCBlbnRpdGllcyBsaWtlIGAmYW1wO21kYXNoO2AKICAgIGluc3RlYWQgb2YgZGVjaW1hbC1lbmNvZGVkIGVudGl0ZXMgbGlrZSBgJmFtcDsjODIxMjtgLgoKT3V0cHV0OgoKICAgICZsdDtwJmd0O0kgc3Ryb25nbHkgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgYW55CiAgICAmbHQ7Y29kZSZndDsmYW1wO2x0O2JsaW5rJmFtcDtndDsmbHQ7L2NvZGUmZ3Q7IHRhZ3MuJmx0Oy9wJmd0OwogICAgCiAgICAmbHQ7cCZndDtJIHdpc2ggU21hcnR5UGFudHMgdXNlZCBuYW1lZCBlbnRpdGllcyBsaWtlCiAgICAmbHQ7Y29kZSZndDsmYW1wO2FtcDttZGFzaDsmbHQ7L2NvZGUmZ3Q7IGluc3RlYWQgb2YgZGVjaW1hbC1lbmNvZGVkCiAgICBlbnRpdGVzIGxpa2UgJmx0O2NvZGUmZ3Q7JmFtcDthbXA7IzgyMTI7Jmx0Oy9jb2RlJmd0Oy4mbHQ7L3AmZ3Q7CgoKVG8gc3BlY2lmeSBhbiBlbnRpcmUgYmxvY2sgb2YgcHJlLWZvcm1hdHRlZCBjb2RlLCBpbmRlbnQgZXZlcnkgbGluZSBvZgp0aGUgYmxvY2sgYnkgNCBzcGFjZXMgb3IgMSB0YWIuIEp1c3QgbGlrZSB3aXRoIGNvZGUgc3BhbnMsIGAmYW1wO2AsIGAmbHQ7YCwKYW5kIGAmZ3Q7YCBjaGFyYWN0ZXJzIHdpbGwgYmUgZXNjYXBlZCBhdXRvbWF0aWNhbGx5LgoKTWFya2Rvd246CgogICAgSWYgeW91IHdhbnQgeW91ciBwYWdlIHRvIHZhbGlkYXRlIHVuZGVyIFhIVE1MIDEuMCBTdHJpY3QsCiAgICB5b3UndmUgZ290IHRvIHB1dCBwYXJhZ3JhcGggdGFncyBpbiB5b3VyIGJsb2NrcXVvdGVzOgoKICAgICAgICAmbHQ7YmxvY2txdW90ZSZndDsKICAgICAgICAgICAgJmx0O3AmZ3Q7Rm9yIGV4YW1wbGUuJmx0Oy9wJmd0OwogICAgICAgICZsdDsvYmxvY2txdW90ZSZndDsKCk91dHB1dDoKCiAgICAmbHQ7cCZndDtJZiB5b3Ugd2FudCB5b3VyIHBhZ2UgdG8gdmFsaWRhdGUgdW5kZXIgWEhUTUwgMS4wIFN0cmljdCwKICAgIHlvdSd2ZSBnb3QgdG8gcHV0IHBhcmFncmFwaCB0YWdzIGluIHlvdXIgYmxvY2txdW90ZXM6Jmx0Oy9wJmd0OwogICAgCiAgICAmbHQ7cHJlJmd0OyZsdDtjb2RlJmd0OyZhbXA7bHQ7YmxvY2txdW90ZSZhbXA7Z3Q7CiAgICAgICAgJmFtcDtsdDtwJmFtcDtndDtGb3IgZXhhbXBsZS4mYW1wO2x0Oy9wJmFtcDtndDsKICAgICZhbXA7bHQ7L2Jsb2NrcXVvdGUmYW1wO2d0OwogICAgJmx0Oy9jb2RlJmd0OyZsdDsvcHJlJmd0Owo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6ICdtYXJrZG93bicsCiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogImRlZmF1bHQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1tYXJrZG93bjwvY29kZT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/markdown.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSB7CgogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbUNmZywgeyBuYW1lOiAneG1sJywgaHRtbE1vZGU6IHRydWUgfSk7CgogIHZhciBoZWFkZXIgICA9ICdoZWFkZXInCiAgLCAgIGNvZGUgICAgID0gJ2NvbW1lbnQnCiAgLCAgIHF1b3RlICAgID0gJ3F1b3RlJwogICwgICBsaXN0ICAgICA9ICdzdHJpbmcnCiAgLCAgIGhyICAgICAgID0gJ2hyJwogICwgICBsaW5rdGV4dCA9ICdsaW5rJwogICwgICBsaW5raHJlZiA9ICdzdHJpbmcnCiAgLCAgIGVtICAgICAgID0gJ2VtJwogICwgICBzdHJvbmcgICA9ICdzdHJvbmcnCiAgLCAgIGVtc3Ryb25nID0gJ2Vtc3Ryb25nJzsKCiAgdmFyIGhyUkUgPSAvXihbKlwtPV9dKSg/OlxzKlwxKXsyLH1ccyokLwogICwgICB1bFJFID0gL15bKlwtK11ccysvCiAgLCAgIG9sUkUgPSAvXlswLTldK1wuXHMrLwogICwgICBoZWFkZXJSRSA9IC9eKD86XD17Myx9fC17Myx9KSQvCiAgLCAgIHRleHRSRSA9IC9eW15cWypfXFw8PmBdKy87CgogIGZ1bmN0aW9uIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gZjsKICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpOwogIH0KCiAgZnVuY3Rpb24gc3dpdGNoQmxvY2soc3RyZWFtLCBzdGF0ZSwgZikgewogICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrID0gZjsKICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpOwogIH0KCgogIC8vIEJsb2NrcwoKICBmdW5jdGlvbiBibGFua0xpbmUoc3RhdGUpIHsKICAgIC8vIFJlc2V0IEVNIHN0YXRlCiAgICBzdGF0ZS5lbSA9IGZhbHNlOwogICAgLy8gUmVzZXQgU1RST05HIHN0YXRlCiAgICBzdGF0ZS5zdHJvbmcgPSBmYWxzZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgZnVuY3Rpb24gYmxvY2tOb3JtYWwoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1hdGNoOwogICAgaWYgKHN0YXRlLmluZGVudGF0aW9uRGlmZiA+PSA0KSB7CiAgICAgIHN0YXRlLmluZGVudGF0aW9uIC09IHN0YXRlLmluZGVudGF0aW9uRGlmZjsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gY29kZTsKICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcjJyB8fCBzdHJlYW0ubWF0Y2goaGVhZGVyUkUpKSB7CiAgICAgIHN0YXRlLmhlYWRlciA9IHRydWU7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJz4nKSkgewogICAgICBzdGF0ZS5pbmRlbnRhdGlvbisrOwogICAgICBzdGF0ZS5xdW90ZSA9IHRydWU7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICdbJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGZvb3Rub3RlTGluayk7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChoclJFLCB0cnVlKSkgewogICAgICByZXR1cm4gaHI7CiAgICB9IGVsc2UgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKHVsUkUsIHRydWUpIHx8IHN0cmVhbS5tYXRjaChvbFJFLCB0cnVlKSkgewogICAgICBzdGF0ZS5pbmRlbnRhdGlvbiArPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgIHJldHVybiBsaXN0OwogICAgfQogICAgCiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIHN0YXRlLmlubGluZSk7CiAgfQoKICBmdW5jdGlvbiBodG1sQmxvY2soc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIHN0eWxlID0gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwogICAgaWYgKHN0eWxlID09PSAndGFnJyAmJiBzdGF0ZS5odG1sU3RhdGUudHlwZSAhPT0gJ29wZW5UYWcnICYmICFzdGF0ZS5odG1sU3RhdGUuY29udGV4dCkgewogICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsOwogICAgICBzdGF0ZS5ibG9jayA9IGJsb2NrTm9ybWFsOwogICAgfQogICAgcmV0dXJuIHN0eWxlOwogIH0KCgogIC8vIElubGluZQogIGZ1bmN0aW9uIGdldFR5cGUoc3RhdGUpIHsKICAgIHZhciBzdHlsZXMgPSBbXTsKICAgIAogICAgaWYgKHN0YXRlLnN0cm9uZykgeyBzdHlsZXMucHVzaChzdGF0ZS5lbSA/IGVtc3Ryb25nIDogc3Ryb25nKTsgfQogICAgZWxzZSBpZiAoc3RhdGUuZW0pIHsgc3R5bGVzLnB1c2goZW0pOyB9CiAgICAKICAgIGlmIChzdGF0ZS5oZWFkZXIpIHsgc3R5bGVzLnB1c2goaGVhZGVyKTsgfQogICAgaWYgKHN0YXRlLnF1b3RlKSB7IHN0eWxlcy5wdXNoKHF1b3RlKTsgfQoKICAgIHJldHVybiBzdHlsZXMubGVuZ3RoID8gc3R5bGVzLmpvaW4oJyAnKSA6IG51bGw7CiAgfQoKICBmdW5jdGlvbiBoYW5kbGVUZXh0KHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0ubWF0Y2godGV4dFJFLCB0cnVlKSkgewogICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gdW5kZWZpbmVkOyAgICAgICAgCiAgfQoKICBmdW5jdGlvbiBpbmxpbmVOb3JtYWwoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIHN0eWxlID0gc3RhdGUudGV4dChzdHJlYW0sIHN0YXRlKQogICAgaWYgKHR5cGVvZiBzdHlsZSAhPT0gJ3VuZGVmaW5lZCcpCiAgICAgIHJldHVybiBzdHlsZTsKICAgIAogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIAogICAgaWYgKGNoID09PSAnXFwnKSB7CiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICAgIH0KICAgIGlmIChjaCA9PT0gJ2AnKSB7CiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgaW5saW5lRWxlbWVudChjb2RlLCAnYCcpKTsKICAgIH0KICAgIGlmIChjaCA9PT0gJ1snKSB7CiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgbGlua1RleHQpOwogICAgfQogICAgaWYgKGNoID09PSAnPCcgJiYgc3RyZWFtLm1hdGNoKC9eXHcvLCBmYWxzZSkpIHsKICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgcmV0dXJuIHN3aXRjaEJsb2NrKHN0cmVhbSwgc3RhdGUsIGh0bWxCbG9jayk7CiAgICB9CgogICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKTsKICAgIGlmIChjaCA9PT0gJyonIHx8IGNoID09PSAnXycpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoY2gpKSB7CiAgICAgICAgcmV0dXJuIChzdGF0ZS5zdHJvbmcgPSAhc3RhdGUuc3Ryb25nKSA/IGdldFR5cGUoc3RhdGUpIDogdDsKICAgICAgfQogICAgICByZXR1cm4gKHN0YXRlLmVtID0gIXN0YXRlLmVtKSA/IGdldFR5cGUoc3RhdGUpIDogdDsKICAgIH0KICAgIAogICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogIH0KCiAgZnVuY3Rpb24gbGlua1RleHQoc3RyZWFtLCBzdGF0ZSkgewogICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgaWYgKGNoID09PSAnXFwnKSBzdHJlYW0ubmV4dCgpOwogICAgICBpZiAoY2ggPT09ICddJykgewogICAgICAgIHN0YXRlLmlubGluZSA9IHN0YXRlLmYgPSBsaW5rSHJlZjsKICAgICAgICByZXR1cm4gbGlua3RleHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBsaW5rdGV4dDsKICB9CgogIGZ1bmN0aW9uIGxpbmtIcmVmKHN0cmVhbSwgc3RhdGUpIHsKICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PT0gJygnIHx8IGNoID09PSAnWycpIHsKICAgICAgcmV0dXJuIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBpbmxpbmVFbGVtZW50KGxpbmtocmVmLCBjaCA9PT0gJygnID8gJyknIDogJ10nKSk7CiAgICB9CiAgICByZXR1cm4gJ2Vycm9yJzsKICB9CgogIGZ1bmN0aW9uIGZvb3Rub3RlTGluayhzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW15cXV0qXF06LywgdHJ1ZSkpIHsKICAgICAgc3RhdGUuZiA9IGZvb3Rub3RlVXJsOwogICAgICByZXR1cm4gbGlua3RleHQ7CiAgICB9CiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGlubGluZU5vcm1hbCk7CiAgfQoKICBmdW5jdGlvbiBmb290bm90ZVVybChzdHJlYW0sIHN0YXRlKSB7CiAgICBzdHJlYW0uZWF0U3BhY2UoKTsKICAgIHN0cmVhbS5tYXRjaCgvXlteXHNdKy8sIHRydWUpOwogICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGlubGluZU5vcm1hbDsKICAgIHJldHVybiBsaW5raHJlZjsKICB9CgogIGZ1bmN0aW9uIGlubGluZVJFKGVuZENoYXIpIHsKICAgIGlmICghaW5saW5lUkVbZW5kQ2hhcl0pIHsKICAgICAgLy8gbWF0Y2ggYW55IG5vdC1lc2NhcGVkLW5vbi1lbmRDaGFyIGFuZCBhbnkgZXNjYXBlZCBjaGFyCiAgICAgIC8vIHRoZW4gbWF0Y2ggZW5kQ2hhciBvciBlb2wKICAgICAgaW5saW5lUkVbZW5kQ2hhcl0gPSBuZXcgUmVnRXhwKCdeKD86W15cXFxcXFwnICsgZW5kQ2hhciArICddfFxcXFwuKSooPzpcXCcgKyBlbmRDaGFyICsgJ3wkKScpOwogICAgfQogICAgcmV0dXJuIGlubGluZVJFW2VuZENoYXJdOwogIH0KCiAgZnVuY3Rpb24gaW5saW5lRWxlbWVudCh0eXBlLCBlbmRDaGFyLCBuZXh0KSB7CiAgICBuZXh0ID0gbmV4dCB8fCBpbmxpbmVOb3JtYWw7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBzdHJlYW0ubWF0Y2goaW5saW5lUkUoZW5kQ2hhcikpOwogICAgICBzdGF0ZS5pbmxpbmUgPSBzdGF0ZS5mID0gbmV4dDsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9OwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGY6IGJsb2NrTm9ybWFsLAogICAgICAgIAogICAgICAgIGJsb2NrOiBibG9ja05vcm1hbCwKICAgICAgICBodG1sU3RhdGU6IGh0bWxNb2RlLnN0YXJ0U3RhdGUoKSwKICAgICAgICBpbmRlbnRhdGlvbjogMCwKICAgICAgICAKICAgICAgICBpbmxpbmU6IGlubGluZU5vcm1hbCwKICAgICAgICB0ZXh0OiBoYW5kbGVUZXh0LAogICAgICAgIGVtOiBmYWxzZSwKICAgICAgICBzdHJvbmc6IGZhbHNlLAogICAgICAgIGhlYWRlcjogZmFsc2UsCiAgICAgICAgcXVvdGU6IGZhbHNlCiAgICAgIH07CiAgICB9LAoKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24ocykgewogICAgICByZXR1cm4gewogICAgICAgIGY6IHMuZiwKICAgICAgICAKICAgICAgICBibG9jazogcy5ibG9jaywKICAgICAgICBodG1sU3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKGh0bWxNb2RlLCBzLmh0bWxTdGF0ZSksCiAgICAgICAgaW5kZW50YXRpb246IHMuaW5kZW50YXRpb24sCiAgICAgICAgCiAgICAgICAgaW5saW5lOiBzLmlubGluZSwKICAgICAgICB0ZXh0OiBzLnRleHQsCiAgICAgICAgZW06IHMuZW0sCiAgICAgICAgc3Ryb25nOiBzLnN0cm9uZywKICAgICAgICBoZWFkZXI6IHMuaGVhZGVyLAogICAgICAgIHF1b3RlOiBzLnF1b3RlCiAgICAgIH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXHMqJC8sIHRydWUpKSB7IHJldHVybiBibGFua0xpbmUoc3RhdGUpOyB9CgogICAgICAgIC8vIFJlc2V0IHN0YXRlLmhlYWRlcgogICAgICAgIHN0YXRlLmhlYWRlciA9IGZhbHNlOwogICAgICAgIC8vIFJlc2V0IHN0YXRlLnF1b3RlCiAgICAgICAgc3RhdGUucXVvdGUgPSBmYWxzZTsKCiAgICAgICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrOwogICAgICAgIHZhciBpbmRlbnRhdGlvbiA9IHN0cmVhbS5tYXRjaCgvXlxzKi8sIHRydWUpWzBdLnJlcGxhY2UoL1x0L2csICcgICAgJykubGVuZ3RoOwogICAgICAgIHN0YXRlLmluZGVudGF0aW9uRGlmZiA9IGluZGVudGF0aW9uIC0gc3RhdGUuaW5kZW50YXRpb247CiAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBpbmRlbnRhdGlvbjsKICAgICAgICBpZiAoaW5kZW50YXRpb24gPiAwKSB7IHJldHVybiBudWxsOyB9CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlLmYoc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGJsYW5rTGluZTogYmxhbmtMaW5lLAoKICAgIGdldFR5cGU6IGdldFR5cGUKICB9OwoKfSwgInhtbCIpOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCAibWFya2Rvd24iKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE15U1FMIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJteXNxbC5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNeVNRTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tIENvbW1lbnQgZm9yIHRoZSBjb2RlCi0tIE15U1FMIE1vZGUgZm9yIENvZGVNaXJyb3IyIGJ5IE15U1FMVG9vbHMgaHR0cDovL2dpdGh1Yi5jb20vcGFydHlkcm9pZC9NeVNRTC1Ub29scwpTRUxFQ1QgIFVOSVFVRSBgdmFyMWAgYXMgYHZhcmlhYmxlYCwKICAgICAgICBNQVgoYHZhcjVgKSBhcyBgbWF4YCwKICAgICAgICBNSU4oYHZhcjVgKSBhcyBgbWluYCwKICAgICAgICBTVERFVihgdmFyNWApIGFzIGBkZXZgCkZST00gYHRhYmxlYAoKTEVGVCBKT0lOIGB0YWJsZTJgIE9OIGB2YXIyYCA9IGB2YXJpYWJsZWAKCk9SREVSIEJZIGB2YXIzYCBERVNDCkdST1VQIEJZIGBncm91cHZhcmAKCkxJTUlUIDAsMzA7Cgo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogInRleHQveC1teXNxbCIsCiAgICAgICAgdGFiTW9kZTogImluZGVudCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtbXlzcWw8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/mysql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICoJTXlTUUwgTW9kZSBmb3IgQ29kZU1pcnJvciAyIGJ5IE15U1FMLVRvb2xzCiAqCUBhdXRob3IgSmFtZXMgVGhvcm5lIChwYXJ0eWRyb2lkKQogKglAbGluayAJaHR0cDovL2dpdGh1Yi5jb20vcGFydHlkcm9pZC9NeVNRTC1Ub29scwogKiAJQGxpbmsgCWh0dHA6Ly9teXNxbHRvb2xzLm9yZwogKglAdmVyc2lvbiAwMi9KYW4vMjAxMgoqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm15c3FsIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3JkcykgewogICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiICsgd29yZHMuam9pbigifCIpICsgIikkIiwgImkiKTsKICB9CiAgdmFyIG9wcyA9IHdvcmRSZWdleHAoWyJzdHIiLCAibGFuZyIsICJsYW5nbWF0Y2hlcyIsICJkYXRhdHlwZSIsICJib3VuZCIsICJzYW1ldGVybSIsICJpc2lyaSIsICJpc3VyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJpc2JsYW5rIiwgImlzbGl0ZXJhbCIsICJ1bmlvbiIsICJhIl0pOwogIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoWwogIAkoJ0FDQ0VTU0lCTEUnKSwoJ0FMVEVSJyksKCdBUycpLCgnQkVGT1JFJyksKCdCSU5BUlknKSwoJ0JZJyksKCdDQVNFJyksKCdDSEFSQUNURVInKSwoJ0NPTFVNTicpLCgnQ09OVElOVUUnKSwoJ0NST1NTJyksKCdDVVJSRU5UX1RJTUVTVEFNUCcpLCgnREFUQUJBU0UnKSwoJ0RBWV9NSUNST1NFQ09ORCcpLCgnREVDJyksKCdERUZBVUxUJyksCgkoJ0RFU0MnKSwoJ0RJU1RJTkNUJyksKCdET1VCTEUnKSwoJ0VBQ0gnKSwoJ0VOQ0xPU0VEJyksKCdFWElUJyksKCdGRVRDSCcpLCgnRkxPQVQ4JyksKCdGT1JFSUdOJyksKCdHUkFOVCcpLCgnSElHSF9QUklPUklUWScpLCgnSE9VUl9TRUNPTkQnKSwoJ0lOJyksKCdJTk5FUicpLCgnSU5TRVJUJyksKCdJTlQyJyksKCdJTlQ4JyksCgkoJ0lOVE8nKSwoJ0pPSU4nKSwoJ0tJTEwnKSwoJ0xFRlQnKSwoJ0xJTkVBUicpLCgnTE9DQUxUSU1FJyksKCdMT05HJyksKCdMT09QJyksKCdNQVRDSCcpLCgnTUVESVVNVEVYVCcpLCgnTUlOVVRFX1NFQ09ORCcpLCgnTkFUVVJBTCcpLCgnTlVMTCcpLCgnT1BUSU1JWkUnKSwoJ09SJyksKCdPVVRFUicpLCgnUFJJTUFSWScpLAoJKCdSQU5HRScpLCgnUkVBRF9XUklURScpLCgnUkVHRVhQJyksKCdSRVBFQVQnKSwoJ1JFU1RSSUNUJyksKCdSSUdIVCcpLCgnU0NIRU1BUycpLCgnU0VOU0lUSVZFJyksKCdTSE9XJyksKCdTUEVDSUZJQycpLCgnU1FMU1RBVEUnKSwoJ1NRTF9DQUxDX0ZPVU5EX1JPV1MnKSwoJ1NUQVJUSU5HJyksKCdURVJNSU5BVEVEJyksCgkoJ1RJTllJTlQnKSwoJ1RSQUlMSU5HJyksKCdVTkRPJyksKCdVTkxPQ0snKSwoJ1VTQUdFJyksKCdVVENfREFURScpLCgnVkFMVUVTJyksKCdWQVJDSEFSQUNURVInKSwoJ1dIRVJFJyksKCdXUklURScpLCgnWkVST0ZJTEwnKSwoJ0FMTCcpLCgnQU5EJyksKCdBU0VOU0lUSVZFJyksKCdCSUdJTlQnKSwoJ0JPVEgnKSwoJ0NBU0NBREUnKSwKCSgnQ0hBUicpLCgnQ09MTEFURScpLCgnQ09OU1RSQUlOVCcpLCgnQ1JFQVRFJyksKCdDVVJSRU5UX1RJTUUnKSwoJ0NVUlNPUicpLCgnREFZX0hPVVInKSwoJ0RBWV9TRUNPTkQnKSwoJ0RFQ0xBUkUnKSwoJ0RFTEVURScpLCgnREVURVJNSU5JU1RJQycpLCgnRElWJyksKCdEVUFMJyksKCdFTFNFSUYnKSwoJ0VYSVNUUycpLCgnRkFMU0UnKSwKCSgnRkxPQVQ0JyksKCdGT1JDRScpLCgnRlVMTFRFWFQnKSwoJ0hBVklORycpLCgnSE9VUl9NSU5VVEUnKSwoJ0lHTk9SRScpLCgnSU5GSUxFJyksKCdJTlNFTlNJVElWRScpLCgnSU5UMScpLCgnSU5UNCcpLCgnSU5URVJWQUwnKSwoJ0lURVJBVEUnKSwoJ0tFWVMnKSwoJ0xFQVZFJyksKCdMSU1JVCcpLCgnTE9BRCcpLCgnTE9DSycpLAoJKCdMT05HVEVYVCcpLCgnTUFTVEVSX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQnKSwoJ01FRElVTUlOVCcpLCgnTUlOVVRFX01JQ1JPU0VDT05EJyksKCdNT0RJRklFUycpLCgnTk9fV1JJVEVfVE9fQklOTE9HJyksKCdPTicpLCgnT1BUSU9OQUxMWScpLCgnT1VUJyksKCdQUkVDSVNJT04nKSwoJ1BVUkdFJyksKCdSRUFEUycpLAoJKCdSRUZFUkVOQ0VTJyksKCdSRU5BTUUnKSwoJ1JFUVVJUkUnKSwoJ1JFVk9LRScpLCgnU0NIRU1BJyksKCdTRUxFQ1QnKSwoJ1NFVCcpLCgnU1BBVElBTCcpLCgnU1FMRVhDRVBUSU9OJyksKCdTUUxfQklHX1JFU1VMVCcpLCgnU1NMJyksKCdUQUJMRScpLCgnVElOWUJMT0InKSwoJ1RPJyksKCdUUlVFJyksKCdVTklRVUUnKSwKCSgnVVBEQVRFJyksKCdVU0lORycpLCgnVVRDX1RJTUVTVEFNUCcpLCgnVkFSQ0hBUicpLCgnV0hFTicpLCgnV0lUSCcpLCgnWUVBUl9NT05USCcpLCgnQUREJyksKCdBTkFMWVpFJyksKCdBU0MnKSwoJ0JFVFdFRU4nKSwoJ0JMT0InKSwoJ0NBTEwnKSwoJ0NIQU5HRScpLCgnQ0hFQ0snKSwoJ0NPTkRJVElPTicpLCgnQ09OVkVSVCcpLAoJKCdDVVJSRU5UX0RBVEUnKSwoJ0NVUlJFTlRfVVNFUicpLCgnREFUQUJBU0VTJyksKCdEQVlfTUlOVVRFJyksKCdERUNJTUFMJyksKCdERUxBWUVEJyksKCdERVNDUklCRScpLCgnRElTVElOQ1RST1cnKSwoJ0RST1AnKSwoJ0VMU0UnKSwoJ0VTQ0FQRUQnKSwoJ0VYUExBSU4nKSwoJ0ZMT0FUJyksKCdGT1InKSwoJ0ZST00nKSwKCSgnR1JPVVAnKSwoJ0hPVVJfTUlDUk9TRUNPTkQnKSwoJ0lGJyksKCdJTkRFWCcpLCgnSU5PVVQnKSwoJ0lOVCcpLCgnSU5UMycpLCgnSU5URUdFUicpLCgnSVMnKSwoJ0tFWScpLCgnTEVBRElORycpLCgnTElLRScpLCgnTElORVMnKSwoJ0xPQ0FMVElNRVNUQU1QJyksKCdMT05HQkxPQicpLCgnTE9XX1BSSU9SSVRZJyksCgkoJ01FRElVTUJMT0InKSwoJ01JRERMRUlOVCcpLCgnTU9EJyksKCdOT1QnKSwoJ05VTUVSSUMnKSwoJ09QVElPTicpLCgnT1JERVInKSwoJ09VVEZJTEUnKSwoJ1BST0NFRFVSRScpLCgnUkVBRCcpLCgnUkVBTCcpLCgnUkVMRUFTRScpLCgnUkVQTEFDRScpLCgnUkVUVVJOJyksKCdSTElLRScpLCgnU0VDT05EX01JQ1JPU0VDT05EJyksCgkoJ1NFUEFSQVRPUicpLCgnU01BTExJTlQnKSwoJ1NRTCcpLCgnU1FMV0FSTklORycpLCgnU1FMX1NNQUxMX1JFU1VMVCcpLCgnU1RSQUlHSFRfSk9JTicpLCgnVEhFTicpLCgnVElOWVRFWFQnKSwoJ1RSSUdHRVInKSwoJ1VOSU9OJyksKCdVTlNJR05FRCcpLCgnVVNFJyksKCdVVENfVElNRScpLCgnVkFSQklOQVJZJyksKCdWQVJZSU5HJyksCgkoJ1dISUxFJyksKCdYT1InKSwoJ0ZVTEwnKSwoJ0NPTFVNTlMnKSwoJ01JTicpLCgnTUFYJyksKCdTVERFVicpLCgnQ09VTlQnKQogIF0pOwogIHZhciBvcGVyYXRvckNoYXJzID0gL1sqK1wtPD49JnxdLzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBjdXJQdW5jID0gbnVsbDsKICAgIGlmIChjaCA9PSAiJCIgfHwgY2ggPT0gIj8iKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXltcd1xkXSovKTsKICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI8IiAmJiAhc3RyZWFtLm1hdGNoKC9eW1xzXHUwMGEwPV0vLCBmYWxzZSkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eW15cc1x1MDBhMD5dKj4/Lyk7CiAgICAgIHJldHVybiAiYXRvbSI7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTGl0ZXJhbChjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICJgIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuT3BMaXRlcmFsKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoL1t7fVwoXCksXC47XFtcXV0vLnRlc3QoY2gpKSB7CiAgICAgIGN1clB1bmMgPSBjaDsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLSIpIHsKCQljaDIgPSBzdHJlYW0ubmV4dCgpOwoJCWlmKGNoMj09Ii0iKQoJCXsKCQkJc3RyZWFtLnNraXBUb0VuZCgpOwoJCQlyZXR1cm4gImNvbW1lbnQiOwoJCX0KCiAgICB9CiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZFwuX1wtXS8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW19cd1xkXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9cLV0vKTsKICAgICAgICByZXR1cm4gImF0b20iOwogICAgICB9CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwgdHlwZTsKICAgICAgaWYgKG9wcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBlbHNlIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuTGl0ZXJhbChxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gdG9rZW5PcExpdGVyYWwocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoOwogICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH07CiAgfQoKCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHR5cGUsIGNvbCkgewogICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCBpbmRlbnQ6IHN0YXRlLmluZGVudCwgY29sOiBjb2wsIHR5cGU6IHR5cGV9OwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDsKICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgICBpbmRlbnQ6IDAsCiAgICAgICAgICAgICAgY29sOiAwfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCkgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgaWYgKHN0eWxlICE9ICJjb21tZW50IiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gInBhdHRlcm4iKSB7CiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsICIpIiwgc3RyZWFtLmNvbHVtbigpKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCAiXSIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgIn0iLCBzdHJlYW0uY29sdW1uKCkpOwogICAgICBlbHNlIGlmICgvW1xdXH1cKV0vLnRlc3QoY3VyUHVuYykpIHsKICAgICAgICB3aGlsZSAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBjdXJQdW5jID09IHN0YXRlLmNvbnRleHQudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiLiIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoL2F0b218c3RyaW5nfHZhcmlhYmxlLy50ZXN0KHN0eWxlKSAmJiBzdGF0ZS5jb250ZXh0KSB7CiAgICAgICAgaWYgKC9bXH1cXV0vLnRlc3Qoc3RhdGUuY29udGV4dC50eXBlKSkKICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCAicGF0dGVybiIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09ICJwYXR0ZXJuIiAmJiAhc3RhdGUuY29udGV4dC5hbGlnbikgewogICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoL1tcXVx9XS8udGVzdChmaXJzdENoYXIpKQogICAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQudHlwZSA9PSAicGF0dGVybiIpIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CgogICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTsKICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKQogICAgICAgIHJldHVybiBjb250ZXh0LmNvbDsKICAgICAgZWxzZSBpZiAoY29udGV4dC5hbGlnbikKICAgICAgICByZXR1cm4gY29udGV4dC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb250ZXh0LmluZGVudCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbXlzcWwiLCAibXlzcWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE5UcmlwbGVzIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJudHJpcGxlcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgfQogICAgPC9zdHlsZT4gICAKICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTlRyaXBsZXMgbW9kZTwvaDE+Cjxmb3JtPgo8dGV4dGFyZWEgaWQ9Im50cmlwbGVzIiBuYW1lPSJudHJpcGxlcyI+ICAgIAo8aHR0cDovL1N1YjE+ICAgICA8aHR0cDovL3ByZWQxPiAgICAgPGh0dHA6Ly9vYmo+IC4KPGh0dHA6Ly9TdWIyPiAgICAgPGh0dHA6Ly9wcmVkMiNhbjI+ICJsaXRlcmFsIDEiIC4KPGh0dHA6Ly9TdWIzI2FuMz4gPGh0dHA6Ly9wcmVkMz4gICAgIF86Ym5vZGUzIC4KXzpibm9kZTQgICAgICAgICAgPGh0dHA6Ly9wcmVkND4gICAgICJsaXRlcmFsIDIiQGxhbmcgLgpfOmJub2RlNSAgICAgICAgICA8aHR0cDovL3ByZWQ1PiAgICAgImxpdGVyYWwgMyJeXjxodHRwOi8vdHlwZT4gLgo8L3RleHRhcmVhPgo8L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJudHJpcGxlcyIpLCB7fSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L24tdHJpcGxlczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/ntriples.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBUaGlzIHNjcmlwdCBwcm92aWRlcyBzeW50YXggaGlnaGxpZ2h0aW5nIHN1cHBvcnQgZm9yIAoqIHRoZSBOdHJpcGxlcyBmb3JtYXQuCiogTnRyaXBsZXMgZm9ybWF0IHNwZWNpZmljYXRpb246IAoqICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9yZGYtdGVzdGNhc2VzLyNudHJpcGxlcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qIAogICAgVGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGRlZmluZXMgdGhlIGRlZmluZWQgQVNGIGdyYW1tYXIgdHJhbnNpdGlvbnMuCgogICAgcHJlX3N1YmplY3QgLT4KICAgICAgICB7CiAgICAgICAgKCB3cml0aW5nX3N1YmplY3RfdXJpIHwgd3JpdGluZ19ibm9kZV91cmkgKQogICAgICAgICAgICAtPiBwcmVfcHJlZGljYXRlIAogICAgICAgICAgICAgICAgLT4gd3JpdGluZ19wcmVkaWNhdGVfdXJpIAogICAgICAgICAgICAgICAgICAgIC0+IHByZV9vYmplY3QgCiAgICAgICAgICAgICAgICAgICAgICAgIC0+IHdyaXRpbmdfb2JqZWN0X3VyaSB8IHdyaXRpbmdfb2JqZWN0X2Jub2RlIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdfb2JqZWN0X2xpdGVyYWwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gd3JpdGluZ19saXRlcmFsX2xhbmcgfCB3cml0aW5nX2xpdGVyYWxfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IHBvc3Rfb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gQkVHSU4KICAgICAgICAgfSBvdGhlcndpc2UgewogICAgICAgICAgICAgLT4gRVJST1IKICAgICAgICAgfQoqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm50cmlwbGVzIiwgZnVuY3Rpb24oKSB7ICAKCiAgTG9jYXRpb24gPSB7CiAgICBQUkVfU1VCSkVDVCAgICAgICAgIDogMCwKICAgIFdSSVRJTkdfU1VCX1VSSSAgICAgOiAxLAogICAgV1JJVElOR19CTk9ERV9VUkkgICA6IDIsCiAgICBQUkVfUFJFRCAgICAgICAgICAgIDogMywKICAgIFdSSVRJTkdfUFJFRF9VUkkgICAgOiA0LAogICAgUFJFX09CSiAgICAgICAgICAgICA6IDUsCiAgICBXUklUSU5HX09CSl9VUkkgICAgIDogNiwKICAgIFdSSVRJTkdfT0JKX0JOT0RFICAgOiA3LAogICAgV1JJVElOR19PQkpfTElURVJBTCA6IDgsCiAgICBXUklUSU5HX0xJVF9MQU5HICAgIDogOSwKICAgIFdSSVRJTkdfTElUX1RZUEUgICAgOiAxMCwKICAgIFBPU1RfT0JKICAgICAgICAgICAgOiAxMSwKICAgIEVSUk9SICAgICAgICAgICAgICAgOiAxMgogIH07CiAgZnVuY3Rpb24gdHJhbnNpdFN0YXRlKGN1cnJTdGF0ZSwgYykgewogICAgdmFyIGN1cnJMb2NhdGlvbiA9IGN1cnJTdGF0ZS5sb2NhdGlvbjsKICAgIHZhciByZXQ7CiAgICAKICAgIC8vIE9wZW5pbmcuCiAgICBpZiAgICAgKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19TVUJfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1NVQkpFQ1QgJiYgYyA9PSAnXycpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1BSRUQgICAgJiYgYyA9PSAnPCcpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfUFJFRF9VUkk7CiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfT0JKICAgICAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19PQkpfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgJiYgYyA9PSAnXycpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0JOT0RFOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgJiYgYyA9PSAnIicpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0xJVEVSQUw7CiAgICAKICAgIC8vIENsb3NpbmcuCiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX1NVQl9VUkkgICAgICYmIGMgPT0gJz4nKSByZXQgPSBMb2NhdGlvbi5QUkVfUFJFRDsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJICAgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBSRV9QUkVEOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19QUkVEX1VSSSAgICAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUFJFX09CSjsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfT0JKX1VSSSAgICAgJiYgYyA9PSAnPicpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfQk5PREUgICAmJiBjID09ICcgJykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7CiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJyInKSByZXQgPSBMb2NhdGlvbi5QT1NUX09CSjsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfTElUX0xBTkcgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19MSVRfVFlQRSAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7CiAgICAKICAgIC8vIENsb3NpbmcgdHlwZWQgYW5kIGxhbmd1YWdlIGxpdGVyYWwuCiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJ0AnKSByZXQgPSBMb2NhdGlvbi5XUklUSU5HX0xJVF9MQU5HOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfTElURVJBTCAmJiBjID09ICdeJykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19MSVRfVFlQRTsKCiAgICAvLyBTcGFjZXMuCiAgICBlbHNlIGlmKCBjID09ICcgJyAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCB8fCAKICAgICAgICAgICAgICAgY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBSRV9QUkVEICAgIHx8IAogICAgICAgICAgICAgICBjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgfHwgCiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QT1NUX09CSgogICAgICAgICAgICAgKQogICAgICAgICAgICkgcmV0ID0gY3VyckxvY2F0aW9uOwogICAgCiAgICAvLyBSZXNldC4KICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBPU1RfT0JKICYmIGMgPT0gJy4nKSByZXQgPSBMb2NhdGlvbi5QUkVfU1VCSkVDVDsgICAgCiAgICAKICAgIC8vIEVycm9yCiAgICBlbHNlIHJldCA9IExvY2F0aW9uLkVSUk9SOwogICAgCiAgICBjdXJyU3RhdGUubG9jYXRpb249cmV0OwogIH0KCiAgdW50aWxTcGFjZSAgPSBmdW5jdGlvbihjKSB7IHJldHVybiBjICE9ICcgJzsgfTsKICB1bnRpbEVuZFVSSSA9IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIGMgIT0gJz4nOyB9OwogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB7IAogICAgICAgICAgIGxvY2F0aW9uIDogTG9jYXRpb24uUFJFX1NVQkpFQ1QsCiAgICAgICAgICAgdXJpcyAgICAgOiBbXSwKICAgICAgICAgICBhbmNob3JzICA6IFtdLAogICAgICAgICAgIGJub2RlcyAgIDogW10sCiAgICAgICAgICAgbGFuZ3MgICAgOiBbXSwKICAgICAgICAgICB0eXBlcyAgICA6IFtdCiAgICAgICB9OwogICAgfSwKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgIGlmKGNoID09ICc8JykgewogICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgICAgdmFyIHBhcnNlZFVSSSA9ICcnOwogICAgICAgICBzdHJlYW0uZWF0V2hpbGUoIGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyMnICYmIGMgIT0gJz4nICkgeyBwYXJzZWRVUkkgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30gKTsKICAgICAgICAgc3RhdGUudXJpcy5wdXNoKHBhcnNlZFVSSSk7CiAgICAgICAgIGlmKCBzdHJlYW0ubWF0Y2goJyMnLCBmYWxzZSkgKSByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnPicpOwogICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgfQogICAgICBpZihjaCA9PSAnIycpIHsKICAgICAgICB2YXIgcGFyc2VkQW5jaG9yID0gJyc7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoYyAhPSAnPicgJiYgYyAhPSAnICcpIHsgcGFyc2VkQW5jaG9yKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlfSk7CiAgICAgICAgc3RhdGUuYW5jaG9ycy5wdXNoKHBhcnNlZEFuY2hvcik7CiAgICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJzsKICAgICAgfQogICAgICBpZihjaCA9PSAnPicpIHsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTsKICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICB9CiAgICAgIGlmKGNoID09ICdfJykgewogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7CiAgICAgICAgICB2YXIgcGFyc2VkQk5vZGUgPSAnJzsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShmdW5jdGlvbihjKSB7IGlmKCBjICE9ICcgJyApIHsgcGFyc2VkQk5vZGUgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30pOwogICAgICAgICAgc3RhdGUuYm5vZGVzLnB1c2gocGFyc2VkQk5vZGUpOwogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJyAnKTsKICAgICAgICAgIHJldHVybiAnYnVpbHRpbic7CiAgICAgIH0KICAgICAgaWYoY2ggPT0gJyInKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSggZnVuY3Rpb24oYykgeyByZXR1cm4gYyAhPSAnIic7IH0gKTsKICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICBpZiggc3RyZWFtLnBlZWsoKSAhPSAnQCcgJiYgc3RyZWFtLnBlZWsoKSAhPSAnXicgKSB7CiAgICAgICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnIicpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICdzdHJpbmcnOwogICAgICB9CiAgICAgIGlmKCBjaCA9PSAnQCcgKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICdAJyk7CiAgICAgICAgICB2YXIgcGFyc2VkTGFuZyA9ICcnOwogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyAnICkgeyBwYXJzZWRMYW5nICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9KTsKICAgICAgICAgIHN0YXRlLmxhbmdzLnB1c2gocGFyc2VkTGFuZyk7CiAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnICcpOwogICAgICAgICAgcmV0dXJuICdzdHJpbmctMic7CiAgICAgIH0KICAgICAgaWYoIGNoID09ICdeJyApIHsKICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICdeJyk7CiAgICAgICAgICB2YXIgcGFyc2VkVHlwZSA9ICcnOwogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJz4nICkgeyBwYXJzZWRUeXBlICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9ICk7CiAgICAgICAgICBzdGF0ZS50eXBlcy5wdXNoKHBhcnNlZFR5cGUpOwogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTsKICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICB9CiAgICAgIGlmKCBjaCA9PSAnICcgKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgfQogICAgICBpZiggY2ggPT0gJy4nICkgewogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7CiAgICAgIH0KICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9uLXRyaXBsZXMiLCAibnRyaXBsZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBhc2NhbCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGFzY2FsLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQYXNjYWwgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CigqIEV4YW1wbGUgUGFzY2FsIGNvZGUgKikKCndoaWxlIGEgPD4gYiBkbyB3cml0ZWxuKCdXYWl0aW5nJyk7CiAKaWYgYSA+IGIgdGhlbiAKICB3cml0ZWxuKCdDb25kaXRpb24gbWV0JykKZWxzZSAKICB3cml0ZWxuKCdDb25kaXRpb24gbm90IG1ldCcpOwogCmZvciBpIDo9IDEgdG8gMTAgZG8gCiAgd3JpdGVsbignSXRlcmF0aW9uOiAnLCBpOjEpOwogCnJlcGVhdAogIGEgOj0gYSArIDEKdW50aWwgYSA9IDEwOwogCmNhc2UgaSBvZgogIDA6IHdyaXRlKCd6ZXJvJyk7CiAgMTogd3JpdGUoJ29uZScpOwogIDI6IHdyaXRlKCd0d28nKQplbmQ7CjwvdGV4dGFyZWE+PC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtcGFzY2FsIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGFzY2FsPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExIHNvdWNlTGFpciA8c3VwcG9ydEBzb3VyY2VsYWlyLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/pascal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwYXNjYWwiLCBmdW5jdGlvbihjb25maWcpIHsKICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGtleXdvcmRzID0gd29yZHMoImFuZCBhcnJheSBiZWdpbiBjYXNlIGNvbnN0IGRpdiBkbyBkb3dudG8gZWxzZSBlbmQgZmlsZSBmb3IgZm9yd2FyZCBpbnRlZ2VyICIgKwogICAgICAgICAgICAgICAgICAgICAgICJib29sZWFuIGNoYXIgZnVuY3Rpb24gZ290byBpZiBpbiBsYWJlbCBtb2QgbmlsIG5vdCBvZiBvciBwYWNrZWQgcHJvY2VkdXJlICIgKwogICAgICAgICAgICAgICAgICAgICAgICJwcm9ncmFtIHJlY29yZCByZXBlYXQgc2V0IHN0cmluZyB0aGVuIHRvIHR5cGUgdW50aWwgdmFyIHdoaWxlIHdpdGgiKTsKICB2YXIgYXRvbXMgPSB7Im51bGwiOiB0cnVlfTsKCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xcL10vOwoKICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiIyIgJiYgc3RhdGUuc3RhcnRPZkxpbmUpIHsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gIm1ldGEiOwogICAgfQogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmIChjaCA9PSAiKCIgJiYgc3RyZWFtLmVhdCgiKiIpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50OwogICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgaWYgKC9bXFtcXXt9XChcKSw7XDpcLl0vLnRlc3QoY2gpKSB7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgfQogICAgfQogICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImtleXdvcmQiOwogICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiAiYXRvbSI7CiAgICByZXR1cm4gIndvcmQiOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlOwogICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoZW5kIHx8ICFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIikiICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICB9CiAgICByZXR1cm4gImNvbW1lbnQiOwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IG51bGx9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IiB8fCBzdHlsZSA9PSAibWV0YSIpIHJldHVybiBzdHlsZTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAie30iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1wYXNjYWwiLCAicGFzY2FsIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBlcmwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InBlcmwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFBlcmwgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMhL3Vzci9iaW4vcGVybAoKdXNlIFNvbWV0aGluZyBxdyhmdW5jMSBmdW5jMik7CgojIHN0cmluZ3MKbXkgJHMxID0gcXEnc2luZ2xlIGxpbmUnOwpvdXIgJHMyID0gcShtdWx0aS0KICAgICAgICAgICAgICBsaW5lKTsKCj1pdGVtIFNvbWV0aGluZwoJRXhhbXBsZS4KPWN1dAoKbXkgJGh0bWw9PDwnSFRNTCcKPGh0bWw+Cjx0aXRsZT5oaSE8L3RpdGxlPgo8L2h0bWw+CkhUTUwKCnByaW50ICJmaXJzdCwiLmpvaW4oJywnLCAnc2Vjb25kJywgcXF+dGhpcmR+KTsKCmlmKCRzMSA9fiBtWyg/PCFccykobC5uZSlcel1vKSB7CgkkaC0+eyQxfT0kJC4nIHByZWRlZmluZWQgdmFyaWFibGVzJzsKCSRzMiA9fiBzL1wtbGluZS8vb3g7CgkkczEgPX4gc1sKCQkgIGxpbmUgXQoJCVsKCQkgIGJsb2NrCgkJXW94Owp9CgoxOyAjIG51bWJlcnMgYW5kIGNvbW1lbnRzCgpfX0VORF9fCnNvbWV0aGluZy4uLgoKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXBlcmw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IFNhYmFjYSA8bWFpbEBzYWJhY2EuY29tPiB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/perl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvcjIgbW9kZS9wZXJsL3BlcmwuanMgKHRleHQveC1wZXJsKSBiZXRhIDAuMTAgKDIwMTEtMTEtMDgpCi8vIFRoaXMgaXMgYSBwYXJ0IG9mIENvZGVNaXJyb3IgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2FiYWNhL0NvZGVNaXJyb3JfbW9kZV9wZXJsIChtYWlsQHNhYmFjYS5jb20pCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGVybCIsZnVuY3Rpb24oY29uZmlnLHBhcnNlckNvbmZpZyl7CgkvLyBodHRwOi8vcGVybGRvYy5wZXJsLm9yZwoJdmFyIFBFUkw9ewkJCQkgICAgCS8vICAgbnVsbCAtIG1hZ2ljIHRvdWNoCgkJCQkJCQkvLyAgIDEgLSBrZXl3b3JkCgkJCQkJCQkvLyAgIDIgLSBkZWYKCQkJCQkJCS8vICAgMyAtIGF0b20KCQkJCQkJCS8vICAgNCAtIG9wZXJhdG9yCgkJCQkJCQkvLyAgIDUgLSB2YXJpYWJsZS0yIChwcmVkZWZpbmVkKQoJCQkJCQkJLy8gICBbeCx5XSAtIHg9MSwyLDM7IHk9bXVzdCBiZSBkZWZpbmVkIGlmIHh7Li4ufQoJCQkJCQkvLwlQRVJMIG9wZXJhdG9ycwoJCSctPicJCQkJOiAgIDQsCgkJJysrJwkJCQk6ICAgNCwKCQknLS0nCQkJCTogICA0LAoJCScqKicJCQkJOiAgIDQsCgkJCQkJCQkvLyAgICEgfiBcIGFuZCB1bmFyeSArIGFuZCAtCgkJJz1+JwkJCQk6ICAgNCwKCQknIX4nCQkJCTogICA0LAoJCScqJwkJCQk6ICAgNCwKCQknLycJCQkJOiAgIDQsCgkJJyUnCQkJCTogICA0LAoJCSd4JwkJCQk6ICAgNCwKCQknKycJCQkJOiAgIDQsCgkJJy0nCQkJCTogICA0LAoJCScuJwkJCQk6ICAgNCwKCQknPDwnCQkJCTogICA0LAoJCSc+PicJCQkJOiAgIDQsCgkJCQkJCQkvLyAgIG5hbWVkIHVuYXJ5IG9wZXJhdG9ycwoJCSc8JwkJCQk6ICAgNCwKCQknPicJCQkJOiAgIDQsCgkJJzw9JwkJCQk6ICAgNCwKCQknPj0nCQkJCTogICA0LAoJCSdsdCcJCQkJOiAgIDQsCgkJJ2d0JwkJCQk6ICAgNCwKCQknbGUnCQkJCTogICA0LAoJCSdnZScJCQkJOiAgIDQsCgkJJz09JwkJCQk6ICAgNCwKCQknIT0nCQkJCTogICA0LAoJCSc8PT4nCQkJCTogICA0LAoJCSdlcScJCQkJOiAgIDQsCgkJJ25lJwkJCQk6ICAgNCwKCQknY21wJwkJCQk6ICAgNCwKCQknfn4nCQkJCTogICA0LAoJCScmJwkJCQk6ICAgNCwKCQknfCcJCQkJOiAgIDQsCgkJJ14nCQkJCTogICA0LAoJCScmJicJCQkJOiAgIDQsCgkJJ3x8JwkJCQk6ICAgNCwKCQknLy8nCQkJCTogICA0LAoJCScuLicJCQkJOiAgIDQsCgkJJy4uLicJCQkJOiAgIDQsCgkJJz8nCQkJCTogICA0LAoJCSc6JwkJCQk6ICAgNCwKCQknPScJCQkJOiAgIDQsCgkJJys9JwkJCQk6ICAgNCwKCQknLT0nCQkJCTogICA0LAoJCScqPScJCQkJOiAgIDQsCS8vICAgZXRjLiA/Pz8KCQknLCcJCQkJOiAgIDQsCgkJJz0+JwkJCQk6ICAgNCwKCQknOjonCQkJCTogICA0LAoJCQkJICAgCQkJLy8gICBsaXN0IG9wZXJhdG9ycyAocmlnaHR3YXJkKQoJCSdub3QnCQkJCTogICA0LAoJCSdhbmQnCQkJCTogICA0LAoJCSdvcicJCQkJOiAgIDQsCgkJJ3hvcicJCQkJOiAgIDQsCgkJCQkJCS8vCVBFUkwgcHJlZGVmaW5lZCB2YXJpYWJsZXMgKEkga25vdywgd2hhdCB0aGlzIGlzIGEgcGFyYW5vaWQgaWRlYSwgYnV0IG1heSBiZSBuZWVkZWQgZm9yIHBlb3BsZSwgd2hvIGxlYXJuIFBFUkwsIGFuZCBmb3IgbWUgYXMgd2VsbCwgLi4uYW5kIG1heSBiZSBmb3IgeW91PzspCgkJJ0JFR0lOJwkJCQk6ICAgWzUsMV0sCgkJJ0VORCcJCQkJOiAgIFs1LDFdLAoJCSdQUklOVCcJCQkJOiAgIFs1LDFdLAoJCSdQUklOVEYnCQkJOiAgIFs1LDFdLAoJCSdHRVRDJwkJCQk6ICAgWzUsMV0sCgkJJ1JFQUQnCQkJCTogICBbNSwxXSwKCQknUkVBRExJTkUnCQkJOiAgIFs1LDFdLAoJCSdERVNUUk9ZJwkJCTogICBbNSwxXSwKCQknVElFJwkJCQk6ICAgWzUsMV0sCgkJJ1RJRUhBTkRMRScJCQk6ICAgWzUsMV0sCgkJJ1VOVElFJwkJCQk6ICAgWzUsMV0sCgkJJ1NURElOJwkJCQk6ICAgIDUsCgkJJ1NURElOX1RPUCcJCQk6ICAgIDUsCgkJJ1NURE9VVCcJCQk6ICAgIDUsCgkJJ1NURE9VVF9UT1AnCQkJOiAgICA1LAoJCSdTVERFUlInCQkJOiAgICA1LAoJCSdTVERFUlJfVE9QJwkJCTogICAgNSwKCQknJEFSRycJCQkJOiAgICA1LAoJCSckXycJCQkJOiAgICA1LAoJCSdAQVJHJwkJCQk6ICAgIDUsCgkJJ0BfJwkJCQk6ICAgIDUsCgkJJyRMSVNUX1NFUEFSQVRPUicJCTogICAgNSwKCQknJCInCQkJCTogICAgNSwKCQknJFBST0NFU1NfSUQnCQkJOiAgICA1LAoJCSckUElEJwkJCQk6ICAgIDUsCgkJJyQkJwkJCQk6ICAgIDUsCgkJJyRSRUFMX0dST1VQX0lEJwkJOiAgICA1LAoJCSckR0lEJwkJCQk6ICAgIDUsCgkJJyQoJwkJCQk6ICAgIDUsCgkJJyRFRkZFQ1RJVkVfR1JPVVBfSUQnCQk6ICAgIDUsCgkJJyRFR0lEJwkJCQk6ICAgIDUsCgkJJyQpJwkJCQk6ICAgIDUsCgkJJyRQUk9HUkFNX05BTUUnCQkJOiAgICA1LAoJCSckMCcJCQkJOiAgICA1LAoJCSckU1VCU0NSSVBUX1NFUEFSQVRPUicJCTogICAgNSwKCQknJFNVQlNFUCcJCQk6ICAgIDUsCgkJJyQ7JwkJCQk6ICAgIDUsCgkJJyRSRUFMX1VTRVJfSUQnCQkJOiAgICA1LAoJCSckVUlEJwkJCQk6ICAgIDUsCgkJJyQ8JwkJCQk6ICAgIDUsCgkJJyRFRkZFQ1RJVkVfVVNFUl9JRCcJCTogICAgNSwKCQknJEVVSUQnCQkJCTogICAgNSwKCQknJD4nCQkJCTogICAgNSwKCQknJGEnCQkJCTogICAgNSwKCQknJGInCQkJCTogICAgNSwKCQknJENPTVBJTElORycJCQk6ICAgIDUsCgkJJyReQycJCQkJOiAgICA1LAoJCSckREVCVUdHSU5HJwkJCTogICAgNSwKCQknJF5EJwkJCQk6ICAgIDUsCgkJJyR7XkVOQ09ESU5HfScJCQk6ICAgIDUsCgkJJyRFTlYnCQkJCTogICAgNSwKCQknJUVOVicJCQkJOiAgICA1LAoJCSckU1lTVEVNX0ZEX01BWCcJCTogICAgNSwKCQknJF5GJwkJCQk6ICAgIDUsCgkJJ0BGJwkJCQk6ICAgIDUsCgkJJyR7XkdMT0JBTF9QSEFTRX0nCQk6ICAgIDUsCgkJJyReSCcJCQkJOiAgICA1LAoJCSclXkgnCQkJCTogICAgNSwKCQknQElOQycJCQkJOiAgICA1LAoJCSclSU5DJwkJCQk6ICAgIDUsCgkJJyRJTlBMQUNFX0VESVQnCQkJOiAgICA1LAoJCSckXkknCQkJCTogICAgNSwKCQknJF5NJwkJCQk6ICAgIDUsCgkJJyRPU05BTUUnCQkJOiAgICA1LAoJCSckXk8nCQkJCTogICAgNSwKCQknJHteT1BFTn0nCQkJOiAgICA1LAoJCSckUEVSTERCJwkJCTogICAgNSwKCQknJF5QJwkJCQk6ICAgIDUsCgkJJyRTSUcnCQkJCTogICAgNSwKCQknJVNJRycJCQkJOiAgICA1LAoJCSckQkFTRVRJTUUnCQkJOiAgICA1LAoJCSckXlQnCQkJCTogICAgNSwKCQknJHteVEFJTlR9JwkJCTogICAgNSwKCQknJHteVU5JQ09ERX0nCQkJOiAgICA1LAoJCScke15VVEY4Q0FDSEV9JwkJCTogICAgNSwKCQknJHteVVRGOExPQ0FMRX0nCQk6ICAgIDUsCgkJJyRQRVJMX1ZFUlNJT04nCQkJOiAgICA1LAoJCSckXlYnCQkJCTogICAgNSwKCQknJHteV0lOMzJfU0xPUFBZX1NUQVR9JwkJOiAgICA1LAoJCSckRVhFQ1VUQUJMRV9OQU1FJwkJOiAgICA1LAoJCSckXlgnCQkJCTogICAgNSwKCQknJDEnCQkJCTogICAgNSwJLy8gLSByZWdleHAgJDEsICQyLi4uCgkJJyRNQVRDSCcJCQk6ICAgIDUsCgkJJyQmJwkJCQk6ICAgIDUsCgkJJyR7Xk1BVENIfScJCQk6ICAgIDUsCgkJJyRQUkVNQVRDSCcJCQk6ICAgIDUsCgkJJyRgJwkJCQk6ICAgIDUsCgkJJyR7XlBSRU1BVENIfScJCQk6ICAgIDUsCgkJJyRQT1NUTUFUQ0gnCQkJOiAgICA1LAoJCSIkJyIJCQkJOiAgICA1LAoJCScke15QT1NUTUFUQ0h9JwkJCTogICAgNSwKCQknJExBU1RfUEFSRU5fTUFUQ0gnCQk6ICAgIDUsCgkJJyQrJwkJCQk6ICAgIDUsCgkJJyRMQVNUX1NVQk1BVENIX1JFU1VMVCcJCTogICAgNSwKCQknJF5OJwkJCQk6ICAgIDUsCgkJJ0BMQVNUX01BVENIX0VORCcJCTogICAgNSwKCQknQCsnCQkJCTogICAgNSwKCQknJUxBU1RfUEFSRU5fTUFUQ0gnCQk6ICAgIDUsCgkJJyUrJwkJCQk6ICAgIDUsCgkJJ0BMQVNUX01BVENIX1NUQVJUJwkJOiAgICA1LAoJCSdALScJCQkJOiAgICA1LAoJCSclTEFTVF9NQVRDSF9TVEFSVCcJCTogICAgNSwKCQknJS0nCQkJCTogICAgNSwKCQknJExBU1RfUkVHRVhQX0NPREVfUkVTVUxUJwk6ICAgIDUsCgkJJyReUicJCQkJOiAgICA1LAoJCScke15SRV9ERUJVR19GTEFHU30nCQk6ICAgIDUsCgkJJyR7XlJFX1RSSUVfTUFYQlVGfScJCTogICAgNSwKCQknJEFSR1YnCQkJCTogICAgNSwKCQknQEFSR1YnCQkJCTogICAgNSwKCQknQVJHVicJCQkJOiAgICA1LAoJCSdBUkdWT1VUJwkJCTogICAgNSwKCQknJE9VVFBVVF9GSUVMRF9TRVBBUkFUT1InCTogICAgNSwKCQknJE9GUycJCQkJOiAgICA1LAoJCSckLCcJCQkJOiAgICA1LAoJCSckSU5QVVRfTElORV9OVU1CRVInCQk6ICAgIDUsCgkJJyROUicJCQkJOiAgICA1LAoJCSckLicJCQkJOiAgICA1LAoJCSckSU5QVVRfUkVDT1JEX1NFUEFSQVRPUicJOiAgICA1LAoJCSckUlMnCQkJCTogICAgNSwKCQknJC8nCQkJCTogICAgNSwKCQknJE9VVFBVVF9SRUNPUkRfU0VQQVJBVE9SJwk6ICAgIDUsCgkJJyRPUlMnCQkJCTogICAgNSwKCQknJFxcJwkJCQk6ICAgIDUsCgkJJyRPVVRQVVRfQVVUT0ZMVVNIJwkJOiAgICA1LAoJCSckfCcJCQkJOiAgICA1LAoJCSckQUNDVU1VTEFUT1InCQkJOiAgICA1LAoJCSckXkEnCQkJCTogICAgNSwKCQknJEZPUk1BVF9GT1JNRkVFRCcJCTogICAgNSwKCQknJF5MJwkJCQk6ICAgIDUsCgkJJyRGT1JNQVRfUEFHRV9OVU1CRVInCQk6ICAgIDUsCgkJJyQlJwkJCQk6ICAgIDUsCgkJJyRGT1JNQVRfTElORVNfTEVGVCcJCTogICAgNSwKCQknJC0nCQkJCTogICAgNSwKCQknJEZPUk1BVF9MSU5FX0JSRUFLX0NIQVJBQ1RFUlMnCTogICAgNSwKCQknJDonCQkJCTogICAgNSwKCQknJEZPUk1BVF9MSU5FU19QRVJfUEFHRScJOiAgICA1LAoJCSckPScJCQkJOiAgICA1LAoJCSckRk9STUFUX1RPUF9OQU1FJwkJOiAgICA1LAoJCSckXicJCQkJOiAgICA1LAoJCSckRk9STUFUX05BTUUnCQkJOiAgICA1LAoJCSckficJCQkJOiAgICA1LAoJCScke15DSElMRF9FUlJPUl9OQVRJVkV9Jwk6ICAgIDUsCgkJJyRFWFRFTkRFRF9PU19FUlJPUicJCTogICAgNSwKCQknJF5FJwkJCQk6ICAgIDUsCgkJJyRFWENFUFRJT05TX0JFSU5HX0NBVUdIVCcJOiAgICA1LAoJCSckXlMnCQkJCTogICAgNSwKCQknJFdBUk5JTkcnCQkJOiAgICA1LAoJCSckXlcnCQkJCTogICAgNSwKCQknJHteV0FSTklOR19CSVRTfScJCTogICAgNSwKCQknJE9TX0VSUk9SJwkJCTogICAgNSwKCQknJEVSUk5PJwkJCTogICAgNSwKCQknJCEnCQkJCTogICAgNSwKCQknJU9TX0VSUk9SJwkJCTogICAgNSwKCQknJUVSUk5PJwkJCTogICAgNSwKCQknJSEnCQkJCTogICAgNSwKCQknJENISUxEX0VSUk9SJwkJCTogICAgNSwKCQknJD8nCQkJCTogICAgNSwKCQknJEVWQUxfRVJST1InCQkJOiAgICA1LAoJCSckQCcJCQkJOiAgICA1LAoJCSckT0ZNVCcJCQkJOiAgICA1LAoJCSckIycJCQkJOiAgICA1LAoJCSckKicJCQkJOiAgICA1LAoJCSckQVJSQVlfQkFTRScJCQk6ICAgIDUsCgkJJyRbJwkJCQk6ICAgIDUsCgkJJyRPTERfUEVSTF9WRVJTSU9OJwkJOiAgICA1LAoJCSckXScJCQkJOiAgICA1LAoJCQkJCQkvLwlQRVJMIGJsb2NrcwoJCSdpZicJCQkJOlsxLDFdLAoJCWVsc2lmCQkJCTpbMSwxXSwKCQknZWxzZScJCQkJOlsxLDFdLAoJCSd3aGlsZScJCQkJOlsxLDFdLAoJCXVubGVzcwkJCQk6WzEsMV0sCgkJJ2ZvcicJCQkJOlsxLDFdLAoJCWZvcmVhY2gJCQkJOlsxLDFdLAoJCQkJCQkvLwlQRVJMIGZ1bmN0aW9ucwoJCSdhYnMnCQkJCToxLAkvLyAtIGFic29sdXRlIHZhbHVlIGZ1bmN0aW9uCgkJYWNjZXB0CQkJCToxLAkvLyAtIGFjY2VwdCBhbiBpbmNvbWluZyBzb2NrZXQgY29ubmVjdAoJCWFsYXJtCQkJCToxLAkvLyAtIHNjaGVkdWxlIGEgU0lHQUxSTQoJCSdhdGFuMicJCQkJOjEsCS8vIC0gYXJjdGFuZ2VudCBvZiBZL1ggaW4gdGhlIHJhbmdlIC1QSSB0byBQSQoJCWJpbmQJCQkJOjEsCS8vIC0gYmluZHMgYW4gYWRkcmVzcyB0byBhIHNvY2tldAoJCWJpbm1vZGUJCQkJOjEsCS8vIC0gcHJlcGFyZSBiaW5hcnkgZmlsZXMgZm9yIEkvTwoJCWJsZXNzCQkJCToxLAkvLyAtIGNyZWF0ZSBhbiBvYmplY3QKCQlib290c3RyYXAJCQk6MSwJLy8KCQknYnJlYWsnCQkJCToxLAkvLyAtIGJyZWFrIG91dCBvZiBhICJnaXZlbiIgYmxvY2sKCQljYWxsZXIJCQkJOjEsCS8vIC0gZ2V0IGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgc3Vicm91dGluZSBjYWxsCgkJY2hkaXIJCQkJOjEsCS8vIC0gY2hhbmdlIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQoJCWNobW9kCQkJCToxLAkvLyAtIGNoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9uIGEgbGlzdCBvZiBmaWxlcwoJCWNob21wCQkJCToxLAkvLyAtIHJlbW92ZSBhIHRyYWlsaW5nIHJlY29yZCBzZXBhcmF0b3IgZnJvbSBhIHN0cmluZwoJCWNob3AJCQkJOjEsCS8vIC0gcmVtb3ZlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIGEgc3RyaW5nCgkJY2hvd24JCQkJOjEsCS8vIC0gY2hhbmdlIHRoZSBvd2Vyc2hpcCBvbiBhIGxpc3Qgb2YgZmlsZXMKCQljaHIJCQkJOjEsCS8vIC0gZ2V0IGNoYXJhY3RlciB0aGlzIG51bWJlciByZXByZXNlbnRzCgkJY2hyb290CQkJCToxLAkvLyAtIG1ha2UgZGlyZWN0b3J5IG5ldyByb290IGZvciBwYXRoIGxvb2t1cHMKCQljbG9zZQkJCQk6MSwJLy8gLSBjbG9zZSBmaWxlIChvciBwaXBlIG9yIHNvY2tldCkgaGFuZGxlCgkJY2xvc2VkaXIJCQk6MSwJLy8gLSBjbG9zZSBkaXJlY3RvcnkgaGFuZGxlCgkJY29ubmVjdAkJCQk6MSwJLy8gLSBjb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldAoJCSdjb250aW51ZScJCQk6WzEsMV0sCS8vIC0gb3B0aW9uYWwgdHJhaWxpbmcgYmxvY2sgaW4gYSB3aGlsZSBvciBmb3JlYWNoCgkJJ2NvcycJCQkJOjEsCS8vIC0gY29zaW5lIGZ1bmN0aW9uCgkJY3J5cHQJCQkJOjEsCS8vIC0gb25lLXdheSBwYXNzd2Qtc3R5bGUgZW5jcnlwdGlvbgoJCWRibWNsb3NlCQkJOjEsCS8vIC0gYnJlYWtzIGJpbmRpbmcgb24gYSB0aWVkIGRibSBmaWxlCgkJZGJtb3BlbgkJCQk6MSwJLy8gLSBjcmVhdGUgYmluZGluZyBvbiBhIHRpZWQgZGJtIGZpbGUKCQknZGVmYXVsdCcJCQk6MSwJLy8KCQlkZWZpbmVkCQkJCToxLAkvLyAtIHRlc3Qgd2hldGhlciBhIHZhbHVlLCB2YXJpYWJsZSwgb3IgZnVuY3Rpb24gaXMgZGVmaW5lZAoJCSdkZWxldGUnCQkJOjEsCS8vIC0gZGVsZXRlcyBhIHZhbHVlIGZyb20gYSBoYXNoCgkJZGllCQkJCToxLAkvLyAtIHJhaXNlIGFuIGV4Y2VwdGlvbiBvciBiYWlsIG91dAoJCSdkbycJCQkJOjEsCS8vIC0gdHVybiBhIEJMT0NLIGludG8gYSBURVJNCgkJZHVtcAkJCQk6MSwJLy8gLSBjcmVhdGUgYW4gaW1tZWRpYXRlIGNvcmUgZHVtcAoJCWVhY2gJCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIG5leHQga2V5L3ZhbHVlIHBhaXIgZnJvbSBhIGhhc2gKCQllbmRncmVudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgZ3JvdXAgZmlsZQoJCWVuZGhvc3RlbnQJCQk6MSwJLy8gLSBiZSBkb25lIHVzaW5nIGhvc3RzIGZpbGUKCQllbmRuZXRlbnQJCQk6MSwJLy8gLSBiZSBkb25lIHVzaW5nIG5ldHdvcmtzIGZpbGUKCQllbmRwcm90b2VudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgcHJvdG9jb2xzIGZpbGUKCQllbmRwd2VudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgcGFzc3dkIGZpbGUKCQllbmRzZXJ2ZW50CQkJOjEsCS8vIC0gYmUgZG9uZSB1c2luZyBzZXJ2aWNlcyBmaWxlCgkJZW9mCQkJCToxLAkvLyAtIHRlc3QgYSBmaWxlaGFuZGxlIGZvciBpdHMgZW5kCgkJJ2V2YWwnCQkJCToxLAkvLyAtIGNhdGNoIGV4Y2VwdGlvbnMgb3IgY29tcGlsZSBhbmQgcnVuIGNvZGUKCQknZXhlYycJCQkJOjEsCS8vIC0gYWJhbmRvbiB0aGlzIHByb2dyYW0gdG8gcnVuIGFub3RoZXIKCQlleGlzdHMJCQkJOjEsCS8vIC0gdGVzdCB3aGV0aGVyIGEgaGFzaCBrZXkgaXMgcHJlc2VudAoJCWV4aXQJCQkJOjEsCS8vIC0gdGVybWluYXRlIHRoaXMgcHJvZ3JhbQoJCSdleHAnCQkJCToxLAkvLyAtIHJhaXNlIEkgdG8gYSBwb3dlcgoJCWZjbnRsCQkJCToxLAkvLyAtIGZpbGUgY29udHJvbCBzeXN0ZW0gY2FsbAoJCWZpbGVubwkJCQk6MSwJLy8gLSByZXR1cm4gZmlsZSBkZXNjcmlwdG9yIGZyb20gZmlsZWhhbmRsZQoJCWZsb2NrCQkJCToxLAkvLyAtIGxvY2sgYW4gZW50aXJlIGZpbGUgd2l0aCBhbiBhZHZpc29yeSBsb2NrCgkJZm9yawkJCQk6MSwJLy8gLSBjcmVhdGUgYSBuZXcgcHJvY2VzcyBqdXN0IGxpa2UgdGhpcyBvbmUKCQlmb3JtYXQJCQkJOjEsCS8vIC0gZGVjbGFyZSBhIHBpY3R1cmUgZm9ybWF0IHdpdGggdXNlIGJ5IHRoZSB3cml0ZSgpIGZ1bmN0aW9uCgkJZm9ybWxpbmUJCQk6MSwJLy8gLSBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBmb3JtYXRzCgkJZ2V0YwkJCQk6MSwJLy8gLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGZpbGVoYW5kbGUKCQlnZXRncmVudAkJCToxLAkvLyAtIGdldCBuZXh0IGdyb3VwIHJlY29yZAoJCWdldGdyZ2lkCQkJOjEsCS8vIC0gZ2V0IGdyb3VwIHJlY29yZCBnaXZlbiBncm91cCB1c2VyIElECgkJZ2V0Z3JuYW0JCQk6MSwJLy8gLSBnZXQgZ3JvdXAgcmVjb3JkIGdpdmVuIGdyb3VwIG5hbWUKCQlnZXRob3N0YnlhZGRyCQkJOjEsCS8vIC0gZ2V0IGhvc3QgcmVjb3JkIGdpdmVuIGl0cyBhZGRyZXNzCgkJZ2V0aG9zdGJ5bmFtZQkJCToxLAkvLyAtIGdldCBob3N0IHJlY29yZCBnaXZlbiBuYW1lCgkJZ2V0aG9zdGVudAkJCToxLAkvLyAtIGdldCBuZXh0IGhvc3RzIHJlY29yZAoJCWdldGxvZ2luCQkJOjEsCS8vIC0gcmV0dXJuIHdobyBsb2dnZWQgaW4gYXQgdGhpcyB0dHkKCQlnZXRuZXRieWFkZHIJCQk6MSwJLy8gLSBnZXQgbmV0d29yayByZWNvcmQgZ2l2ZW4gaXRzIGFkZHJlc3MKCQlnZXRuZXRieW5hbWUJCQk6MSwJLy8gLSBnZXQgbmV0d29ya3MgcmVjb3JkIGdpdmVuIG5hbWUKCQlnZXRuZXRlbnQJCQk6MSwJLy8gLSBnZXQgbmV4dCBuZXR3b3JrcyByZWNvcmQKCQlnZXRwZWVybmFtZQkJCToxLAkvLyAtIGZpbmQgdGhlIG90aGVyIGVuZCBvZiBhIHNvY2tldCBjb25uZWN0aW9uCgkJZ2V0cGdycAkJCQk6MSwJLy8gLSBnZXQgcHJvY2VzcyBncm91cAoJCWdldHBwaWQJCQkJOjEsCS8vIC0gZ2V0IHBhcmVudCBwcm9jZXNzIElECgkJZ2V0cHJpb3JpdHkJCQk6MSwJLy8gLSBnZXQgY3VycmVudCBuaWNlIHZhbHVlCgkJZ2V0cHJvdG9ieW5hbWUJCQk6MSwJLy8gLSBnZXQgcHJvdG9jb2wgcmVjb3JkIGdpdmVuIG5hbWUKCQlnZXRwcm90b2J5bnVtYmVyCQk6MSwJLy8gLSBnZXQgcHJvdG9jb2wgcmVjb3JkIG51bWVyaWMgcHJvdG9jb2wKCQlnZXRwcm90b2VudAkJCToxLAkvLyAtIGdldCBuZXh0IHByb3RvY29scyByZWNvcmQKCQlnZXRwd2VudAkJCToxLAkvLyAtIGdldCBuZXh0IHBhc3N3ZCByZWNvcmQKCQlnZXRwd25hbQkJCToxLAkvLyAtIGdldCBwYXNzd2QgcmVjb3JkIGdpdmVuIHVzZXIgbG9naW4gbmFtZQoJCWdldHB3dWlkCQkJOjEsCS8vIC0gZ2V0IHBhc3N3ZCByZWNvcmQgZ2l2ZW4gdXNlciBJRAoJCWdldHNlcnZieW5hbWUJCQk6MSwJLy8gLSBnZXQgc2VydmljZXMgcmVjb3JkIGdpdmVuIGl0cyBuYW1lCgkJZ2V0c2VydmJ5cG9ydAkJCToxLAkvLyAtIGdldCBzZXJ2aWNlcyByZWNvcmQgZ2l2ZW4gbnVtZXJpYyBwb3J0CgkJZ2V0c2VydmVudAkJCToxLAkvLyAtIGdldCBuZXh0IHNlcnZpY2VzIHJlY29yZAoJCWdldHNvY2tuYW1lCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIHNvY2thZGRyIGZvciBhIGdpdmVuIHNvY2tldAoJCWdldHNvY2tvcHQJCQk6MSwJLy8gLSBnZXQgc29ja2V0IG9wdGlvbnMgb24gYSBnaXZlbiBzb2NrZXQKCQlnaXZlbgkJCQk6MSwJLy8KCQlnbG9iCQkJCToxLAkvLyAtIGV4cGFuZCBmaWxlbmFtZXMgdXNpbmcgd2lsZGNhcmRzCgkJZ210aW1lCQkJCToxLAkvLyAtIGNvbnZlcnQgVU5JWCB0aW1lIGludG8gcmVjb3JkIG9yIHN0cmluZyB1c2luZyBHcmVlbndpY2ggdGltZQoJCSdnb3RvJwkJCQk6MSwJLy8gLSBjcmVhdGUgc3BhZ2hldHRpIGNvZGUKCQlncmVwCQkJCToxLAkvLyAtIGxvY2F0ZSBlbGVtZW50cyBpbiBhIGxpc3QgdGVzdCB0cnVlIGFnYWluc3QgYSBnaXZlbiBjcml0ZXJpb24KCQloZXgJCQkJOjEsCS8vIC0gY29udmVydCBhIHN0cmluZyB0byBhIGhleGFkZWNpbWFsIG51bWJlcgoJCSdpbXBvcnQnCQkJOjEsCS8vIC0gcGF0Y2ggYSBtb2R1bGUncyBuYW1lc3BhY2UgaW50byB5b3VyIG93bgoJCWluZGV4CQkJCToxLAkvLyAtIGZpbmQgYSBzdWJzdHJpbmcgd2l0aGluIGEgc3RyaW5nCgkJJ2ludCcJCQkJOjEsCS8vIC0gZ2V0IHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYSBudW1iZXIKCQlpb2N0bAkJCQk6MSwJLy8gLSBzeXN0ZW0tZGVwZW5kZW50IGRldmljZSBjb250cm9sIHN5c3RlbSBjYWxsCgkJJ2pvaW4nCQkJCToxLAkvLyAtIGpvaW4gYSBsaXN0IGludG8gYSBzdHJpbmcgdXNpbmcgYSBzZXBhcmF0b3IKCQlrZXlzCQkJCToxLAkvLyAtIHJldHJpZXZlIGxpc3Qgb2YgaW5kaWNlcyBmcm9tIGEgaGFzaAoJCWtpbGwJCQkJOjEsCS8vIC0gc2VuZCBhIHNpZ25hbCB0byBhIHByb2Nlc3Mgb3IgcHJvY2VzcyBncm91cAoJCWxhc3QJCQkJOjEsCS8vIC0gZXhpdCBhIGJsb2NrIHByZW1hdHVyZWx5CgkJbGMJCQkJOjEsCS8vIC0gcmV0dXJuIGxvd2VyLWNhc2UgdmVyc2lvbiBvZiBhIHN0cmluZwoJCWxjZmlyc3QJCQkJOjEsCS8vIC0gcmV0dXJuIGEgc3RyaW5nIHdpdGgganVzdCB0aGUgbmV4dCBsZXR0ZXIgaW4gbG93ZXIgY2FzZQoJCWxlbmd0aAkJCQk6MSwJLy8gLSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHN0cmluZwoJCSdsaW5rJwkJCQk6MSwJLy8gLSBjcmVhdGUgYSBoYXJkIGxpbmsgaW4gdGhlIGZpbGVzeXRlbQoJCWxpc3RlbgkJCQk6MSwJLy8gLSByZWdpc3RlciB5b3VyIHNvY2tldCBhcyBhIHNlcnZlcgoJCWxvY2FsCQkJCTogMiwJLy8gLSBjcmVhdGUgYSB0ZW1wb3JhcnkgdmFsdWUgZm9yIGEgZ2xvYmFsIHZhcmlhYmxlIChkeW5hbWljIHNjb3BpbmcpCgkJbG9jYWx0aW1lCQkJOjEsCS8vIC0gY29udmVydCBVTklYIHRpbWUgaW50byByZWNvcmQgb3Igc3RyaW5nIHVzaW5nIGxvY2FsIHRpbWUKCQlsb2NrCQkJCToxLAkvLyAtIGdldCBhIHRocmVhZCBsb2NrIG9uIGEgdmFyaWFibGUsIHN1YnJvdXRpbmUsIG9yIG1ldGhvZAoJCSdsb2cnCQkJCToxLAkvLyAtIHJldHJpZXZlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBmb3IgYSBudW1iZXIKCQlsc3RhdAkJCQk6MSwJLy8gLSBzdGF0IGEgc3ltYm9saWMgbGluawoJCW0JCQkJOm51bGwsCS8vIC0gbWF0Y2ggYSBzdHJpbmcgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuCgkJbWFwCQkJCToxLAkvLyAtIGFwcGx5IGEgY2hhbmdlIHRvIGEgbGlzdCB0byBnZXQgYmFjayBhIG5ldyBsaXN0IHdpdGggdGhlIGNoYW5nZXMKCQlta2RpcgkJCQk6MSwJLy8gLSBjcmVhdGUgYSBkaXJlY3RvcnkKCQltc2djdGwJCQkJOjEsCS8vIC0gU3lzViBJUEMgbWVzc2FnZSBjb250cm9sIG9wZXJhdGlvbnMKCQltc2dnZXQJCQkJOjEsCS8vIC0gZ2V0IFN5c1YgSVBDIG1lc3NhZ2UgcXVldWUKCQltc2dyY3YJCQkJOjEsCS8vIC0gcmVjZWl2ZSBhIFN5c1YgSVBDIG1lc3NhZ2UgZnJvbSBhIG1lc3NhZ2UgcXVldWUKCQltc2dzbmQJCQkJOjEsCS8vIC0gc2VuZCBhIFN5c1YgSVBDIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIHF1ZXVlCgkJbXkJCQkJOiAyLAkvLyAtIGRlY2xhcmUgYW5kIGFzc2lnbiBhIGxvY2FsIHZhcmlhYmxlIChsZXhpY2FsIHNjb3BpbmcpCgkJJ25ldycJCQkJOjEsCS8vCgkJbmV4dAkJCQk6MSwJLy8gLSBpdGVyYXRlIGEgYmxvY2sgcHJlbWF0dXJlbHkKCQlubwkJCQk6MSwJLy8gLSB1bmltcG9ydCBzb21lIG1vZHVsZSBzeW1ib2xzIG9yIHNlbWFudGljcyBhdCBjb21waWxlIHRpbWUKCQlvY3QJCQkJOjEsCS8vIC0gY29udmVydCBhIHN0cmluZyB0byBhbiBvY3RhbCBudW1iZXIKCQlvcGVuCQkJCToxLAkvLyAtIG9wZW4gYSBmaWxlLCBwaXBlLCBvciBkZXNjcmlwdG9yCgkJb3BlbmRpcgkJCQk6MSwJLy8gLSBvcGVuIGEgZGlyZWN0b3J5CgkJb3JkCQkJCToxLAkvLyAtIGZpbmQgYSBjaGFyYWN0ZXIncyBudW1lcmljIHJlcHJlc2VudGF0aW9uCgkJb3VyCQkJCTogMiwJLy8gLSBkZWNsYXJlIGFuZCBhc3NpZ24gYSBwYWNrYWdlIHZhcmlhYmxlIChsZXhpY2FsIHNjb3BpbmcpCgkJcGFjawkJCQk6MSwJLy8gLSBjb252ZXJ0IGEgbGlzdCBpbnRvIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uCgkJJ3BhY2thZ2UnCQkJOjEsCS8vIC0gZGVjbGFyZSBhIHNlcGFyYXRlIGdsb2JhbCBuYW1lc3BhY2UKCQlwaXBlCQkJCToxLAkvLyAtIG9wZW4gYSBwYWlyIG9mIGNvbm5lY3RlZCBmaWxlaGFuZGxlcwoJCXBvcAkJCQk6MSwJLy8gLSByZW1vdmUgdGhlIGxhc3QgZWxlbWVudCBmcm9tIGFuIGFycmF5IGFuZCByZXR1cm4gaXQKCQlwb3MJCQkJOjEsCS8vIC0gZmluZCBvciBzZXQgdGhlIG9mZnNldCBmb3IgdGhlIGxhc3QvbmV4dCBtLy9nIHNlYXJjaAoJCXByaW50CQkJCToxLAkvLyAtIG91dHB1dCBhIGxpc3QgdG8gYSBmaWxlaGFuZGxlCgkJcHJpbnRmCQkJCToxLAkvLyAtIG91dHB1dCBhIGZvcm1hdHRlZCBsaXN0IHRvIGEgZmlsZWhhbmRsZQoJCXByb3RvdHlwZQkJCToxLAkvLyAtIGdldCB0aGUgcHJvdG90eXBlIChpZiBhbnkpIG9mIGEgc3Vicm91dGluZQoJCXB1c2gJCQkJOjEsCS8vIC0gYXBwZW5kIG9uZSBvciBtb3JlIGVsZW1lbnRzIHRvIGFuIGFycmF5CgkJcQkJCQk6bnVsbCwJLy8gLSBzaW5nbHkgcXVvdGUgYSBzdHJpbmcKCQlxcQkJCQk6bnVsbCwJLy8gLSBkb3VibHkgcXVvdGUgYSBzdHJpbmcKCQlxcgkJCQk6bnVsbCwJLy8gLSBDb21waWxlIHBhdHRlcm4KCQlxdW90ZW1ldGEJCQk6bnVsbCwJLy8gLSBxdW90ZSByZWd1bGFyIGV4cHJlc3Npb24gbWFnaWMgY2hhcmFjdGVycwoJCXF3CQkJCTpudWxsLAkvLyAtIHF1b3RlIGEgbGlzdCBvZiB3b3JkcwoJCXF4CQkJCTpudWxsLAkvLyAtIGJhY2txdW90ZSBxdW90ZSBhIHN0cmluZwoJCXJhbmQJCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIG5leHQgcHNldWRvcmFuZG9tIG51bWJlcgoJCXJlYWQJCQkJOjEsCS8vIC0gZml4ZWQtbGVuZ3RoIGJ1ZmZlcmVkIGlucHV0IGZyb20gYSBmaWxlaGFuZGxlCgkJcmVhZGRpcgkJCQk6MSwJLy8gLSBnZXQgYSBkaXJlY3RvcnkgZnJvbSBhIGRpcmVjdG9yeSBoYW5kbGUKCQlyZWFkbGluZQkJCToxLAkvLyAtIGZldGNoIGEgcmVjb3JkIGZyb20gYSBmaWxlCgkJcmVhZGxpbmsJCQk6MSwJLy8gLSBkZXRlcm1pbmUgd2hlcmUgYSBzeW1ib2xpYyBsaW5rIGlzIHBvaW50aW5nCgkJcmVhZHBpcGUJCQk6MSwJLy8gLSBleGVjdXRlIGEgc3lzdGVtIGNvbW1hbmQgYW5kIGNvbGxlY3Qgc3RhbmRhcmQgb3V0cHV0CgkJcmVjdgkJCQk6MSwJLy8gLSByZWNlaXZlIGEgbWVzc2FnZSBvdmVyIGEgU29ja2V0CgkJcmVkbwkJCQk6MSwJLy8gLSBzdGFydCB0aGlzIGxvb3AgaXRlcmF0aW9uIG92ZXIgYWdhaW4KCQlyZWYJCQkJOjEsCS8vIC0gZmluZCBvdXQgdGhlIHR5cGUgb2YgdGhpbmcgYmVpbmcgcmVmZXJlbmNlZAoJCXJlbmFtZQkJCQk6MSwJLy8gLSBjaGFuZ2UgYSBmaWxlbmFtZQoJCXJlcXVpcmUJCQkJOjEsCS8vIC0gbG9hZCBpbiBleHRlcm5hbCBmdW5jdGlvbnMgZnJvbSBhIGxpYnJhcnkgYXQgcnVudGltZQoJCXJlc2V0CQkJCToxLAkvLyAtIGNsZWFyIGFsbCB2YXJpYWJsZXMgb2YgYSBnaXZlbiBuYW1lCgkJJ3JldHVybicJCQk6MSwJLy8gLSBnZXQgb3V0IG9mIGEgZnVuY3Rpb24gZWFybHkKCQlyZXZlcnNlCQkJCToxLAkvLyAtIGZsaXAgYSBzdHJpbmcgb3IgYSBsaXN0CgkJcmV3aW5kZGlyCQkJOjEsCS8vIC0gcmVzZXQgZGlyZWN0b3J5IGhhbmRsZQoJCXJpbmRleAkJCQk6MSwJLy8gLSByaWdodC10by1sZWZ0IHN1YnN0cmluZyBzZWFyY2gKCQlybWRpcgkJCQk6MSwJLy8gLSByZW1vdmUgYSBkaXJlY3RvcnkKCQlzCQkJCTpudWxsLAkvLyAtIHJlcGxhY2UgYSBwYXR0ZXJuIHdpdGggYSBzdHJpbmcKCQlzYXkJCQkJOjEsCS8vIC0gcHJpbnQgd2l0aCBuZXdsaW5lCgkJc2NhbGFyCQkJCToxLAkvLyAtIGZvcmNlIGEgc2NhbGFyIGNvbnRleHQKCQlzZWVrCQkJCToxLAkvLyAtIHJlcG9zaXRpb24gZmlsZSBwb2ludGVyIGZvciByYW5kb20tYWNjZXNzIEkvTwoJCXNlZWtkaXIJCQkJOjEsCS8vIC0gcmVwb3NpdGlvbiBkaXJlY3RvcnkgcG9pbnRlcgoJCXNlbGVjdAkJCQk6MSwJLy8gLSByZXNldCBkZWZhdWx0IG91dHB1dCBvciBkbyBJL08gbXVsdGlwbGV4aW5nCgkJc2VtY3RsCQkJCToxLAkvLyAtIFN5c1Ygc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwoJCXNlbWdldAkJCQk6MSwJLy8gLSBnZXQgc2V0IG9mIFN5c1Ygc2VtYXBob3JlcwoJCXNlbW9wCQkJCToxLAkvLyAtIFN5c1Ygc2VtYXBob3JlIG9wZXJhdGlvbnMKCQlzZW5kCQkJCToxLAkvLyAtIHNlbmQgYSBtZXNzYWdlIG92ZXIgYSBzb2NrZXQKCQlzZXRncmVudAkJCToxLAkvLyAtIHByZXBhcmUgZ3JvdXAgZmlsZSBmb3IgdXNlCgkJc2V0aG9zdGVudAkJCToxLAkvLyAtIHByZXBhcmUgaG9zdHMgZmlsZSBmb3IgdXNlCgkJc2V0bmV0ZW50CQkJOjEsCS8vIC0gcHJlcGFyZSBuZXR3b3JrcyBmaWxlIGZvciB1c2UKCQlzZXRwZ3JwCQkJCToxLAkvLyAtIHNldCB0aGUgcHJvY2VzcyBncm91cCBvZiBhIHByb2Nlc3MKCQlzZXRwcmlvcml0eQkJCToxLAkvLyAtIHNldCBhIHByb2Nlc3MncyBuaWNlIHZhbHVlCgkJc2V0cHJvdG9lbnQJCQk6MSwJLy8gLSBwcmVwYXJlIHByb3RvY29scyBmaWxlIGZvciB1c2UKCQlzZXRwd2VudAkJCToxLAkvLyAtIHByZXBhcmUgcGFzc3dkIGZpbGUgZm9yIHVzZQoJCXNldHNlcnZlbnQJCQk6MSwJLy8gLSBwcmVwYXJlIHNlcnZpY2VzIGZpbGUgZm9yIHVzZQoJCXNldHNvY2tvcHQJCQk6MSwJLy8gLSBzZXQgc29tZSBzb2NrZXQgb3B0aW9ucwoJCXNoaWZ0CQkJCToxLAkvLyAtIHJlbW92ZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheSwgYW5kIHJldHVybiBpdAoJCXNobWN0bAkJCQk6MSwJLy8gLSBTeXNWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwoJCXNobWdldAkJCQk6MSwJLy8gLSBnZXQgU3lzViBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaWRlbnRpZmllcgoJCXNobXJlYWQJCQkJOjEsCS8vIC0gcmVhZCBTeXNWIHNoYXJlZCBtZW1vcnkKCQlzaG13cml0ZQkJCToxLAkvLyAtIHdyaXRlIFN5c1Ygc2hhcmVkIG1lbW9yeQoJCXNodXRkb3duCQkJOjEsCS8vIC0gY2xvc2UgZG93biBqdXN0IGhhbGYgb2YgYSBzb2NrZXQgY29ubmVjdGlvbgoJCSdzaW4nCQkJCToxLAkvLyAtIHJldHVybiB0aGUgc2luZSBvZiBhIG51bWJlcgoJCXNsZWVwCQkJCToxLAkvLyAtIGJsb2NrIGZvciBzb21lIG51bWJlciBvZiBzZWNvbmRzCgkJc29ja2V0CQkJCToxLAkvLyAtIGNyZWF0ZSBhIHNvY2tldAoJCXNvY2tldHBhaXIJCQk6MSwJLy8gLSBjcmVhdGUgYSBwYWlyIG9mIHNvY2tldHMKCQknc29ydCcJCQkJOjEsCS8vIC0gc29ydCBhIGxpc3Qgb2YgdmFsdWVzCgkJc3BsaWNlCQkJCToxLAkvLyAtIGFkZCBvciByZW1vdmUgZWxlbWVudHMgYW55d2hlcmUgaW4gYW4gYXJyYXkKCQknc3BsaXQnCQkJCToxLAkvLyAtIHNwbGl0IHVwIGEgc3RyaW5nIHVzaW5nIGEgcmVnZXhwIGRlbGltaXRlcgoJCXNwcmludGYJCQkJOjEsCS8vIC0gZm9ybWF0dGVkIHByaW50IGludG8gYSBzdHJpbmcKCQknc3FydCcJCQkJOjEsCS8vIC0gc3F1YXJlIHJvb3QgZnVuY3Rpb24KCQlzcmFuZAkJCQk6MSwJLy8gLSBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgoJCXN0YXQJCQkJOjEsCS8vIC0gZ2V0IGEgZmlsZSdzIHN0YXR1cyBpbmZvcm1hdGlvbgoJCXN0YXRlCQkJCToxLAkvLyAtIGRlY2xhcmUgYW5kIGFzc2lnbiBhIHN0YXRlIHZhcmlhYmxlIChwZXJzaXN0ZW50IGxleGljYWwgc2NvcGluZykKCQlzdHVkeQkJCQk6MSwJLy8gLSBvcHRpbWl6ZSBpbnB1dCBkYXRhIGZvciByZXBlYXRlZCBzZWFyY2hlcwoJCSdzdWInCQkJCToxLAkvLyAtIGRlY2xhcmUgYSBzdWJyb3V0aW5lLCBwb3NzaWJseSBhbm9ueW1vdXNseQoJCSdzdWJzdHInCQkJOjEsCS8vIC0gZ2V0IG9yIGFsdGVyIGEgcG9ydGlvbiBvZiBhIHN0aXJuZwoJCXN5bWxpbmsJCQkJOjEsCS8vIC0gY3JlYXRlIGEgc3ltYm9saWMgbGluayB0byBhIGZpbGUKCQlzeXNjYWxsCQkJCToxLAkvLyAtIGV4ZWN1dGUgYW4gYXJiaXRyYXJ5IHN5c3RlbSBjYWxsCgkJc3lzb3BlbgkJCQk6MSwJLy8gLSBvcGVuIGEgZmlsZSwgcGlwZSwgb3IgZGVzY3JpcHRvcgoJCXN5c3JlYWQJCQkJOjEsCS8vIC0gZml4ZWQtbGVuZ3RoIHVuYnVmZmVyZWQgaW5wdXQgZnJvbSBhIGZpbGVoYW5kbGUKCQlzeXNzZWVrCQkJCToxLAkvLyAtIHBvc2l0aW9uIEkvTyBwb2ludGVyIG9uIGhhbmRsZSB1c2VkIHdpdGggc3lzcmVhZCBhbmQgc3lzd3JpdGUKCQlzeXN0ZW0JCQkJOjEsCS8vIC0gcnVuIGEgc2VwYXJhdGUgcHJvZ3JhbQoJCXN5c3dyaXRlCQkJOjEsCS8vIC0gZml4ZWQtbGVuZ3RoIHVuYnVmZmVyZWQgb3V0cHV0IHRvIGEgZmlsZWhhbmRsZQoJCXRlbGwJCQkJOjEsCS8vIC0gZ2V0IGN1cnJlbnQgc2Vla3BvaW50ZXIgb24gYSBmaWxlaGFuZGxlCgkJdGVsbGRpcgkJCQk6MSwJLy8gLSBnZXQgY3VycmVudCBzZWVrcG9pbnRlciBvbiBhIGRpcmVjdG9yeSBoYW5kbGUKCQl0aWUJCQkJOjEsCS8vIC0gYmluZCBhIHZhcmlhYmxlIHRvIGFuIG9iamVjdCBjbGFzcwoJCXRpZWQJCQkJOjEsCS8vIC0gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdW5kZXJseWluZyBhIHRpZWQgdmFyaWFibGUKCQl0aW1lCQkJCToxLAkvLyAtIHJldHVybiBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSAxOTcwCgkJdGltZXMJCQkJOjEsCS8vIC0gcmV0dXJuIGVsYXBzZWQgdGltZSBmb3Igc2VsZiBhbmQgY2hpbGQgcHJvY2Vzc2VzCgkJdHIJCQkJOm51bGwsCS8vIC0gdHJhbnNsaXRlcmF0ZSBhIHN0cmluZwoJCXRydW5jYXRlCQkJOjEsCS8vIC0gc2hvcnRlbiBhIGZpbGUKCQl1YwkJCQk6MSwJLy8gLSByZXR1cm4gdXBwZXItY2FzZSB2ZXJzaW9uIG9mIGEgc3RyaW5nCgkJdWNmaXJzdAkJCQk6MSwJLy8gLSByZXR1cm4gYSBzdHJpbmcgd2l0aCBqdXN0IHRoZSBuZXh0IGxldHRlciBpbiB1cHBlciBjYXNlCgkJdW1hc2sJCQkJOjEsCS8vIC0gc2V0IGZpbGUgY3JlYXRpb24gbW9kZSBtYXNrCgkJdW5kZWYJCQkJOjEsCS8vIC0gcmVtb3ZlIGEgdmFyaWFibGUgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbgoJCXVubGluawkJCQk6MSwJLy8gLSByZW1vdmUgb25lIGxpbmsgdG8gYSBmaWxlCgkJdW5wYWNrCQkJCToxLAkvLyAtIGNvbnZlcnQgYmluYXJ5IHN0cnVjdHVyZSBpbnRvIG5vcm1hbCBwZXJsIHZhcmlhYmxlcwoJCXVuc2hpZnQJCQkJOjEsCS8vIC0gcHJlcGVuZCBtb3JlIGVsZW1lbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBsaXN0CgkJdW50aWUJCQkJOjEsCS8vIC0gYnJlYWsgYSB0aWUgYmluZGluZyB0byBhIHZhcmlhYmxlCgkJdXNlCQkJCToxLAkvLyAtIGxvYWQgaW4gYSBtb2R1bGUgYXQgY29tcGlsZSB0aW1lCgkJdXRpbWUJCQkJOjEsCS8vIC0gc2V0IGEgZmlsZSdzIGxhc3QgYWNjZXNzIGFuZCBtb2RpZnkgdGltZXMKCQl2YWx1ZXMJCQkJOjEsCS8vIC0gcmV0dXJuIGEgbGlzdCBvZiB0aGUgdmFsdWVzIGluIGEgaGFzaAoJCXZlYwkJCQk6MSwJLy8gLSB0ZXN0IG9yIHNldCBwYXJ0aWN1bGFyIGJpdHMgaW4gYSBzdHJpbmcKCQl3YWl0CQkJCToxLAkvLyAtIHdhaXQgZm9yIGFueSBjaGlsZCBwcm9jZXNzIHRvIGRpZQoJCXdhaXRwaWQJCQkJOjEsCS8vIC0gd2FpdCBmb3IgYSBwYXJ0aWN1bGFyIGNoaWxkIHByb2Nlc3MgdG8gZGllCgkJd2FudGFycmF5CQkJOjEsCS8vIC0gZ2V0IHZvaWQgdnMgc2NhbGFyIHZzIGxpc3QgY29udGV4dCBvZiBjdXJyZW50IHN1YnJvdXRpbmUgY2FsbAoJCXdhcm4JCQkJOjEsCS8vIC0gcHJpbnQgZGVidWdnaW5nIGluZm8KCQl3aGVuCQkJCToxLAkvLwoJCXdyaXRlCQkJCToxLAkvLyAtIHByaW50IGEgcGljdHVyZSByZWNvcmQKCQl5CQkJCTpudWxsfTsJLy8gLSB0cmFuc2xpdGVyYXRlIGEgc3RyaW5nCgoJdmFyIFJYc3R5bGU9InN0cmluZy0yIjsKCXZhciBSWG1vZGlmaWVycz0vW2dvc2V4aW1hY3BsdWRdLzsJCS8vIE5PVEU6ICJtIiwgInMiLCAieSIgYW5kICJ0ciIgbmVlZCB0byBjb3JyZWN0IHJlYWwgbW9kaWZpZXJzIGZvciBlYWNoIHJlZ2V4cCB0eXBlCgoJZnVuY3Rpb24gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsY2hhaW4sc3R5bGUsdGFpbCl7CS8vIE5PVEU6IGNoYWluLmxlbmd0aCA+IDIgaXMgbm90IHdvcmtpbmcgbm93IChpdCdzIGZvciBzWy4uLl1bLi4uXWdlb3M7KQoJCXN0YXRlLmNoYWluPW51bGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAgM3RhaWwKCQlzdGF0ZS5zdHlsZT1udWxsOwoJCXN0YXRlLnRhaWw9bnVsbDsKCQlzdGF0ZS50b2tlbml6ZT1mdW5jdGlvbihzdHJlYW0sc3RhdGUpewoJCQl2YXIgZT1mYWxzZSxjLGk9MDsKCQkJd2hpbGUoYz1zdHJlYW0ubmV4dCgpKXsKCQkJCWlmKGM9PT1jaGFpbltpXSYmIWUpewoJCQkJCWlmKGNoYWluWysraV0hPT11bmRlZmluZWQpewoJCQkJCQlzdGF0ZS5jaGFpbj1jaGFpbltpXTsKCQkJCQkJc3RhdGUuc3R5bGU9c3R5bGU7CgkJCQkJCXN0YXRlLnRhaWw9dGFpbH0KCQkJCQllbHNlIGlmKHRhaWwpCgkJCQkJCXN0cmVhbS5lYXRXaGlsZSh0YWlsKTsKCQkJCQlzdGF0ZS50b2tlbml6ZT10b2tlblBlcmw7CgkJCQkJcmV0dXJuIHN0eWxlfQoJCQkJZT0hZSYmYz09IlxcIn0KCQkJcmV0dXJuIHN0eWxlfTsKCQlyZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLHN0YXRlKX0KCglmdW5jdGlvbiB0b2tlblNPTUVUSElORyhzdHJlYW0sc3RhdGUsc3RyaW5nKXsKCQlzdGF0ZS50b2tlbml6ZT1mdW5jdGlvbihzdHJlYW0sc3RhdGUpewoJCQlpZihzdHJlYW0uc3RyaW5nPT1zdHJpbmcpCgkJCQlzdGF0ZS50b2tlbml6ZT10b2tlblBlcmw7CgkJCXN0cmVhbS5za2lwVG9FbmQoKTsKCQkJcmV0dXJuICJzdHJpbmcifTsKCQlyZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLHN0YXRlKX0KCglmdW5jdGlvbiB0b2tlblBlcmwoc3RyZWFtLHN0YXRlKXsKCQlpZihzdHJlYW0uZWF0U3BhY2UoKSkKCQkJcmV0dXJuIG51bGw7CgkJaWYoc3RhdGUuY2hhaW4pCgkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxzdGF0ZS5jaGFpbixzdGF0ZS5zdHlsZSxzdGF0ZS50YWlsKTsKCQlpZihzdHJlYW0ubWF0Y2goL15cLT9bXGRcLl0vLGZhbHNlKSkKCQkJaWYoc3RyZWFtLm1hdGNoKC9eKFwtPyhcZCpcLlxkKyhlWystXT9cZCspP3xcZCtcLlxkKil8MHhbXGRhLWZBLUZdK3wwYlswMV0rfFxkKyhlWystXT9cZCspPykvKSkKCQkJCXJldHVybiAnbnVtYmVyJzsKCQlpZihzdHJlYW0ubWF0Y2goL148PCg/PVx3KS8pKXsJCQkvLyBOT1RFOiA8PFNPTUVUSElOR1xuLi4uXG5TT01FVEhJTkdcbgoJCQlzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CgkJCXJldHVybiB0b2tlblNPTUVUSElORyhzdHJlYW0sc3RhdGUsc3RyZWFtLmN1cnJlbnQoKS5zdWJzdHIoMikpfQoJCWlmKHN0cmVhbS5zb2woKSYmc3RyZWFtLm1hdGNoKC9eXD1pdGVtKD8hXHcpLykpey8vIE5PVEU6IFxuPWl0ZW0uLi5cbj1jdXRcbgoJCQlyZXR1cm4gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLCc9Y3V0Jyl9CgkJdmFyIGNoPXN0cmVhbS5uZXh0KCk7CgkJaWYoY2g9PSciJ3x8Y2g9PSInIil7CQkJCS8vIE5PVEU6ICcgb3IgIiBvciA8PCdTT01FVEhJTkcnXG4uLi5cblNPTUVUSElOR1xuIG9yIDw8IlNPTUVUSElORyJcbi4uLlxuU09NRVRISU5HXG4KCQkJaWYoc3RyZWFtLnByZWZpeCgzKT09Ijw8IitjaCl7CgkJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQkJc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwoJCQkJdmFyIG49c3RyZWFtLmN1cnJlbnQoKS5zdWJzdHIoMSk7CgkJCQlpZihuJiZzdHJlYW0uZWF0KGNoKSkKCQkJCQlyZXR1cm4gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLG4pOwoJCQkJc3RyZWFtLnBvcz1wfQoJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2NoXSwic3RyaW5nIil9CgkJaWYoY2g9PSJxIil7CgkJCXZhciBjPXN0cmVhbS5sb29rKC0yKTsKCQkJaWYoIShjJiYvXHcvLnRlc3QoYykpKXsKCQkJCWM9c3RyZWFtLmxvb2soMCk7CgkJCQlpZihjPT0ieCIpewoJCQkJCWM9c3RyZWFtLmxvb2soMSk7CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0ieyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX19CgkJCQllbHNlIGlmKGM9PSJxIil7CgkJCQkJYz1zdHJlYW0ubG9vaygxKTsKCQkJCQlpZihjPT0iKCIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyIpIl0sInN0cmluZyIpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSwic3RyaW5nIil9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLCJzdHJpbmciKX0KCQkJCQlpZihjPT0iPCIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+Il0sInN0cmluZyIpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSwic3RyaW5nIil9fQoJCQkJZWxzZSBpZihjPT0idyIpewoJCQkJCWM9c3RyZWFtLmxvb2soMSk7CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLCJicmFja2V0Iil9CgkJCQkJaWYoYz09IlsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSJdLCJicmFja2V0Iil9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLCJicmFja2V0Iil9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLCJicmFja2V0Iil9CgkJCQkJaWYoL1tcXiciIX5cL10vLnRlc3QoYykpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDEpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW3N0cmVhbS5lYXQoYyldLCJicmFja2V0Iil9fQoJCQkJZWxzZSBpZihjPT0iciIpewoJCQkJCWM9c3RyZWFtLmxvb2soMSk7CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0ieyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX19CgkJCQllbHNlIGlmKC9bXF4nIiF+XC8oXFt7PF0vLnRlc3QoYykpewoJCQkJCWlmKGM9PSIoIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiXSwic3RyaW5nIil9CgkJCQkJaWYoYz09IlsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSJdLCJzdHJpbmciKX0KCQkJCQlpZihjPT0ieyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDEpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9Il0sInN0cmluZyIpfQoJCQkJCWlmKGM9PSI8Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iXSwic3RyaW5nIil9CgkJCQkJaWYoL1tcXiciIX5cL10vLnRlc3QoYykpewoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW3N0cmVhbS5lYXQoYyldLCJzdHJpbmciKX19fX0KCQlpZihjaD09Im0iKXsKCQkJdmFyIGM9c3RyZWFtLmxvb2soLTIpOwoJCQlpZighKGMmJi9cdy8udGVzdChjKSkpewoJCQkJYz1zdHJlYW0uZWF0KC9bKFxbezxcXiciIX5cL10vKTsKCQkJCWlmKGMpewoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0iKCIpewoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyIpIl0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IlsiKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSJ7Iil7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0iPCIpewoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+Il0sUlhzdHlsZSxSWG1vZGlmaWVycyl9fX19CgkJaWYoY2g9PSJzIil7CgkJCXZhciBjPS9bXC8+XF19KVx3XS8udGVzdChzdHJlYW0ubG9vaygtMikpOwoJCQlpZighYyl7CgkJCQljPXN0cmVhbS5lYXQoL1soXFt7PFxeJyIhflwvXS8pOwoJCQkJaWYoYyl7CgkJCQkJaWYoYz09IlsiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJdIiwiXSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSJ7IikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSIsIn0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0iPCIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iLCI+Il0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09IigiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyIpIiwiKSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbYyxjXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX19fQoJCWlmKGNoPT0ieSIpewoJCQl2YXIgYz0vW1wvPlxdfSlcd10vLnRlc3Qoc3RyZWFtLmxvb2soLTIpKTsKCQkJaWYoIWMpewoJCQkJYz1zdHJlYW0uZWF0KC9bKFxbezxcXiciIX5cL10vKTsKCQkJCWlmKGMpewoJCQkJCWlmKGM9PSJbIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSIsIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0ieyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iLCJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09IjwiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+IiwiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSIoIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSIsIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2MsY10sUlhzdHlsZSxSWG1vZGlmaWVycyl9fX0KCQlpZihjaD09InQiKXsKCQkJdmFyIGM9L1tcLz5cXX0pXHddLy50ZXN0KHN0cmVhbS5sb29rKC0yKSk7CgkJCWlmKCFjKXsKCQkJCWM9c3RyZWFtLmVhdCgiciIpO2lmKGMpewoJCQkJYz1zdHJlYW0uZWF0KC9bKFxbezxcXiciIX5cL10vKTsKCQkJCWlmKGMpewoJCQkJCWlmKGM9PSJbIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSIsIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0ieyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iLCJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09IjwiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+IiwiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSIoIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSIsIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2MsY10sUlhzdHlsZSxSWG1vZGlmaWVycyl9fX19CgkJaWYoY2g9PSJgIil7CgkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbY2hdLCJ2YXJpYWJsZS0yIil9CgkJaWYoY2g9PSIvIil7CgkJCWlmKCEvflxzKiQvLnRlc3Qoc3RyZWFtLnByZWZpeCgpKSkKCQkJCXJldHVybiAib3BlcmF0b3IiOwoJCQllbHNlCgkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2NoXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQlpZihjaD09IiQiKXsKCQkJdmFyIHA9c3RyZWFtLnBvczsKCQkJaWYoc3RyZWFtLmVhdFdoaWxlKC9cZC8pfHxzdHJlYW0uZWF0KCJ7IikmJnN0cmVhbS5lYXRXaGlsZSgvXGQvKSYmc3RyZWFtLmVhdCgifSIpKQoJCQkJcmV0dXJuICJ2YXJpYWJsZS0yIjsKCQkJZWxzZQoJCQkJc3RyZWFtLnBvcz1wfQoJCWlmKC9bJEAlXS8udGVzdChjaCkpewoJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQlpZihzdHJlYW0uZWF0KCJeIikmJnN0cmVhbS5lYXQoL1tBLVpdLyl8fCEvW0AkJSZdLy50ZXN0KHN0cmVhbS5sb29rKC0yKSkmJnN0cmVhbS5lYXQoL1s9fFxcXC0jP0A7OiZgflxeIVxbXF0qJyIkKy4sXC88PigpXS8pKXsKCQkJCXZhciBjPXN0cmVhbS5jdXJyZW50KCk7CgkJCQlpZihQRVJMW2NdKQoJCQkJCXJldHVybiAidmFyaWFibGUtMiJ9CgkJCXN0cmVhbS5wb3M9cH0KCQlpZigvWyRAJSZdLy50ZXN0KGNoKSl7CgkJCWlmKHN0cmVhbS5lYXRXaGlsZSgvW1x3JFxbXF1dLyl8fHN0cmVhbS5lYXQoInsiKSYmc3RyZWFtLmVhdFdoaWxlKC9bXHckXFtcXV0vKSYmc3RyZWFtLmVhdCgifSIpKXsKCQkJCXZhciBjPXN0cmVhbS5jdXJyZW50KCk7CgkJCQlpZihQRVJMW2NdKQoJCQkJCXJldHVybiAidmFyaWFibGUtMiI7CgkJCQllbHNlCgkJCQkJcmV0dXJuICJ2YXJpYWJsZSJ9fQoJCWlmKGNoPT0iIyIpewoJCQlpZihzdHJlYW0ubG9vaygtMikhPSIkIil7CgkJCQlzdHJlYW0uc2tpcFRvRW5kKCk7CgkJCQlyZXR1cm4gImNvbW1lbnQifX0KCQlpZigvWzorXC1cXiokJiVAPTw+IT98XC9+XC5dLy50ZXN0KGNoKSl7CgkJCXZhciBwPXN0cmVhbS5wb3M7CgkJCXN0cmVhbS5lYXRXaGlsZSgvWzorXC1cXiokJiVAPTw+IT98XC9+XC5dLyk7CgkJCWlmKFBFUkxbc3RyZWFtLmN1cnJlbnQoKV0pCgkJCQlyZXR1cm4gIm9wZXJhdG9yIjsKCQkJZWxzZQoJCQkJc3RyZWFtLnBvcz1wfQoJCWlmKGNoPT0iXyIpewoJCQlpZihzdHJlYW0ucG9zPT0xKXsKCQkJCWlmKHN0cmVhbS5zdWZmaXgoNik9PSJfRU5EX18iKXsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWydcMCddLCJjb21tZW50Iil9CgkJCQllbHNlIGlmKHN0cmVhbS5zdWZmaXgoNyk9PSJfREFUQV9fIil7CgkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsnXDAnXSwidmFyaWFibGUtMiIpfQoJCQkJZWxzZSBpZihzdHJlYW0uc3VmZml4KDcpPT0iX0NfXyIpewoJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbJ1wwJ10sInN0cmluZyIpfX19CgkJaWYoL1x3Ly50ZXN0KGNoKSl7CgkJCXZhciBwPXN0cmVhbS5wb3M7CgkJCWlmKHN0cmVhbS5sb29rKC0yKT09InsiJiYoc3RyZWFtLmxvb2soMCk9PSJ9Inx8c3RyZWFtLmVhdFdoaWxlKC9cdy8pJiZzdHJlYW0ubG9vaygwKT09In0iKSkKCQkJCXJldHVybiAic3RyaW5nIjsKCQkJZWxzZQoJCQkJc3RyZWFtLnBvcz1wfQoJCWlmKC9bQS1aXS8udGVzdChjaCkpewoJCQl2YXIgbD1zdHJlYW0ubG9vaygtMik7CgkJCXZhciBwPXN0cmVhbS5wb3M7CgkJCXN0cmVhbS5lYXRXaGlsZSgvW0EtWl9dLyk7CgkJCWlmKC9bXGRhLXpdLy50ZXN0KHN0cmVhbS5sb29rKDApKSl7CgkJCQlzdHJlYW0ucG9zPXB9CgkJCWVsc2V7CgkJCQl2YXIgYz1QRVJMW3N0cmVhbS5jdXJyZW50KCldOwoJCQkJaWYoIWMpCgkJCQkJcmV0dXJuICJtZXRhIjsKCQkJCWlmKGNbMV0pCgkJCQkJYz1jWzBdOwoJCQkJaWYobCE9IjoiKXsKCQkJCQlpZihjPT0xKQoJCQkJCQlyZXR1cm4gImtleXdvcmQiOwoJCQkJCWVsc2UgaWYoYz09MikKCQkJCQkJcmV0dXJuICJkZWYiOwoJCQkJCWVsc2UgaWYoYz09MykKCQkJCQkJcmV0dXJuICJhdG9tIjsKCQkJCQllbHNlIGlmKGM9PTQpCgkJCQkJCXJldHVybiAib3BlcmF0b3IiOwoJCQkJCWVsc2UgaWYoYz09NSkKCQkJCQkJcmV0dXJuICJ2YXJpYWJsZS0yIjsKCQkJCQllbHNlCgkJCQkJCXJldHVybiAibWV0YSJ9CgkJCQllbHNlCgkJCQkJcmV0dXJuICJtZXRhIn19CgkJaWYoL1thLXpBLVpfXS8udGVzdChjaCkpewoJCQl2YXIgbD1zdHJlYW0ubG9vaygtMik7CgkJCXN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKCQkJdmFyIGM9UEVSTFtzdHJlYW0uY3VycmVudCgpXTsKCQkJaWYoIWMpCgkJCQlyZXR1cm4gIm1ldGEiOwoJCQlpZihjWzFdKQoJCQkJYz1jWzBdOwoJCQlpZihsIT0iOiIpewoJCQkJaWYoYz09MSkKCQkJCQlyZXR1cm4gImtleXdvcmQiOwoJCQkJZWxzZSBpZihjPT0yKQoJCQkJCXJldHVybiAiZGVmIjsKCQkJCWVsc2UgaWYoYz09MykKCQkJCQlyZXR1cm4gImF0b20iOwoJCQkJZWxzZSBpZihjPT00KQoJCQkJCXJldHVybiAib3BlcmF0b3IiOwoJCQkJZWxzZSBpZihjPT01KQoJCQkJCXJldHVybiAidmFyaWFibGUtMiI7CgkJCQllbHNlCgkJCQkJcmV0dXJuICJtZXRhIn0KCQkJZWxzZQoJCQkJcmV0dXJuICJtZXRhIn0KCQlyZXR1cm4gbnVsbH0KCglyZXR1cm57CgkJc3RhcnRTdGF0ZTpmdW5jdGlvbigpewoJCQlyZXR1cm57CgkJCQl0b2tlbml6ZTp0b2tlblBlcmwsCgkJCQljaGFpbjpudWxsLAoJCQkJc3R5bGU6bnVsbCwKCQkJCXRhaWw6bnVsbH19LAoJCXRva2VuOmZ1bmN0aW9uKHN0cmVhbSxzdGF0ZSl7CgkJCXJldHVybiAoc3RhdGUudG9rZW5pemV8fHRva2VuUGVybCkoc3RyZWFtLHN0YXRlKX0sCgkJZWxlY3RyaWNDaGFyczoie30ifX0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGVybCIsICJwZXJsIik7CgovLyBpdCdzIGxpa2UgInBlZWsiLCBidXQgbmVlZCBmb3IgbG9vay1haGVhZCBvciBsb29rLWJlaGluZCBpZiBpbmRleCA8IDAKQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmxvb2s9ZnVuY3Rpb24oYyl7CglyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyhjfHwwKSl9OwoKLy8gcmV0dXJuIGEgcGFydCBvZiBwcmVmaXggb2YgY3VycmVudCBzdHJlYW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uCkNvZGVNaXJyb3IuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5wcmVmaXg9ZnVuY3Rpb24oYyl7CglpZihjKXsKCQl2YXIgeD10aGlzLnBvcy1jOwoJCXJldHVybiB0aGlzLnN0cmluZy5zdWJzdHIoKHg+PTA/eDowKSxjKX0KCWVsc2V7CgkJcmV0dXJuIHRoaXMuc3RyaW5nLnN1YnN0cigwLHRoaXMucG9zLTEpfX07CgovLyByZXR1cm4gYSBwYXJ0IG9mIHN1ZmZpeCBvZiBjdXJyZW50IHN0cmVhbSBmcm9tIGN1cnJlbnQgcG9zaXRpb24KQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLnN1ZmZpeD1mdW5jdGlvbihjKXsKCXZhciB5PXRoaXMuc3RyaW5nLmxlbmd0aDsKCXZhciB4PXktdGhpcy5wb3MrMTsKCXJldHVybiB0aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsKGMmJmM8eT9jOngpKX07CgovLyByZXR1cm4gYSBwYXJ0IG9mIHN1ZmZpeCBvZiBjdXJyZW50IHN0cmVhbSBmcm9tIGN1cnJlbnQgcG9zaXRpb24gYW5kIGNoYW5nZSBjdXJyZW50IHBvc2l0aW9uCkNvZGVNaXJyb3IuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5uc3VmZml4PWZ1bmN0aW9uKGMpewoJdmFyIHA9dGhpcy5wb3M7Cgl2YXIgbD1jfHwodGhpcy5zdHJpbmcubGVuZ3RoLXRoaXMucG9zKzEpOwoJdGhpcy5wb3MrPWw7CglyZXR1cm4gdGhpcy5zdHJpbmcuc3Vic3RyKHAsbCl9OwoKLy8gZWF0aW5nIGFuZCB2b21pdGluZyBhIHBhcnQgb2Ygc3RyZWFtIGZyb20gY3VycmVudCBwb3NpdGlvbgpDb2RlTWlycm9yLlN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZWF0U3VmZml4PWZ1bmN0aW9uKGMpewoJdmFyIHg9dGhpcy5wb3MrYzsKCXZhciB5OwoJaWYoeDw9MCkKCQl0aGlzLnBvcz0wOwoJZWxzZSBpZih4Pj0oeT10aGlzLnN0cmluZy5sZW5ndGgtMSkpCgkJdGhpcy5wb3M9eTsKCWVsc2UKCQl0aGlzLnBvcz14fTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBIUCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGhwLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQSFAgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8P3BocApmdW5jdGlvbiBoZWxsbygkd2hvKSB7CglyZXR1cm4gIkhlbGxvICIgLiAkd2hvOwp9Cj8+CjxwPlRoZSBwcm9ncmFtIHNheXMgPD89IGhlbGxvKCJXb3JsZCIpID8+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIEpTIGNvZGUiKTsgLy8gYWxzbyBjb2xvcmVkCjwvc2NyaXB0Pgo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwIiwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIGVudGVyTW9kZTogImtlZXAiLAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgSFRNTC9QSFAgbW9kZSBiYXNlZCBvbgogICAgdGhlIDxhIGhyZWY9Ii4uL2NsaWtlLyI+Qy1saWtlPC9hPiBtb2RlLiBEZXBlbmRzIG9uIFhNTCwKICAgIEphdmFTY3JpcHQsIENTUywgYW5kIEMtbGlrZSBtb2Rlcy48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwPC9jb2RlPiAoSFRNTCB3aXRoIFBIUCBjb2RlKSwgPGNvZGU+dGV4dC94LXBocDwvY29kZT4gKHBsYWluLCBub24td3JhcHBlZCBQSFAgY29kZSkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICBmdW5jdGlvbiBoZXJlZG9jKGRlbGltKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKGRlbGltKSkgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfQogIH0KICB2YXIgcGhwQ29uZmlnID0gewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiBrZXl3b3JkcygiYWJzdHJhY3QgYW5kIGFycmF5IGFzIGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY2xvbmUgY29uc3QgY29udGludWUgZGVjbGFyZSBkZWZhdWx0ICIgKwogICAgICAgICAgICAgICAgICAgICAgICJkbyBlbHNlIGVsc2VpZiBlbmRkZWNsYXJlIGVuZGZvciBlbmRmb3JlYWNoIGVuZGlmIGVuZHN3aXRjaCBlbmR3aGlsZSBleHRlbmRzIGZpbmFsICIgKwogICAgICAgICAgICAgICAgICAgICAgICJmb3IgZm9yZWFjaCBmdW5jdGlvbiBnbG9iYWwgZ290byBpZiBpbXBsZW1lbnRzIGludGVyZmFjZSBpbnN0YW5jZW9mIG5hbWVzcGFjZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAibmV3IG9yIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBzdGF0aWMgc3dpdGNoIHRocm93IHRyYWl0IHRyeSB1c2UgdmFyIHdoaWxlIHhvciAiICsKICAgICAgICAgICAgICAgICAgICAgICAiZGllIGVjaG8gZW1wdHkgZXhpdCBldmFsIGluY2x1ZGUgaW5jbHVkZV9vbmNlIGlzc2V0IGxpc3QgcmVxdWlyZSByZXF1aXJlX29uY2UgcmV0dXJuICIgKwogICAgICAgICAgICAgICAgICAgICAgICJwcmludCB1bnNldCBfX2hhbHRfY29tcGlsZXIgc2VsZiBzdGF0aWMgcGFyZW50IiksCiAgICBibG9ja0tleXdvcmRzOiBrZXl3b3JkcygiY2F0Y2ggZG8gZWxzZSBlbHNlaWYgZm9yIGZvcmVhY2ggaWYgc3dpdGNoIHRyeSB3aGlsZSIpLAogICAgYXRvbXM6IGtleXdvcmRzKCJ0cnVlIGZhbHNlIG51bGwgVFJVRSBGQUxTRSBOVUxMIiksCiAgICBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLAogICAgaG9va3M6IHsKICAgICAgIiQiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgfSwKICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvPDwvKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaGVyZWRvYyhzdHJlYW0uY3VycmVudCgpLnNsaWNlKDMpKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9LAogICAgICAiIyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiAhc3RyZWFtLm1hdGNoKCI/PiIsIGZhbHNlKSkgc3RyZWFtLm5leHQoKTsKICAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgICB9LAogICAgICAiLyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiAhc3RyZWFtLm1hdGNoKCI/PiIsIGZhbHNlKSkgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH07CgogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGhwIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICAgIHZhciBqc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiamF2YXNjcmlwdCIpOwogICAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiY3NzIik7CiAgICB2YXIgcGhwTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBocENvbmZpZyk7CgogICAgZnVuY3Rpb24gZGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgeyAvLyBUT0RPIG9wZW4gUEhQIGluc2lkZSB0ZXh0L2NzcwogICAgICB2YXIgaXNQSFAgPSBzdGF0ZS5tb2RlID09ICJwaHAiOwogICAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0YXRlLnBlbmRpbmcgIT0gJyInKSBzdGF0ZS5wZW5kaW5nID0gbnVsbDsKICAgICAgaWYgKHN0YXRlLmN1ck1vZGUgPT0gaHRtbE1vZGUpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFw/XHcqLykpIHsKICAgICAgICAgIHN0YXRlLmN1ck1vZGUgPSBwaHBNb2RlOwogICAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBzdGF0ZS5waHA7CiAgICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9ICI/PiI7CgkgIHN0YXRlLm1vZGUgPSAicGhwIjsKICAgICAgICAgIHJldHVybiAibWV0YSI7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5wZW5kaW5nID09ICciJykgewogICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLm5leHQoKSAhPSAnIicpIHt9CiAgICAgICAgICB2YXIgc3R5bGUgPSAic3RyaW5nIjsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBlbmRpbmcgJiYgc3RyZWFtLnBvcyA8IHN0YXRlLnBlbmRpbmcuZW5kKSB7CiAgICAgICAgICBzdHJlYW0ucG9zID0gc3RhdGUucGVuZGluZy5lbmQ7CiAgICAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS5wZW5kaW5nLnN0eWxlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN1clN0YXRlKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUucGVuZGluZyA9IG51bGw7CiAgICAgICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCksIG9wZW5QSFAgPSBjdXIuc2VhcmNoKC88XD8vKTsKICAgICAgICBpZiAob3BlblBIUCAhPSAtMSkgewogICAgICAgICAgaWYgKHN0eWxlID09ICJzdHJpbmciICYmIC9cIiQvLnRlc3QoY3VyKSAmJiAhL1w/Pi8udGVzdChjdXIpKSBzdGF0ZS5wZW5kaW5nID0gJyInOwogICAgICAgICAgZWxzZSBzdGF0ZS5wZW5kaW5nID0ge2VuZDogc3RyZWFtLnBvcywgc3R5bGU6IHN0eWxlfTsKICAgICAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIG9wZW5QSFApOwogICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT0gInRhZyIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUuY3VyU3RhdGUuY29udGV4dCkgewogICAgICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3Qoc3RhdGUuY3VyU3RhdGUuY29udGV4dC50YWdOYW1lKSkgewogICAgICAgICAgICBzdGF0ZS5jdXJNb2RlID0ganNNb2RlOwogICAgICAgICAgICBzdGF0ZS5jdXJTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5jdXJTdGF0ZSwgIiIpKTsKICAgICAgICAgICAgc3RhdGUuY3VyQ2xvc2UgPSAvXjxcL1xzKnNjcmlwdFxzKj4vaTsKCSAgICBzdGF0ZS5tb2RlID0gImphdmFzY3JpcHQiOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoL15zdHlsZSQvaS50ZXN0KHN0YXRlLmN1clN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGNzc01vZGU7CiAgICAgICAgICAgIHN0YXRlLmN1clN0YXRlID0gY3NzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5jdXJTdGF0ZSwgIiIpKTsKICAgICAgICAgICAgc3RhdGUuY3VyQ2xvc2UgPSAvXjxcL1xzKnN0eWxlXHMqPi9pOwogICAgICAgICAgICBzdGF0ZS5tb2RlID0gImNzcyI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgfSBlbHNlIGlmICgoIWlzUEhQIHx8IHN0YXRlLnBocC50b2tlbml6ZSA9PSBudWxsKSAmJgogICAgICAgICAgICAgICAgIHN0cmVhbS5tYXRjaChzdGF0ZS5jdXJDbG9zZSwgaXNQSFApKSB7CiAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGh0bWxNb2RlOwogICAgICAgIHN0YXRlLmN1clN0YXRlID0gc3RhdGUuaHRtbDsKICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9IG51bGw7CglzdGF0ZS5tb2RlID0gImh0bWwiOwogICAgICAgIGlmIChpc1BIUCkgcmV0dXJuICJtZXRhIjsKICAgICAgICBlbHNlIHJldHVybiBkaXNwYXRjaChzdHJlYW0sIHN0YXRlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gc3RhdGUuY3VyTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN1clN0YXRlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB7CiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBodG1sID0gaHRtbE1vZGUuc3RhcnRTdGF0ZSgpOwogICAgICAgIHJldHVybiB7aHRtbDogaHRtbCwKICAgICAgICAgICAgICAgIHBocDogcGhwTW9kZS5zdGFydFN0YXRlKCksCiAgICAgICAgICAgICAgICBjdXJNb2RlOiBwYXJzZXJDb25maWcuc3RhcnRPcGVuID8gcGhwTW9kZSA6IGh0bWxNb2RlLAogICAgICAgICAgICAgICAgY3VyU3RhdGU6IHBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBwaHBNb2RlLnN0YXJ0U3RhdGUoKSA6IGh0bWwsCiAgICAgICAgICAgICAgICBjdXJDbG9zZTogcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/IC9eXD8+LyA6IG51bGwsCgkJbW9kZTogcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/ICJwaHAiIDogImh0bWwiLAogICAgICAgICAgICAgICAgcGVuZGluZzogbnVsbH0KICAgICAgfSwKCiAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICB2YXIgaHRtbCA9IHN0YXRlLmh0bWwsIGh0bWxOZXcgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgaHRtbCksCiAgICAgICAgICAgIHBocCA9IHN0YXRlLnBocCwgcGhwTmV3ID0gQ29kZU1pcnJvci5jb3B5U3RhdGUocGhwTW9kZSwgcGhwKSwgY3VyOwogICAgICAgIGlmIChzdGF0ZS5jdXJTdGF0ZSA9PSBodG1sKSBjdXIgPSBodG1sTmV3OwogICAgICAgIGVsc2UgaWYgKHN0YXRlLmN1clN0YXRlID09IHBocCkgY3VyID0gcGhwTmV3OwogICAgICAgIGVsc2UgY3VyID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoc3RhdGUuY3VyTW9kZSwgc3RhdGUuY3VyU3RhdGUpOwogICAgICAgIHJldHVybiB7aHRtbDogaHRtbE5ldywgcGhwOiBwaHBOZXcsIGN1ck1vZGU6IHN0YXRlLmN1ck1vZGUsIGN1clN0YXRlOiBjdXIsCiAgICAgICAgICAgICAgICBjdXJDbG9zZTogc3RhdGUuY3VyQ2xvc2UsIG1vZGU6IHN0YXRlLm1vZGUsCiAgICAgICAgICAgICAgICBwZW5kaW5nOiBzdGF0ZS5wZW5kaW5nfTsKICAgICAgfSwKCiAgICAgIHRva2VuOiBkaXNwYXRjaCwKCiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgIGlmICgoc3RhdGUuY3VyTW9kZSAhPSBwaHBNb2RlICYmIC9eXHMqPFwvLy50ZXN0KHRleHRBZnRlcikpIHx8CiAgICAgICAgICAgIChzdGF0ZS5jdXJNb2RlID09IHBocE1vZGUgJiYgL15cPz4vLnRlc3QodGV4dEFmdGVyKSkpCiAgICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWwsIHRleHRBZnRlcik7CiAgICAgICAgcmV0dXJuIHN0YXRlLmN1ck1vZGUuaW5kZW50KHN0YXRlLmN1clN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICB9LAoKICAgICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgICB9CiAgfSwgInhtbCIsICJjbGlrZSIsICJqYXZhc2NyaXB0IiwgImNzcyIpOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1odHRwZC1waHAiLCAicGhwIik7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWh0dHBkLXBocC1vcGVuIiwge25hbWU6ICJwaHAiLCBzdGFydE9wZW46IHRydWV9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1waHAiLCBwaHBDb25maWcpOwp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pig/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/pig/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBpZyBMYXRpbiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGlnLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOiAycHggaW5zZXQgI2RlZTt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogUGlnIExhdGluIG1vZGU8L2gxPgoKPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLS0gQXBhY2hlIFBpZyAoUGlnIExhdGluIExhbmd1YWdlKSBEZW1vCi8qIApUaGlzIGlzIGEgbXVsdGlsaW5lIGNvbW1lbnQuCiovCmEgPSBMT0FEICJccGF0aFx0b1xpbnB1dCIgVVNJTkcgUGlnU3RvcmFnZSgnXHQnKSBBUyAoeDpsb25nLCB5OmNoYXJhcnJheSwgejpieXRlYXJyYXkpOwpiID0gR1JPVVAgYSBCWSAoeCx5LDMrNCk7CmMgPSBGT1JFQUNIIGIgR0VORVJBVEUgZmxhdHRlbihncm91cCkgYXMgKHgseSksIFNVTShncm91cC4kMikgYXMgejsKU1RPUkUgYyBJTlRPICJccGF0aFx0b1xvdXRwdXQiOwoKLS0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgbW9kZTogInRleHQveC1waWciCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+CiAgICAgICAgU2ltcGxlIG1vZGUgdGhhdCBoYW5kbGVzIFBpZyBMYXRpbiBsYW5ndWFnZS4KICAgIDwvcD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZSBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGlnPC9jb2RlPgogICAgKFBJRyBjb2RlKQo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pig/pig.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICoJUGlnIExhdGluIE1vZGUgZm9yIENvZGVNaXJyb3IgMiAKICoJQGF1dGhvciBQcmFzYW50aCBKYXlhY2hhbmRyYW4KICoJQGxpbmsgCWh0dHBzOi8vZ2l0aHViLmNvbS9wcmFzYW50aGovcGlnLWNvZGVtaXJyb3ItMgogKiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBhZGFwdGVkIGZyb20gUEwvU1FMIG1vZGUgaW4gQ29kZU1pcnJvciAyLgoqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoInBpZyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7Cgl2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LAoJCWtleXdvcmRzID0gcGFyc2VyQ29uZmlnLmtleXdvcmRzLAoJCWJ1aWx0aW5zID0gcGFyc2VyQ29uZmlnLmJ1aWx0aW5zLAoJCXR5cGVzID0gcGFyc2VyQ29uZmlnLnR5cGVzLAoJCW11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5nczsKCQoJdmFyIGlzT3BlcmF0b3JDaGFyID0gL1sqK1wtJTw+PSY/OlwvIXxdLzsKCQoJZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgZikgewoJCXN0YXRlLnRva2VuaXplID0gZjsKCQlyZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKCX0KCQoJdmFyIHR5cGU7CglmdW5jdGlvbiByZXQodHAsIHN0eWxlKSB7CgkJdHlwZSA9IHRwOwoJCXJldHVybiBzdHlsZTsKCX0KCQoJZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgaXNFbmQgPSBmYWxzZTsKCQl2YXIgY2g7CgkJd2hpbGUoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmKGNoID09ICIvIiAmJiBpc0VuZCkgewoJCQkJc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQlpc0VuZCA9IChjaCA9PSAiKiIpOwoJCX0KCQlyZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKCX0KCQoJZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKCQlyZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQl2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKCQkJd2hpbGUoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CgkJCQlpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgewoJCQkJCWVuZCA9IHRydWU7IGJyZWFrOwoJCQkJfQoJCQkJZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKCQkJfQoJCQlpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSkKCQkJCXN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwoJCQlyZXR1cm4gcmV0KCJzdHJpbmciLCAiZXJyb3IiKTsKCQl9OwoJfQoJCglmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CgkJCgkJLy8gaXMgYSBzdGFydCBvZiBzdHJpbmc/CgkJaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCgkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwoJCS8vIGlzIGl0IG9uZSBvZiB0aGUgc3BlY2lhbCBjaGFycwoJCWVsc2UgaWYoL1tcW1xde31cKFwpLDtcLl0vLnRlc3QoY2gpKQoJCQlyZXR1cm4gcmV0KGNoKTsKCQkvLyBpcyBpdCBhIG51bWJlcj8KCQllbHNlIGlmKC9cZC8udGVzdChjaCkpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKCQkJcmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwoJCX0KCQkvLyBtdWx0aSBsaW5lIGNvbW1lbnQgb3Igb3BlcmF0b3IKCQllbHNlIGlmIChjaCA9PSAiLyIpIHsKCQkJaWYgKHN0cmVhbS5lYXQoIioiKSkgewoJCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7CgkJCX0KCQkJZWxzZSB7CgkJCQlzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwoJCQkJcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiKTsKCQkJfQoJCX0KCQkvLyBzaW5nbGUgbGluZSBjb21tZW50IG9yIG9wZXJhdG9yCgkJZWxzZSBpZiAoY2g9PSItIikgewoJCQlpZihzdHJlYW0uZWF0KCItIikpewoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOwoJCQkJcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CgkJCX0KCQkJZWxzZSB7CgkJCQlzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwoJCQkJcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiKTsKCQkJfQoJCX0KCQkvLyBpcyBpdCBhbiBvcGVyYXRvcgoJCWVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CgkJCXN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CgkJCXJldHVybiByZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIik7CgkJfQoJCWVsc2UgewoJCQkvLyBnZXQgdGhlIHdoaWxlIHdvcmQKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CgkJCS8vIGlzIGl0IG9uZSBvZiB0aGUgbGlzdGVkIGtleXdvcmRzPwoJCQlpZiAoa2V5d29yZHMgJiYga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKS50b1VwcGVyQ2FzZSgpKSkgewoJCQkJaWYgKHN0cmVhbS5lYXQoIikiKSB8fCBzdHJlYW0uZWF0KCIuIikpIHsKCQkJCQkvL2tleXdvcmRzIGNhbiBiZSB1c2VkIGFzIHZhcmlhYmxlcyBsaWtlIGZsYXR0ZW4oZ3JvdXApLCBncm91cC4kMCBldGMuLgoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJcmV0dXJuICgia2V5d29yZCIsICJrZXl3b3JkIik7CgkJCQl9CgkJCX0KCQkJLy8gaXMgaXQgb25lIG9mIHRoZSBidWlsdGluIGZ1bmN0aW9ucz8KCQkJaWYgKGJ1aWx0aW5zICYmIGJ1aWx0aW5zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkudG9VcHBlckNhc2UoKSkpCgkJCXsKCQkJCXJldHVybiAoImtleXdvcmQiLCAidmFyaWFibGUtMiIpCgkJCX0KCQkJLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgdHlwZXM/CgkJCWlmICh0eXBlcyAmJiB0eXBlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvVXBwZXJDYXNlKCkpKQoJCQkJcmV0dXJuICgia2V5d29yZCIsICJ2YXJpYWJsZS0zIikKCQkJLy8gZGVmYXVsdCBpcyBhICd3b3JkJwoJCQlyZXR1cm4gcmV0KCJ3b3JkIiwgInBpZy13b3JkIik7CgkJfQoJfQoJCgkvLyBJbnRlcmZhY2UKCXJldHVybiB7CgkJc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewoJCQlyZXR1cm4gewoJCQkJdG9rZW5pemU6IHRva2VuQmFzZSwKCQkJCXN0YXJ0T2ZMaW5lOiB0cnVlCgkJCX07CgkJfSwKCQkKCQl0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQlpZihzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CgkJCXZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoJCQlyZXR1cm4gc3R5bGU7CgkJfQoJfTsKfSk7CgooZnVuY3Rpb24oKSB7CglmdW5jdGlvbiBrZXl3b3JkcyhzdHIpIHsKCQl2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAJCXJldHVybiBvYmo7CiAJfQoKCS8vIGJ1aWx0aW4gZnVuY3MgdGFrZW4gZnJvbSB0cnVuayByZXZpc2lvbiAxMzAzMjM3Cgl2YXIgcEJ1aWx0aW5zID0gIkFCUyBBQ09TIEFSSVRZIEFTSU4gQVRBTiBBVkcgQkFHU0laRSBCSU5TVE9SQUdFIEJMT09NIEJVSUxEQkxPT00gQ0JSVCBDRUlMICIgCgkrICJDT05DQVQgQ09SIENPUyBDT1NIIENPVU5UIENPVU5UX1NUQVIgQ09WIENPTlNUQU5UU0laRSBDVUJFRElNRU5TSU9OUyBESUZGIERJU1RJTkNUIERPVUJMRUFCUyAiCgkrICJET1VCTEVBVkcgRE9VQkxFQkFTRSBET1VCTEVNQVggRE9VQkxFTUlOIERPVUJMRVJPVU5EIERPVUJMRVNVTSBFWFAgRkxPT1IgRkxPQVRBQlMgRkxPQVRBVkcgIgoJKyAiRkxPQVRNQVggRkxPQVRNSU4gRkxPQVRST1VORCBGTE9BVFNVTSBHRU5FUklDSU5WT0tFUiBJTkRFWE9GIElOVEFCUyBJTlRBVkcgSU5UTUFYIElOVE1JTiAiCgkrICJJTlRTVU0gSU5WT0tFRk9SRE9VQkxFIElOVk9LRUZPUkZMT0FUIElOVk9LRUZPUklOVCBJTlZPS0VGT1JMT05HIElOVk9LRUZPUlNUUklORyBJTlZPS0VSICIKCSsgIklTRU1QVFkgSlNPTkxPQURFUiBKU09OTUVUQURBVEEgSlNPTlNUT1JBR0UgTEFTVF9JTkRFWF9PRiBMQ0ZJUlNUIExPRyBMT0cxMCBMT1dFUiBMT05HQUJTICIKCSsgIkxPTkdBVkcgTE9OR01BWCBMT05HTUlOIExPTkdTVU0gTUFYIE1JTiBNQVBTSVpFIE1PTklUT1JFRFVERiBOT05ERVRFUk1JTklTVElDIE9VVFBVVFNDSEVNQSAgIgoJKyAiUElHU1RPUkFHRSBQSUdTVFJFQU1JTkcgUkFORE9NIFJFR0VYX0VYVFJBQ1QgUkVHRVhfRVhUUkFDVF9BTEwgUkVQTEFDRSBST1VORCBTSU4gU0lOSCBTSVpFICIKCSsgIlNRUlQgU1RSU1BMSVQgU1VCU1RSSU5HIFNVTSBTVFJJTkdDT05DQVQgU1RSSU5HTUFYIFNUUklOR01JTiBTVFJJTkdTSVpFIFRBTiBUQU5IIFRPQkFHICIKCSsgIlRPS0VOSVpFIFRPTUFQIFRPUCBUT1RVUExFIFRSSU0gVEVYVExPQURFUiBUVVBMRVNJWkUgVUNGSVJTVCBVUFBFUiBVVEY4U1RPUkFHRUNPTlZFUlRFUiAiOyAKCQoJLy8gdGFrZW4gZnJvbSBRdWVyeUxleGVyLmcKCXZhciBwS2V5d29yZHMgPSAiVk9JRCBJTVBPUlQgUkVUVVJOUyBERUZJTkUgTE9BRCBGSUxURVIgRk9SRUFDSCBPUkRFUiBDVUJFIERJU1RJTkNUIENPR1JPVVAgIgoJKyAiSk9JTiBDUk9TUyBVTklPTiBTUExJVCBJTlRPIElGIE9USEVSV0lTRSBBTEwgQVMgQlkgVVNJTkcgSU5ORVIgT1VURVIgT05TQ0hFTUEgUEFSQUxMRUwgIgoJKyAiUEFSVElUSU9OIEdST1VQIEFORCBPUiBOT1QgR0VORVJBVEUgRkxBVFRFTiBBU0MgREVTQyBJUyBTVFJFQU0gVEhST1VHSCBTVE9SRSBNQVBSRURVQ0UgIgoJKyAiU0hJUCBDQUNIRSBJTlBVVCBPVVRQVVQgU1RERVJST1IgU1RESU4gU1RET1VUIExJTUlUIFNBTVBMRSBMRUZUIFJJR0hUIEZVTEwgRVEgR1QgTFQgR1RFIExURSAiIAoJKyAiTkVRIE1BVENIRVMgVFJVRSBGQUxTRSAiOyAKCQoJLy8gZGF0YSB0eXBlcwoJdmFyIHBUeXBlcyA9ICJCT09MRUFOIElOVCBMT05HIEZMT0FUIERPVUJMRSBDSEFSQVJSQVkgQllURUFSUkFZIEJBRyBUVVBMRSBNQVAgIgoJCglDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1waWciLCB7CgkgbmFtZTogInBpZyIsCgkgYnVpbHRpbnM6IGtleXdvcmRzKHBCdWlsdGlucyksCgkga2V5d29yZHM6IGtleXdvcmRzKHBLZXl3b3JkcyksCgkgdHlwZXM6IGtleXdvcmRzKHBUeXBlcykKCSB9KTsKfSgpKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE9yYWNsZSBQTC9TUUwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InBsc3FsLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOiAycHggaW5zZXQgI2RlZTt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogT3JhY2xlIFBML1NRTCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tIE9yYWNsZSBQTC9TUUwgQ29kZSBEZW1vCi8qCiAgIGJhc2VkIG9uIGMtbGlrZSBtb2RlLCBhZGFwdGVkIHRvIFBML1NRTCBieSBQZXRlciBSYWdhbml0c2NoICggaHR0cDovL3d3dy5vcmFjbGUtYW5kLWFwZXguY29tLyApCiAgIEFwcmlsIDIwMTEKKi8KREVDTEFSRQogICAgdklkeCAgICBOVU1CRVI7CiAgICB2U3RyaW5nIFZBUkNIQVIyKDEwMCk7CiAgICBjVGV4dCAgIENPTlNUQU5UIFZBUkNIQVIyKDEwMCkgOj0gJ1RoYXQnJ3MgaXQhIEhhdmUgZnVuIHdpdGggQ29kZU1pcnJvciAyJzsKQkVHSU4KICAgIHZJZHggOj0gMDsKICAgIC0tCiAgICBGT1IgckRBVEEgSU4KICAgICAgKCBTRUxFQ1QgKgogICAgICAgICAgRlJPTSBFTVAKICAgICAgICAgT1JERVIgQlkgRU1QTk8KICAgICAgKQogICAgTE9PUAogICAgICAgIHZJZHggICAgOj0gdklkeCArIDE7CiAgICAgICAgdlN0cmluZyA6PSByREFUQS5FTVBOTyB8fCAnIC0gJyB8fCByREFUQS5FTkFNRTsKICAgICAgICAtLQogICAgICAgIFVQREFURSBFTVAKICAgICAgICAgICBTRVQgU0FMICAgPSBTQUwgKiAxMDEvMTAwCiAgICAgICAgIFdIRVJFIEVNUE5PID0gckRBVEEuRU1QTk8KICAgICAgICA7CiAgICBFTkQgTE9PUDsKICAgIC0tCiAgICBTWVMuREJNU19PVVRQVVQuUHV0X0xpbmUgKGNUZXh0KTsKRU5EOwotLQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBtb2RlOiAidGV4dC94LXBsc3FsIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPgogICAgICAgIFNpbXBsZSBtb2RlIHRoYXQgaGFuZGxlcyBPcmFjbGUgUEwvU1FMIGxhbmd1YWdlIChhbmQgT3JhY2xlIFNRTCwgb2YgY291cnNlKS4KICAgIDwvcD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZSBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGxzcWw8L2NvZGU+CiAgICAoUExTUUwgY29kZSkKPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/plsql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwbHNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgICAgICAgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgICAgICAgICA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcywKICAgICAgZnVuY3Rpb25zICAgICAgICA9IHBhcnNlckNvbmZpZy5mdW5jdGlvbnMsCiAgICAgIHR5cGVzICAgICAgICAgICAgPSBwYXJzZXJDb25maWcudHlwZXMsCiAgICAgIHNxbHBsdXMgICAgICAgICAgPSBwYXJzZXJDb25maWcuc3FscGx1cywKICAgICAgbXVsdGlMaW5lU3RyaW5ncyA9IHBhcnNlckNvbmZpZy5tdWx0aUxpbmVTdHJpbmdzOwogIHZhciBpc09wZXJhdG9yQ2hhciAgID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIHZhciB0eXBlOwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUpIHsKICAgIHR5cGUgPSB0cDsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgLy8gc3RhcnQgb2Ygc3RyaW5nPwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwogICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcLl0vLnRlc3QoY2gpKQogICAgICByZXR1cm4gcmV0KGNoKTsKICAgIC8vIHN0YXJ0IG9mIGEgbnVtYmVyIHZhbHVlPwogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9CiAgICAvLyBtdWx0aSBsaW5lIGNvbW1lbnQgb3Igc2ltcGxlIG9wZXJhdG9yPwogICAgZWxzZSBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIik7CiAgICAgIH0KICAgIH0KICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQgb3Igc2ltcGxlIG9wZXJhdG9yPwogICAgZWxzZSBpZiAoY2ggPT0gIi0iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCItIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIpOwogICAgICB9CiAgICB9CiAgICAvLyBwbC9zcWwgdmFyaWFibGU/CiAgICBlbHNlIGlmIChjaCA9PSAiQCIgfHwgY2ggPT0gIiQiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XGRcJF9dLyk7CiAgICAgIHJldHVybiByZXQoIndvcmQiLCAidmFyaWFibGUiKTsKICAgIH0KICAgIC8vIGlzIGl0IGEgb3BlcmF0b3I/CiAgICBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIGdldCB0aGUgd2hvbGUgd29yZAogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQga2V5d29yZHM/CiAgICAgIGlmIChrZXl3b3JkcyAmJiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImtleXdvcmQiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImJ1aWx0aW4iKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgdHlwZXM/CiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInZhcmlhYmxlLTIiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgc3FscGx1cyBrZXl3b3Jkcz8KICAgICAgaWYgKHNxbHBsdXMgJiYgc3FscGx1cy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInZhcmlhYmxlLTMiKTsKICAgICAgLy8gZGVmYXVsdDoganVzdCBhICJ3b3JkIgogICAgICByZXR1cm4gcmV0KCJ3b3JkIiwgInBsc3FsLXdvcmQiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJwbHNxbC1zdHJpbmciKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAicGxzcWwtY29tbWVudCIpOwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICBzdGFydE9mTGluZTogdHJ1ZQogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfQogIH07Cn0pOwoKKGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIgY0tleXdvcmRzID0gImFib3J0IGFjY2VwdCBhY2Nlc3MgYWRkIGFsbCBhbHRlciBhbmQgYW55IGFycmF5IGFycmF5bGVuIGFzIGFzYyBhc3NlcnQgYXNzaWduIGF0IGF0dHJpYnV0ZXMgYXVkaXQgIiArCiAgICAgICAgImF1dGhvcml6YXRpb24gYXZnICIgKwogICAgICAgICJiYXNlX3RhYmxlIGJlZ2luIGJldHdlZW4gYmluYXJ5X2ludGVnZXIgYm9keSBib29sZWFuIGJ5ICIgKwogICAgICAgICJjYXNlIGNhc3QgY2hhciBjaGFyX2Jhc2UgY2hlY2sgY2xvc2UgY2x1c3RlciBjbHVzdGVycyBjb2xhdXRoIGNvbHVtbiBjb21tZW50IGNvbW1pdCBjb21wcmVzcyBjb25uZWN0ICIgKwogICAgICAgICJjb25uZWN0ZWQgY29uc3RhbnQgY29uc3RyYWludCBjcmFzaCBjcmVhdGUgY3VycmVudCBjdXJydmFsIGN1cnNvciAiICsKICAgICAgICAiZGF0YV9iYXNlIGRhdGFiYXNlIGRhdGUgZGJhIGRlYWxsb2NhdGUgZGVidWdvZmYgZGVidWdvbiBkZWNpbWFsIGRlY2xhcmUgZGVmYXVsdCBkZWZpbml0aW9uIGRlbGF5IGRlbGV0ZSAiICsKICAgICAgICAiZGVzYyBkaWdpdHMgZGlzcG9zZSBkaXN0aW5jdCBkbyBkcm9wICIgKwogICAgICAgICJlbHNlIGVsc2lmIGVuYWJsZSBlbmQgZW50cnkgZXNjYXBlIGV4Y2VwdGlvbiBleGNlcHRpb25faW5pdCBleGNoYW5nZSBleGNsdXNpdmUgZXhpc3RzIGV4aXQgZXh0ZXJuYWwgIiArCiAgICAgICAgImZhc3QgZmV0Y2ggZmlsZSBmb3IgZm9yY2UgZm9ybSBmcm9tIGZ1bmN0aW9uICIgKwogICAgICAgICJnZW5lcmljIGdvdG8gZ3JhbnQgZ3JvdXAgIiArCiAgICAgICAgImhhdmluZyAiICsKICAgICAgICAiaWRlbnRpZmllZCBpZiBpbW1lZGlhdGUgaW4gaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kaWNhdG9yIGluaXRpYWwgaW5pdHJhbnMgaW5zZXJ0IGludGVyZmFjZSBpbnRlcnNlY3QgIiArCiAgICAgICAgImludG8gaXMgIiArCiAgICAgICAgImtleSAiICsKICAgICAgICAibGV2ZWwgbGlicmFyeSBsaWtlIGxpbWl0ZWQgbG9jYWwgbG9jayBsb2cgbG9nZ2luZyBsb25nIGxvb3AgIiArCiAgICAgICAgIm1hc3RlciBtYXhleHRlbnRzIG1heHRyYW5zIG1lbWJlciBtaW5leHRlbnRzIG1pbnVzIG1pc2xhYmVsIG1vZGUgbW9kaWZ5IG11bHRpc2V0ICIgKwogICAgICAgICJuZXcgbmV4dCBubyBub2F1ZGl0IG5vY29tcHJlc3Mgbm9sb2dnaW5nIG5vcGFyYWxsZWwgbm90IG5vd2FpdCBudW1iZXJfYmFzZSAiICsKICAgICAgICAib2JqZWN0IG9mIG9mZiBvZmZsaW5lIG9uIG9ubGluZSBvbmx5IG9wZW4gb3B0aW9uIG9yIG9yZGVyIG91dCAiICsKICAgICAgICAicGFja2FnZSBwYXJhbGxlbCBwYXJ0aXRpb24gcGN0ZnJlZSBwY3RpbmNyZWFzZSBwY3R1c2VkIHBsc19pbnRlZ2VyIHBvc2l0aXZlIHBvc2l0aXZlbiBwcmFnbWEgcHJpbWFyeSBwcmlvciAiICsKICAgICAgICAicHJpdmF0ZSBwcml2aWxlZ2VzIHByb2NlZHVyZSBwdWJsaWMgIiArCiAgICAgICAgInJhaXNlIHJhbmdlIHJhdyByZWFkIHJlYnVpbGQgcmVjb3JkIHJlZiByZWZlcmVuY2VzIHJlZnJlc2ggcmVsZWFzZSByZW5hbWUgcmVwbGFjZSByZXNvdXJjZSByZXN0cmljdCByZXR1cm4gIiArCiAgICAgICAgInJldHVybmluZyByZXZlcnNlIHJldm9rZSByb2xsYmFjayByb3cgcm93aWQgcm93bGFiZWwgcm93bnVtIHJvd3MgcnVuICIgKwogICAgICAgICJzYXZlcG9pbnQgc2NoZW1hIHNlZ21lbnQgc2VsZWN0IHNlcGFyYXRlIHNlc3Npb24gc2V0IHNoYXJlIHNuYXBzaG90IHNvbWUgc3BhY2Ugc3BsaXQgc3FsIHN0YXJ0IHN0YXRlbWVudCAiICsKICAgICAgICAic3RvcmFnZSBzdWJ0eXBlIHN1Y2Nlc3NmdWwgc3lub255bSAiICsKICAgICAgICAidGFiYXV0aCB0YWJsZSB0YWJsZXMgdGFibGVzcGFjZSB0YXNrIHRlcm1pbmF0ZSB0aGVuIHRvIHRyaWdnZXIgdHJ1bmNhdGUgdHlwZSAiICsKICAgICAgICAidW5pb24gdW5pcXVlIHVubGltaXRlZCB1bnJlY292ZXJhYmxlIHVudXNhYmxlIHVwZGF0ZSB1c2UgdXNpbmcgIiArCiAgICAgICAgInZhbGlkYXRlIHZhbHVlIHZhbHVlcyB2YXJpYWJsZSB2aWV3IHZpZXdzICIgKwogICAgICAgICJ3aGVuIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdpdGggd29yayI7CgogIHZhciBjRnVuY3Rpb25zID0gImFicyBhY29zIGFkZF9tb250aHMgYXNjaWkgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgIiArCiAgICAgICAgImJmaWxlbmFtZSAiICsKICAgICAgICAiY2VpbCBjaGFydG9yb3dpZCBjaHIgY29uY2F0IGNvbnZlcnQgY29zIGNvc2ggY291bnQgIiArCiAgICAgICAgImRlY29kZSBkZXJlZiBkdWFsIGR1bXAgZHVwX3ZhbF9vbl9pbmRleCAiICsKICAgICAgICAiZW1wdHkgZXJyb3IgZXhwICIgKwogICAgICAgICJmYWxzZSBmbG9vciBmb3VuZCAiICsKICAgICAgICAiZ2xiIGdyZWF0ZXN0ICIgKwogICAgICAgICJoZXh0b3JhdyAiICsKICAgICAgICAiaW5pdGNhcCBpbnN0ciBpbnN0cmIgaXNvcGVuICIgKwogICAgICAgICJsYXN0X2RheSBsZWFzdCBsZW5naHQgbGVuZ2h0YiBsbiBsb3dlciBscGFkIGx0cmltIGx1YiAiICsKICAgICAgICAibWFrZV9yZWYgbWF4IG1pbiBtb2QgbW9udGhzX2JldHdlZW4gIiArCiAgICAgICAgIm5ld190aW1lIG5leHRfZGF5IG5leHR2YWwgbmxzX2NoYXJzZXRfZGVjbF9sZW4gbmxzX2NoYXJzZXRfaWQgbmxzX2NoYXJzZXRfbmFtZSBubHNfaW5pdGNhcCBubHNfbG93ZXIgIiArCiAgICAgICAgIm5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5vX2RhdGFfZm91bmQgbm90Zm91bmQgbnVsbCBudmwgIiArCiAgICAgICAgIm90aGVycyAiICsKICAgICAgICAicG93ZXIgIiArCiAgICAgICAgInJhd3RvaGV4IHJlZnRvaGV4IHJvdW5kIHJvd2NvdW50IHJvd2lkdG9jaGFyIHJwYWQgcnRyaW0gIiArCiAgICAgICAgInNpZ24gc2luIHNpbmggc291bmRleCBzcWxjb2RlIHNxbGVycm0gc3FydCBzdGRkZXYgc3Vic3RyIHN1YnN0cmIgc3VtIHN5c2RhdGUgIiArCiAgICAgICAgInRhbiB0YW5oIHRvX2NoYXIgdG9fZGF0ZSB0b19sYWJlbCB0b19tdWx0aV9ieXRlIHRvX251bWJlciB0b19zaW5nbGVfYnl0ZSB0cmFuc2xhdGUgdHJ1ZSB0cnVuYyAiICsKICAgICAgICAidWlkIHVwcGVyIHVzZXIgdXNlcmVudiAiICsKICAgICAgICAidmFyaWFuY2UgdnNpemUiOwoKICB2YXIgY1R5cGVzID0gImJmaWxlIGJsb2IgIiArCiAgICAgICAgImNoYXJhY3RlciBjbG9iICIgKwogICAgICAgICJkZWMgIiArCiAgICAgICAgImZsb2F0ICIgKwogICAgICAgICJpbnQgaW50ZWdlciAiICsKICAgICAgICAibWxzbGFiZWwgIiArCiAgICAgICAgIm5hdHVyYWwgbmF0dXJhbG4gbmNoYXIgbmNsb2IgbnVtYmVyIG51bWVyaWMgbnZhcmNoYXIyICIgKwogICAgICAgICJyZWFsIHJvd3R5cGUgIiArCiAgICAgICAgInNpZ250eXBlIHNtYWxsaW50IHN0cmluZyAiICsKICAgICAgICAidmFyY2hhciB2YXJjaGFyMiI7CgogIHZhciBjU3FscGx1cyA9ICJhcHBpbmZvIGFycmF5c2l6ZSBhdXRvY29tbWl0IGF1dG9wcmludCBhdXRvcmVjb3ZlcnkgYXV0b3RyYWNlICIgKwogICAgICAgICJibG9ja3Rlcm1pbmF0b3IgYnJlYWsgYnRpdGxlICIgKwogICAgICAgICJjbWRzZXAgY29sc2VwIGNvbXBhdGliaWxpdHkgY29tcHV0ZSBjb25jYXQgY29weWNvbW1pdCBjb3B5dHlwZWNoZWNrICIgKwogICAgICAgICJkZWZpbmUgZGVzY3JpYmUgIiArCiAgICAgICAgImVjaG8gZWRpdGZpbGUgZW1iZWRkZWQgZXNjYXBlIGV4ZWMgZXhlY3V0ZSAiICsKICAgICAgICAiZmVlZGJhY2sgZmxhZ2dlciBmbHVzaCAiICsKICAgICAgICAiaGVhZGluZyBoZWFkc2VwICIgKwogICAgICAgICJpbnN0YW5jZSAiICsKICAgICAgICAibGluZXNpemUgbG5vIGxvYm9mZnNldCBsb2dzb3VyY2UgbG9uZyBsb25nY2h1bmtzaXplICIgKwogICAgICAgICJtYXJrdXAgIiArCiAgICAgICAgIm5hdGl2ZSBuZXdwYWdlIG51bWZvcm1hdCBudW13aWR0aCAiICsKICAgICAgICAicGFnZXNpemUgcGF1c2UgcG5vICIgKwogICAgICAgICJyZWNzZXAgcmVjc2VwY2hhciByZWxlYXNlIHJlcGZvb3RlciByZXBoZWFkZXIgIiArCiAgICAgICAgInNlcnZlcm91dHB1dCBzaGlmdGlub3V0IHNob3cgc2hvd21vZGUgc2l6ZSBzcG9vbCBzcWxibGFua2xpbmVzIHNxbGNhc2Ugc3FsY29kZSBzcWxjb250aW51ZSBzcWxudW1iZXIgIiArCiAgICAgICAgInNxbHBsdXNjb21wYXRpYmlsaXR5IHNxbHByZWZpeCBzcWxwcm9tcHQgc3FsdGVybWluYXRvciBzdWZmaXggIiArCiAgICAgICAgInRhYiB0ZXJtIHRlcm1vdXQgdGltZSB0aW1pbmcgdHJpbW91dCB0cmltc3Bvb2wgdHRpdGxlICIgKwogICAgICAgICJ1bmRlcmxpbmUgIiArCiAgICAgICAgInZlcmlmeSB2ZXJzaW9uICIgKwogICAgICAgICJ3cmFwIjsKCiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGxzcWwiLCB7CiAgICBuYW1lOiAicGxzcWwiLAogICAga2V5d29yZHM6IGtleXdvcmRzKGNLZXl3b3JkcyksCiAgICBmdW5jdGlvbnM6IGtleXdvcmRzKGNGdW5jdGlvbnMpLAogICAgdHlwZXM6IGtleXdvcmRzKGNUeXBlcyksCiAgICBzcWxwbHVzOiBrZXl3b3JkcyhjU3FscGx1cykKICB9KTsKfSgpKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/properties/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/properties/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFByb3BlcnRpZXMgZmlsZXMgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InByb3BlcnRpZXMuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFByb3BlcnRpZXMgZmlsZXMgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgojIFRoaXMgaXMgYSBwcm9wZXJ0aWVzIGZpbGUKYS5rZXkgPSBBIHZhbHVlCmFub3RoZXIua2V5ID0gaHR0cDovL2V4YW1wbGUuY29tCiEgRXhjbGFtYXRpb24gbWFyayBhcyBjb21tZW50CmJ1dC5ub3Q9V2l0aGluICEgQSB2YWx1ZSAjIGluZGVlZAogICAjIFNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZQogICBzcGFjZXMuYmVmb3JlLmtleT12YWx1ZQpiYWNrc2xhc2g9VXNlZCBmb3IgbXVsdGlcCiAgICAgICAgICBsaW5lIGVudHJpZXMsXAogICAgICAgICAgdGhhdCdzIGNvbnZlbmllbnQuCiMgVW5pY29kZSBzZXF1ZW5jZXMKdW5pY29kZS5rZXk9VGhpcyBpcyBcdTAwMjAgVW5pY29kZQpuby5tdWx0aWxpbmU9aGVyZQojIENvbG9ucwpjb2xvbnMgOiBjYW4gYmUgdXNlZCB0b28KIyBTcGFjZXMKc3BhY2VzXCBpblwga2V5cz1Ob3QgdmVyeSBjb21tb24uLi4KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1wcm9wZXJ0aWVzPC9jb2RlPiwKICAgIDxjb2RlPnRleHQveC1pbmk8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/properties/properties.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwcm9wZXJ0aWVzIiwgZnVuY3Rpb24oKSB7CiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBzb2wgPSBzdHJlYW0uc29sKCkgfHwgc3RhdGUuYWZ0ZXJTZWN0aW9uOwogICAgICB2YXIgZW9sID0gc3RyZWFtLmVvbCgpOwoKICAgICAgc3RhdGUuYWZ0ZXJTZWN0aW9uID0gZmFsc2U7CgogICAgICBpZiAoc29sKSB7CiAgICAgICAgaWYgKHN0YXRlLm5leHRNdWx0aWxpbmUpIHsKICAgICAgICAgIHN0YXRlLmluTXVsdGlsaW5lID0gdHJ1ZTsKICAgICAgICAgIHN0YXRlLm5leHRNdWx0aWxpbmUgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUucG9zaXRpb24gPSAiZGVmIjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChlb2wgJiYgISBzdGF0ZS5uZXh0TXVsdGlsaW5lKSB7CiAgICAgICAgc3RhdGUuaW5NdWx0aWxpbmUgPSBmYWxzZTsKICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9ICJkZWYiOwogICAgICB9CgogICAgICBpZiAoc29sKSB7CiAgICAgICAgd2hpbGUoc3RyZWFtLmVhdFNwYWNlKCkpOwogICAgICB9CgogICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwoKICAgICAgaWYgKHNvbCAmJiAoY2ggPT09ICIjIiB8fCBjaCA9PT0gIiEiIHx8IGNoID09PSAiOyIpKSB7CiAgICAgICAgc3RhdGUucG9zaXRpb24gPSAiY29tbWVudCI7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0gZWxzZSBpZiAoc29sICYmIGNoID09PSAiWyIpIHsKICAgICAgICBzdGF0ZS5hZnRlclNlY3Rpb24gPSB0cnVlOwogICAgICAgIHN0cmVhbS5za2lwVG8oIl0iKTsgc3RyZWFtLmVhdCgiXSIpOwogICAgICAgIHJldHVybiAiaGVhZGVyIjsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gIj0iIHx8IGNoID09PSAiOiIpIHsKICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9ICJxdW90ZSI7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICJcXCIgJiYgc3RhdGUucG9zaXRpb24gPT09ICJxdW90ZSIpIHsKICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSAhPT0gInUiKSB7ICAgIC8vIHUgPSBVbmljb2RlIHNlcXVlbmNlIFx1MTIzNAogICAgICAgICAgLy8gTXVsdGlsaW5lIHZhbHVlCiAgICAgICAgICBzdGF0ZS5uZXh0TXVsdGlsaW5lID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBzdGF0ZS5wb3NpdGlvbjsKICAgIH0sCgogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgcG9zaXRpb24gOiAiZGVmIiwgICAgICAgLy8gQ3VycmVudCBwb3NpdGlvbiwgImRlZiIsICJxdW90ZSIgb3IgImNvbW1lbnQiCiAgICAgICAgbmV4dE11bHRpbGluZSA6IGZhbHNlLCAgLy8gSXMgdGhlIG5leHQgbGluZSBtdWx0aWxpbmUgdmFsdWUKICAgICAgICBpbk11bHRpbGluZSA6IGZhbHNlLCAgICAvLyBJcyB0aGUgY3VycmVudCBsaW5lIGEgbXVsdGlsaW5lIHZhbHVlCiAgICAgICAgYWZ0ZXJTZWN0aW9uIDogZmFsc2UgICAgLy8gRGlkIHdlIGp1c3Qgb3BlbiBhIHNlY3Rpb24KICAgICAgfTsKICAgIH0KCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1wcm9wZXJ0aWVzIiwgInByb3BlcnRpZXMiKTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtaW5pIiwgInByb3BlcnRpZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFB5dGhvbiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icHl0aG9uLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQeXRob24gbW9kZTwvaDE+CiAgICAKICAgIDxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBMaXRlcmFscwoxMjM0CjAuMGUxMDEKLjEyMwowYjAxMDEwMDExMTAwCjBvMDEyMzQ1NjcKMHgwOTg3NjU0MzIxYWJjZGVmCjcKMjE0NzQ4MzY0NwozTAo3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNkwKMHgxMDAwMDAwMDBMCjc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2CjB4ZGVhZGJlZWYKMy4xNGoKMTAuagoxMGoKLjAwMWoKMWUxMDBqCjMuMTRlLTEwagoKCiMgU3RyaW5nIExpdGVyYWxzCidGb3JcJycKIkdvZFwiIgoiIiJzbyBsb3ZlZAp0aGUgd29ybGQiIiIKJycndGhhdCBoZSBnYXZlCmhpcyBvbmx5IGJlZ290dGVuXCcgJycnCid0aGF0IHdob3NvZXZlciBiZWxpZXZldGggXAppbiBoaW0nCicnCgojIElkZW50aWZpZXJzCl9fYV9fCmEuYgphLmIuYwoKIyBPcGVyYXRvcnMKKyAtICogLyAlICYgfCBeIH4gPCA+Cj09ICE9IDw9ID49IDw+IDw8ID4+IC8vICoqCmFuZCBvciBub3QgaW4gaXMKCiMgRGVsaW1pdGVycwooKSBbXSB7fSAsIDogYCA9IDsgQCAuICAjIE5vdGUgdGhhdCBAIGFuZCAuIHJlcXVpcmUgdGhlIHByb3BlciBjb250ZXh0LgorPSAtPSAqPSAvPSAlPSAmPSB8PSBePQovLz0gPj49IDw8PSAqKj0KCiMgS2V5d29yZHMKYXMgYXNzZXJ0IGJyZWFrIGNsYXNzIGNvbnRpbnVlIGRlZiBkZWwgZWxpZiBlbHNlIGV4Y2VwdApmaW5hbGx5IGZvciBmcm9tIGdsb2JhbCBpZiBpbXBvcnQgbGFtYmRhIHBhc3MgcmFpc2UKcmV0dXJuIHRyeSB3aGlsZSB3aXRoIHlpZWxkCgojIFB5dGhvbiAyIEtleXdvcmRzIChvdGhlcndpc2UgSWRlbnRpZmllcnMpCmV4ZWMgcHJpbnQKCiMgUHl0aG9uIDMgS2V5d29yZHMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKbm9ubG9jYWwKCiMgVHlwZXMKYm9vbCBjbGFzc21ldGhvZCBjb21wbGV4IGRpY3QgZW51bWVyYXRlIGZsb2F0IGZyb3plbnNldCBpbnQgbGlzdCBvYmplY3QKcHJvcGVydHkgcmV2ZXJzZWQgc2V0IHNsaWNlIHN0YXRpY21ldGhvZCBzdHIgc3VwZXIgdHVwbGUgdHlwZQoKIyBQeXRob24gMiBUeXBlcyAob3RoZXJ3aXNlIElkZW50aWZpZXJzKQpiYXNlc3RyaW5nIGJ1ZmZlciBmaWxlIGxvbmcgdW5pY29kZSB4cmFuZ2UKCiMgUHl0aG9uIDMgVHlwZXMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKYnl0ZWFycmF5IGJ5dGVzIGZpbHRlciBtYXAgbWVtb3J5dmlldyBvcGVuIHJhbmdlIHppcAoKIyBTb21lIEV4YW1wbGUgY29kZQppbXBvcnQgb3MKZnJvbSBwYWNrYWdlIGltcG9ydCBQYXJlbnRDbGFzcwoKQG5vbnNlbnNlRGVjb3JhdG9yCmRlZiBkb2VzTm90aGluZygpOgogICAgcGFzcwoKY2xhc3MgRXhhbXBsZUNsYXNzKFBhcmVudENsYXNzKToKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBleGFtcGxlKGlucHV0U3RyKToKICAgICAgICBhID0gbGlzdChpbnB1dFN0cikKICAgICAgICBhLnJldmVyc2UoKQogICAgICAgIHJldHVybiAnJy5qb2luKGEpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1peGluID0gJ0hlbGxvJyk6CiAgICAgICAgc2VsZi5taXhpbiA9IG1peGluCgo8L3RleHRhcmVhPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiB7bmFtZTogInB5dGhvbiIsCiAgICAgICAgICAgICAgIHZlcnNpb246IDIsCiAgICAgICAgICAgICAgIHNpbmdsZUxpbmVTdHJpbmdFcnJvcnM6IGZhbHNlfSwKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPGgyPkNvbmZpZ3VyYXRpb24gT3B0aW9uczo8L2gyPgogICAgPHVsPgogICAgICA8bGk+dmVyc2lvbiAtIDIvMyAtIFRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byByZWNvZ25pemUuICBEZWZhdWx0IGlzIDIuPC9saT4KICAgICAgPGxpPnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMgLSB0cnVlL2ZhbHNlIC0gSWYgeW91IGhhdmUgYSBzaW5nbGUtbGluZSBzdHJpbmcgdGhhdCBpcyBub3QgdGVybWluYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCB0aGlzIHdpbGwgc2hvdyBzdWJzZXF1ZW50IGxpbmVzIGFzIGVycm9ycyBpZiB0cnVlLCBvdGhlcndpc2UgaXQgd2lsbCBjb25zaWRlciB0aGUgbmV3bGluZSBhcyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuIERlZmF1bHQgaXMgZmFsc2UuPC9saT4KICAgIDwvdWw+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1weXRob248L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/LICENSE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/python.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJweXRob24iLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7CiAgICB2YXIgRVJST1JDTEFTUyA9ICdlcnJvcic7CiAgICAKICAgIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHsKICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXigoIiArIHdvcmRzLmpvaW4oIil8KCIpICsgIikpXFxiIik7CiAgICB9CiAgICAKICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeW1xcK1xcLVxcKi8lJnxcXF5+PD4hXSIpOwogICAgdmFyIHNpbmdsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCdeW1xcKFxcKVxcW1xcXVxce1xcfUAsOmA9O1xcLl0nKTsKICAgIHZhciBkb3VibGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeKCg9PSl8KCE9KXwoPD0pfCg+PSl8KDw+KXwoPDwpfCg+Pil8KC8vKXwoXFwqXFwqKSkiKTsKICAgIHZhciBkb3VibGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgiXigoXFwrPSl8KFxcLT0pfChcXCo9KXwoJT0pfCgvPSl8KCY9KXwoXFx8PSl8KFxcXj0pKSIpOwogICAgdmFyIHRyaXBsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCJeKCgvLz0pfCg+Pj0pfCg8PD0pfChcXCpcXCo9KSkiKTsKICAgIHZhciBpZGVudGlmaWVycyA9IG5ldyBSZWdFeHAoIl5bX0EtWmEtel1bX0EtWmEtejAtOV0qIik7CgogICAgdmFyIHdvcmRPcGVyYXRvcnMgPSB3b3JkUmVnZXhwKFsnYW5kJywgJ29yJywgJ25vdCcsICdpcycsICdpbiddKTsKICAgIHZhciBjb21tb25rZXl3b3JkcyA9IFsnYXMnLCAnYXNzZXJ0JywgJ2JyZWFrJywgJ2NsYXNzJywgJ2NvbnRpbnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmJywgJ2RlbCcsICdlbGlmJywgJ2Vsc2UnLCAnZXhjZXB0JywgJ2ZpbmFsbHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICdmb3InLCAnZnJvbScsICdnbG9iYWwnLCAnaWYnLCAnaW1wb3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFtYmRhJywgJ3Bhc3MnLCAncmFpc2UnLCAncmV0dXJuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ5JywgJ3doaWxlJywgJ3dpdGgnLCAneWllbGQnXTsKICAgIHZhciBjb21tb25CdWlsdGlucyA9IFsnYWJzJywgJ2FsbCcsICdhbnknLCAnYmluJywgJ2Jvb2wnLCAnYnl0ZWFycmF5JywgJ2NhbGxhYmxlJywgJ2NocicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzbWV0aG9kJywgJ2NvbXBpbGUnLCAnY29tcGxleCcsICdkZWxhdHRyJywgJ2RpY3QnLCAnZGlyJywgJ2Rpdm1vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VudW1lcmF0ZScsICdldmFsJywgJ2ZpbHRlcicsICdmbG9hdCcsICdmb3JtYXQnLCAnZnJvemVuc2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0YXR0cicsICdnbG9iYWxzJywgJ2hhc2F0dHInLCAnaGFzaCcsICdoZWxwJywgJ2hleCcsICdpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0JywgJ2ludCcsICdpc2luc3RhbmNlJywgJ2lzc3ViY2xhc3MnLCAnaXRlcicsICdsZW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0JywgJ2xvY2FscycsICdtYXAnLCAnbWF4JywgJ21lbW9yeXZpZXcnLCAnbWluJywgJ25leHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QnLCAnb2N0JywgJ29wZW4nLCAnb3JkJywgJ3BvdycsICdwcm9wZXJ0eScsICdyYW5nZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcHInLCAncmV2ZXJzZWQnLCAncm91bmQnLCAnc2V0JywgJ3NldGF0dHInLCAnc2xpY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0ZWQnLCAnc3RhdGljbWV0aG9kJywgJ3N0cicsICdzdW0nLCAnc3VwZXInLCAndHVwbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJywgJ3ZhcnMnLCAnemlwJywgJ19faW1wb3J0X18nLCAnTm90SW1wbGVtZW50ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdFbGxpcHNpcycsICdfX2RlYnVnX18nXTsKICAgIHZhciBweTIgPSB7J2J1aWx0aW5zJzogWydhcHBseScsICdiYXNlc3RyaW5nJywgJ2J1ZmZlcicsICdjbXAnLCAnY29lcmNlJywgJ2V4ZWNmaWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlJywgJ2ludGVybicsICdsb25nJywgJ3Jhd19pbnB1dCcsICdyZWR1Y2UnLCAncmVsb2FkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmljaHInLCAndW5pY29kZScsICd4cmFuZ2UnLCAnRmFsc2UnLCAnVHJ1ZScsICdOb25lJ10sCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6IFsnZXhlYycsICdwcmludCddfTsKICAgIHZhciBweTMgPSB7J2J1aWx0aW5zJzogWydhc2NpaScsICdieXRlcycsICdleGVjJywgJ3ByaW50J10sCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6IFsnbm9ubG9jYWwnLCAnRmFsc2UnLCAnVHJ1ZScsICdOb25lJ119OwoKICAgIGlmICghIXBhcnNlckNvbmYudmVyc2lvbiAmJiBwYXJzZUludChwYXJzZXJDb25mLnZlcnNpb24sIDEwKSA9PT0gMykgewogICAgICAgIGNvbW1vbmtleXdvcmRzID0gY29tbW9ua2V5d29yZHMuY29uY2F0KHB5My5rZXl3b3Jkcyk7CiAgICAgICAgY29tbW9uQnVpbHRpbnMgPSBjb21tb25CdWlsdGlucy5jb25jYXQocHkzLmJ1aWx0aW5zKTsKICAgICAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKChbcmJdfChicikpPygnezN9fFwiezN9fFsnXCJdKSkiLCAiaSIpOwogICAgfSBlbHNlIHsKICAgICAgICBjb21tb25rZXl3b3JkcyA9IGNvbW1vbmtleXdvcmRzLmNvbmNhdChweTIua2V5d29yZHMpOwogICAgICAgIGNvbW1vbkJ1aWx0aW5zID0gY29tbW9uQnVpbHRpbnMuY29uY2F0KHB5Mi5idWlsdGlucyk7CiAgICAgICAgdmFyIHN0cmluZ1ByZWZpeGVzID0gbmV3IFJlZ0V4cCgiXigoW3J1Yl18KHVyKXwoYnIpKT8oJ3szfXxcInszfXxbJ1wiXSkpIiwgImkiKTsKICAgIH0KICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoY29tbW9ua2V5d29yZHMpOwogICAgdmFyIGJ1aWx0aW5zID0gd29yZFJlZ2V4cChjb21tb25CdWlsdGlucyk7CgogICAgdmFyIGluZGVudEluZm8gPSBudWxsOwoKICAgIC8vIHRva2VuaXplcnMKICAgIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMKICAgICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgIHZhciBzY29wZU9mZnNldCA9IHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgICAgIGlmIChsaW5lT2Zmc2V0ID4gc2NvcGVPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRJbmZvID0gJ2luZGVudCc7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVPZmZzZXQgPCBzY29wZU9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIGluZGVudEluZm8gPSAnZGVkZW50JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHNjb3BlT2Zmc2V0ID4gMCkgewogICAgICAgICAgICAgICAgICAgIGRlZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIENvbW1lbnRzCiAgICAgICAgaWYgKGNoID09PSAnIycpIHsKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgTnVtYmVyIExpdGVyYWxzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlswLTlcLl0vLCBmYWxzZSkpIHsKICAgICAgICAgICAgdmFyIGZsb2F0TGl0ZXJhbCA9IGZhbHNlOwogICAgICAgICAgICAvLyBGbG9hdHMKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxkKlwuXGQrKGVbXCtcLV0/XGQrKT8vaSkpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXGQrXC5cZCovKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cLlxkKy8pKSB7IGZsb2F0TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKGZsb2F0TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgLy8gRmxvYXQgbGl0ZXJhbHMgbWF5IGJlICJpbWFnaW5hcnkiCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpOwogICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEludGVnZXJzCiAgICAgICAgICAgIHZhciBpbnRMaXRlcmFsID0gZmFsc2U7CiAgICAgICAgICAgIC8vIEhleAogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eMHhbMC05YS1mXSsvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgLy8gQmluYXJ5CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wYlswMV0rL2kpKSB7IGludExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIC8vIE9jdGFsCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wb1swLTddKy9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICAvLyBEZWNpbWFsCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bMS05XVxkKihlW1wrXC1dP1xkKyk/LykpIHsKICAgICAgICAgICAgICAgIC8vIERlY2ltYWwgbGl0ZXJhbHMgbWF5IGJlICJpbWFnaW5hcnkiCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpOwogICAgICAgICAgICAgICAgLy8gVE9ETyAtIENhbiB5b3UgaGF2ZSBpbWFnaW5hcnkgbG9uZ3M/CiAgICAgICAgICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBaZXJvIGJ5IGl0c2VsZiB3aXRoIG5vIG90aGVyIHBpZWNlIG9mIG51bWJlci4KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjAoPyFbXGR4XSkvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKGludExpdGVyYWwpIHsKICAgICAgICAgICAgICAgIC8vIEludGVnZXIgbGl0ZXJhbHMgbWF5IGJlICJsb25nIgogICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvTC9pKTsKICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgU3RyaW5ncwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc3RyaW5nUHJlZml4ZXMpKSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmdGYWN0b3J5KHN0cmVhbS5jdXJyZW50KCkpOwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBvcGVyYXRvcnMgYW5kIERlbGltaXRlcnMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRyaXBsZURlbGltaXRlcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChkb3VibGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaChzaW5nbGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaCh3b3JkT3BlcmF0b3JzKSkgewogICAgICAgICAgICByZXR1cm4gJ29wZXJhdG9yJzsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzaW5nbGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3JkcykpIHsKICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChidWlsdGlucykpIHsKICAgICAgICAgICAgcmV0dXJuICdidWlsdGluJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChpZGVudGlmaWVycykpIHsKICAgICAgICAgICAgcmV0dXJuICd2YXJpYWJsZSc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXMKICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB0b2tlblN0cmluZ0ZhY3RvcnkoZGVsaW1pdGVyKSB7CiAgICAgICAgd2hpbGUgKCdydWInLmluZGV4T2YoZGVsaW1pdGVyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7CiAgICAgICAgICAgIGRlbGltaXRlciA9IGRlbGltaXRlci5zdWJzdHIoMSk7CiAgICAgICAgfQogICAgICAgIHZhciBzaW5nbGVsaW5lID0gZGVsaW1pdGVyLmxlbmd0aCA9PSAxOwogICAgICAgIHZhciBPVVRDTEFTUyA9ICdzdHJpbmcnOwogICAgICAgIAogICAgICAgIHJldHVybiBmdW5jdGlvbiB0b2tlblN0cmluZyhzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJyJcXF0vKTsKICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0KCdcXCcpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlbGluZSAmJiBzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKGRlbGltaXRlcikpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL1snIl0vKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2luZ2xlbGluZSkgewogICAgICAgICAgICAgICAgaWYgKHBhcnNlckNvbmYuc2luZ2xlTGluZVN0cmluZ0Vycm9ycykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgfTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gaW5kZW50KHN0cmVhbSwgc3RhdGUsIHR5cGUpIHsKICAgICAgICB0eXBlID0gdHlwZSB8fCAncHknOwogICAgICAgIHZhciBpbmRlbnRVbml0ID0gMDsKICAgICAgICBpZiAodHlwZSA9PT0gJ3B5JykgewogICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgIT09ICdweScpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1tpXS50eXBlID09PSAncHknKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50VW5pdCA9IHN0YXRlLnNjb3Blc1tpXS5vZmZzZXQgKyBjb25mLmluZGVudFVuaXQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbmRlbnRVbml0ID0gc3RyZWFtLmNvbHVtbigpICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHN0YXRlLnNjb3Blcy51bnNoaWZ0KHsKICAgICAgICAgICAgb2Zmc2V0OiBpbmRlbnRVbml0LAogICAgICAgICAgICB0eXBlOiB0eXBlCiAgICAgICAgfSk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGRlZGVudChzdHJlYW0sIHN0YXRlLCB0eXBlKSB7CiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ3B5JzsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzLmxlbmd0aCA9PSAxKSByZXR1cm47CiAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1swXS50eXBlID09PSAncHknKSB7CiAgICAgICAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHZhciBfaW5kZW50X2luZGV4ID0gLTE7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoX2luZGVudCA9PT0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIF9pbmRlbnRfaW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfaW5kZW50X2luZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgIT09IF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlID09PSAncHknKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgIT0gdHlwZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaW5kZW50SW5mbyA9IG51bGw7CiAgICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgdmFyIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwoKICAgICAgICAvLyBIYW5kbGUgJy4nIGNvbm5lY3RlZCBpZGVudGlmaWVycwogICAgICAgIGlmIChjdXJyZW50ID09PSAnLicpIHsKICAgICAgICAgICAgc3R5bGUgPSBzdHJlYW0ubWF0Y2goaWRlbnRpZmllcnMsIGZhbHNlKSA/IG51bGwgOiBFUlJPUkNMQVNTOwogICAgICAgICAgICBpZiAoc3R5bGUgPT09IG51bGwgJiYgc3RhdGUubGFzdFRva2VuID09PSAnbWV0YScpIHsKICAgICAgICAgICAgICAgIC8vIEFwcGx5ICdtZXRhJyBzdHlsZSB0byAnLicgY29ubmVjdGVkIGlkZW50aWZpZXJzIHdoZW4KICAgICAgICAgICAgICAgIC8vIGFwcHJvcHJpYXRlLgogICAgICAgICAgICAgICAgc3R5bGUgPSAnbWV0YSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgZGVjb3JhdG9ycwogICAgICAgIGlmIChjdXJyZW50ID09PSAnQCcpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChpZGVudGlmaWVycywgZmFsc2UpID8gJ21ldGEnIDogRVJST1JDTEFTUzsKICAgICAgICB9CgogICAgICAgIGlmICgoc3R5bGUgPT09ICd2YXJpYWJsZScgfHwgc3R5bGUgPT09ICdidWlsdGluJykKICAgICAgICAgICAgJiYgc3RhdGUubGFzdFRva2VuID09PSAnbWV0YScpIHsKICAgICAgICAgICAgc3R5bGUgPSAnbWV0YSc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBzY29wZSBjaGFuZ2VzLgogICAgICAgIGlmIChjdXJyZW50ID09PSAncGFzcycgfHwgY3VycmVudCA9PT0gJ3JldHVybicpIHsKICAgICAgICAgICAgc3RhdGUuZGVkZW50ICs9IDE7CiAgICAgICAgfQogICAgICAgIGlmIChjdXJyZW50ID09PSAnbGFtYmRhJykgc3RhdGUubGFtYmRhID0gdHJ1ZTsKICAgICAgICBpZiAoKGN1cnJlbnQgPT09ICc6JyAmJiAhc3RhdGUubGFtYmRhICYmIHN0YXRlLnNjb3Blc1swXS50eXBlID09ICdweScpCiAgICAgICAgICAgIHx8IGluZGVudEluZm8gPT09ICdpbmRlbnQnKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGltaXRlcl9pbmRleCA9ICdbKHsnLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaW5kZW50KHN0cmVhbSwgc3RhdGUsICddKX0nLnNsaWNlKGRlbGltaXRlcl9pbmRleCwgZGVsaW1pdGVyX2luZGV4KzEpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGluZGVudEluZm8gPT09ICdkZWRlbnQnKSB7CiAgICAgICAgICAgIGlmIChkZWRlbnQoc3RyZWFtLCBzdGF0ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlbGltaXRlcl9pbmRleCA9ICddKX0nLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGRlZGVudChzdHJlYW0sIHN0YXRlLCBjdXJyZW50KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmRlZGVudCA+IDAgJiYgc3RyZWFtLmVvbCgpICYmIHN0YXRlLnNjb3Blc1swXS50eXBlID09ICdweScpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPiAxKSBzdGF0ZS5zY29wZXMuc2hpZnQoKTsKICAgICAgICAgICAgc3RhdGUuZGVkZW50IC09IDE7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBzdHlsZTsKICAgIH0KCiAgICB2YXIgZXh0ZXJuYWwgPSB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgc2NvcGVzOiBbe29mZnNldDpiYXNlY29sdW1uIHx8IDAsIHR5cGU6J3B5J31dLAogICAgICAgICAgICAgIGxhc3RUb2tlbjogbnVsbCwKICAgICAgICAgICAgICBsYW1iZGE6IGZhbHNlLAogICAgICAgICAgICAgIGRlZGVudDogMAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW4gPSBzdHlsZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLmxhbWJkYSkgewogICAgICAgICAgICAgICAgc3RhdGUubGFtYmRhID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgfQogICAgICAgIAogICAgfTsKICAgIHJldHVybiBleHRlcm5hbDsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1weXRob24iLCAicHl0aG9uIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFIgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InIuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7IGJvcmRlci10b3A6IDFweCBzb2xpZCBzaWx2ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBzaWx2ZXI7IH0KICAgICAgLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlbWkgeyBjb2xvcjogYmx1ZTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAgICAgLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRvbGxhciB7IGNvbG9yOiBvcmFuZ2U7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgICAgIC5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1hcnJvdyB7IGNvbG9yOiBicm93bjsgfQogICAgICAuY20tcy1kZWZhdWx0IHNwYW4uY20tYXJnLWlzIHsgY29sb3I6IGJyb3duOyB9CiAgICA8L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2RlIGZyb20gaHR0cDovL3d3dy5tYXlpbi5vcmcvYWpheXNoYWgvS0IvUi8KCiMgRklSU1QgTEVBUk4gQUJPVVQgTElTVFMgLS0KWCA9IGxpc3QoaGVpZ2h0PTUuNCwgd2VpZ2h0PTU0KQpwcmludCgiVXNlIGRlZmF1bHQgcHJpbnRpbmcgLS0iKQpwcmludChYKQpwcmludCgiQWNjZXNzaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgLS0iKQpjYXQoIllvdXIgaGVpZ2h0IGlzICIsIFgkaGVpZ2h0LCAiIGFuZCB5b3VyIHdlaWdodCBpcyAiLCBYJHdlaWdodCwgIlxuIikKCiMgRlVOQ1RJT05TIC0tCnNxdWFyZSA8LSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuKHgqeCkKfQpjYXQoIlRoZSBzcXVhcmUgb2YgMyBpcyAiLCBzcXVhcmUoMyksICJcbiIpCgogICAgICAgICAgICAgICAgICMgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYXJnIGlzIHNldCB0byA1LgpjdWJlIDwtIGZ1bmN0aW9uKHg9NSkgewogIHJldHVybih4KngqeCk7Cn0KY2F0KCJDYWxsaW5nIGN1YmUgd2l0aCAyIDogIiwgY3ViZSgyKSwgIlxuIikgICAgIyB3aWxsIGdpdmUgMl4zCmNhdCgiQ2FsbGluZyBjdWJlICAgICAgICA6ICIsIGN1YmUoKSwgIlxuIikgICAgICMgd2lsbCBkZWZhdWx0IHRvIDVeMy4KCiMgTEVBUk4gQUJPVVQgRlVOQ1RJT05TIFRIQVQgUkVUVVJOIE1VTFRJUExFIE9CSkVDVFMgLS0KcG93ZXJzIDwtIGZ1bmN0aW9uKHgpIHsKICBwYXJjZWwgPSBsaXN0KHgyPXgqeCwgeDM9eCp4KngsIHg0PXgqeCp4KngpOwogIHJldHVybihwYXJjZWwpOwp9CgpYID0gcG93ZXJzKDMpOwpwcmludCgiU2hvd2luZyBwb3dlcnMgb2YgMyAtLSIpOyBwcmludChYKTsKCiMgV1JJVElORyBUSElTIENPTVBBQ1RMWSAoNCBsaW5lcyBpbnN0ZWFkIG9mIDcpCgpwb3dlcmZ1bCA8LSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuKGxpc3QoeDI9eCp4LCB4Mz14KngqeCwgeDQ9eCp4KngqeCkpOwp9CnByaW50KCJTaG93aW5nIHBvd2VycyBvZiAzIC0tIik7IHByaW50KHBvd2VyZnVsKDMpKTsKCiMgSW4gUiwgdGhlIGxhc3QgZXhwcmVzc2lvbiBpbiBhIGZ1bmN0aW9uIGlzLCBieSBkZWZhdWx0LCB3aGF0IGlzCiMgcmV0dXJuZWQuIFNvIHlvdSBjb3VsZCBlcXVhbGx5IGp1c3Qgc2F5Ogpwb3dlcmZ1bCA8LSBmdW5jdGlvbih4KSB7bGlzdCh4Mj14KngsIHgzPXgqeCp4LCB4ND14KngqeCp4KX0KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1yc3JjPC9jb2RlPi48L3A+CgogICAgPHA+RGV2ZWxvcG1lbnQgb2YgdGhlIENvZGVNaXJyb3IgUiBtb2RlIHdhcyBraW5kbHkgc3BvbnNvcmVkCiAgICBieSA8YSBocmVmPSJodHRwOi8vdWJhbG8uY29tLyI+VWJhbG88L2E+LCB3aG8gaG9sZAogICAgdGhlIDxhIGhyZWY9IkxJQ0VOU0UiPmxpY2Vuc2U8L2E+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBVYmFsbywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVWJhbG8sIEluYyBub3IgdGhlIG5hbWVzIG9mIGl0cwogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORApBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFVCQUxPLCBJTkMgQkUgTElBQkxFIEZPUiBBTlkKRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/r.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJyIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgZnVuY3Rpb24gd29yZE9iaihzdHIpIHsKICAgIHZhciB3b3JkcyA9IHN0ci5zcGxpdCgiICIpLCByZXMgPSB7fTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIHJlc1t3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIHJlczsKICB9CiAgdmFyIGF0b21zID0gd29yZE9iaigiTlVMTCBOQSBJbmYgTmFOIE5BX2ludGVnZXJfIE5BX3JlYWxfIE5BX2NvbXBsZXhfIE5BX2NoYXJhY3Rlcl8iKTsKICB2YXIgYnVpbHRpbnMgPSB3b3JkT2JqKCJsaXN0IHF1b3RlIGJxdW90ZSBldmFsIHJldHVybiBjYWxsIHBhcnNlIGRlcGFyc2UiKTsKICB2YXIga2V5d29yZHMgPSB3b3JkT2JqKCJpZiBlbHNlIHJlcGVhdCB3aGlsZSBmdW5jdGlvbiBmb3IgaW4gbmV4dCBicmVhayIpOwogIHZhciBibG9ja2tleXdvcmRzID0gd29yZE9iaigiaWYgZWxzZSByZXBlYXQgd2hpbGUgZnVuY3Rpb24gZm9yIik7CiAgdmFyIG9wQ2hhcnMgPSAvWytcLSpcL148Pj0hJnx+JDpdLzsKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIGN1clB1bmMgPSBudWxsOwogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiIyIpIHsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFtLmVhdCgieCIpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xkYS1mXS9pKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiLiIgJiYgc3RyZWFtLmVhdCgvXGQvKSkgewogICAgICBzdHJlYW0ubWF0Y2goL1xkKig/OmVbK1wtXT9cZCspPy8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9IGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9cZCooPzpcLlxkKyk/KD86ZVsrXC1dXGQrKT9MPy8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9IGVsc2UgaWYgKGNoID09ICInIiB8fCBjaCA9PSAnIicpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIi4iICYmIHN0cmVhbS5tYXRjaCgvLlsuXGRdKy8pKSB7CiAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9IGVsc2UgaWYgKC9bXHdcLl0vLnRlc3QoY2gpICYmIGNoICE9ICJfIikgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkgcmV0dXJuICJhdG9tIjsKICAgICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSB7CiAgICAgICAgaWYgKGJsb2Nra2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIGN1clB1bmMgPSAiYmxvY2siOwogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIH0KICAgICAgaWYgKGJ1aWx0aW5zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSByZXR1cm4gImJ1aWx0aW4iOwogICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiUiKSB7CiAgICAgIGlmIChzdHJlYW0uc2tpcFRvKCIlIikpIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgcmV0dXJuICJhcnJvdyI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI9IiAmJiBzdGF0ZS5jdHguYXJnTGlzdCkgewogICAgICByZXR1cm4gImFyZy1pcyI7CiAgICB9IGVsc2UgaWYgKG9wQ2hhcnMudGVzdChjaCkpIHsKICAgICAgaWYgKGNoID09ICIkIikgcmV0dXJuICJkb2xsYXIiOwogICAgICBzdHJlYW0uZWF0V2hpbGUob3BDaGFycyk7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfSBlbHNlIGlmICgvW1woXCl7fVxbXF07XS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICBpZiAoY2ggPT0gIjsiKSByZXR1cm4gInNlbWkiOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSB7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICBpZiAoY2ggPT0gIngiKSBzdHJlYW0ubWF0Y2goL15bYS1mMC05XXsyfS9pKTsKICAgICAgICBlbHNlIGlmICgoY2ggPT0gInUiIHx8IGNoID09ICJVIikgJiYgc3RyZWFtLmVhdCgieyIpICYmIHN0cmVhbS5za2lwVG8oIn0iKSkgc3RyZWFtLm5leHQoKTsKICAgICAgICBlbHNlIGlmIChjaCA9PSAidSIpIHN0cmVhbS5tYXRjaCgvXlthLWYwLTldezR9L2kpOwogICAgICAgIGVsc2UgaWYgKGNoID09ICJVIikgc3RyZWFtLm1hdGNoKC9eW2EtZjAtOV17OH0vaSk7CiAgICAgICAgZWxzZSBpZiAoL1swLTddLy50ZXN0KGNoKSkgc3RyZWFtLm1hdGNoKC9eWzAtN117MSwyfS8pOwogICAgICAgIHJldHVybiAic3RyaW5nLTIiOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuZXh0OwogICAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICAgIGlmIChuZXh0ID09IHF1b3RlKSB7IHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyBicmVhazsgfQogICAgICAgICAgaWYgKG5leHQgPT0gIlxcIikgeyBzdHJlYW0uYmFja1VwKDEpOyBicmVhazsgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgIH0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBwdXNoKHN0YXRlLCB0eXBlLCBzdHJlYW0pIHsKICAgIHN0YXRlLmN0eCA9IHt0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAgIGluZGVudDogc3RhdGUuaW5kZW50LAogICAgICAgICAgICAgICAgIGFsaWduOiBudWxsLAogICAgICAgICAgICAgICAgIGNvbHVtbjogc3RyZWFtLmNvbHVtbigpLAogICAgICAgICAgICAgICAgIHByZXY6IHN0YXRlLmN0eH07CiAgfQogIGZ1bmN0aW9uIHBvcChzdGF0ZSkgewogICAgc3RhdGUuaW5kZW50ID0gc3RhdGUuY3R4LmluZGVudDsKICAgIHN0YXRlLmN0eCA9IHN0YXRlLmN0eC5wcmV2OwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIGN0eDoge3R5cGU6ICJ0b3AiLAogICAgICAgICAgICAgICAgICAgIGluZGVudDogLWNvbmZpZy5pbmRlbnRVbml0LAogICAgICAgICAgICAgICAgICAgIGFsaWduOiBmYWxzZX0sCiAgICAgICAgICAgICAgaW5kZW50OiAwLAogICAgICAgICAgICAgIGFmdGVySWRlbnQ6IGZhbHNlfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jdHguYWxpZ24gPT0gbnVsbCkgc3RhdGUuY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSAhPSAiY29tbWVudCIgJiYgc3RhdGUuY3R4LmFsaWduID09IG51bGwpIHN0YXRlLmN0eC5hbGlnbiA9IHRydWU7CgogICAgICB2YXIgY3R5cGUgPSBzdGF0ZS5jdHgudHlwZTsKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICJ7IiB8fCBjdXJQdW5jID09ICJ9IikgJiYgY3R5cGUgPT0gImJsb2NrIikgcG9wKHN0YXRlKTsKICAgICAgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoKHN0YXRlLCAifSIsIHN0cmVhbSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSB7CiAgICAgICAgcHVzaChzdGF0ZSwgIikiLCBzdHJlYW0pOwogICAgICAgIGlmIChzdGF0ZS5hZnRlcklkZW50KSBzdGF0ZS5jdHguYXJnTGlzdCA9IHRydWU7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2goc3RhdGUsICJdIiwgc3RyZWFtKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiYmxvY2siKSBwdXNoKHN0YXRlLCAiYmxvY2siLCBzdHJlYW0pOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eXBlKSBwb3Aoc3RhdGUpOwogICAgICBzdGF0ZS5hZnRlcklkZW50ID0gc3R5bGUgPT0gInZhcmlhYmxlIiB8fCBzdHlsZSA9PSAia2V5d29yZCI7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGN0eCA9IHN0YXRlLmN0eCwKICAgICAgICAgIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7CiAgICAgIGlmIChjdHgudHlwZSA9PSAiYmxvY2siKSByZXR1cm4gY3R4LmluZGVudCArIChmaXJzdENoYXIgPT0gInsiID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgICAgZWxzZSBpZiAoY3R4LmFsaWduKSByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ICsgKGNsb3NpbmcgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnNyYyIsICJyIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/changes.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjaGFuZ2VzIiwgZnVuY3Rpb24oY29uZmlnLCBtb2RlQ29uZmlnKSB7CiAgdmFyIGhlYWRlclNlcGVyYXRvciA9IC9eLSskLzsKICB2YXIgaGVhZGVyTGluZSA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAgP1xkezEsMn0gXGR7Mn06XGR7Mn0oOlxkezJ9KT8gW0EtWl17Myw0fSBcZHs0fSAtIC87CiAgdmFyIHNpbXBsZUVtYWlsID0gL15bXHcrLi1dK0BbXHcuLV0rLzsKCiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goaGVhZGVyU2VwZXJhdG9yKSkgeyByZXR1cm4gJ3RhZyc7IH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGhlYWRlckxpbmUpKSB7IHJldHVybiAndGFnJzsgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2ltcGxlRW1haWwpKSB7IHJldHVybiAnc3RyaW5nJzsgfQogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXJwbS1jaGFuZ2VzIiwgImNoYW5nZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJQTSBjaGFuZ2VzIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJjaGFuZ2VzLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSUE0gY2hhbmdlcyBtb2RlPC9oMT4KICAgIAogICAgPGRpdj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBPY3QgMTggMTM6NTg6NDAgVVRDIDIwMTEgLSBtaXN0ZXJ4QGV4YW1wbGUuY29tCgotIFVwZGF0ZSB0byByNjAuMwotIEZpeGVzIGJ1ZyBpbiB0aGUgcmVmbGVjdCBwYWNrYWdlCiAgKiBkaXNhbGxvdyBJbnRlcmZhY2UgbWV0aG9kIG9uIFZhbHVlIG9idGFpbmVkIHZpYSB1bmV4cG9ydGVkIG5hbWUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE9jdCAgNiAwODoxNDoyNCBVVEMgMjAxMSAtIG1pc3RlcnhAZXhhbXBsZS5jb20KCi0gVXBkYXRlIHRvIHI2MC4yCi0gRml4ZXMgbWVtb3J5IGxlYWsgaW4gY2VydGFpbiBtYXAgdHlwZXMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIE9jdCAgNSAxNDozNDoxMCBVVEMgMjAxMSAtIG1pc3RlcnhAZXhhbXBsZS5jb20KCi0gVHdlYWtzIGZvciBnZGIgZGVidWdnaW5nCi0gZ28uc3BlYyBjaGFuZ2VzOgogIC0gbW92ZSAlZ29fYXJjaCBkZWZpbml0aW9uIHRvICVwcmVwIHNlY3Rpb24KICAtIHBhc3MgY29ycmVjdCBsb2NhdGlvbiBvZiBnbyBzcGVjaWZpYyBnZGIgcHJldHR5IHByaW50ZXIgYW5kCiAgICBmdW5jdGlvbnMgdG8gY3BwIGFzIEhPU1RfRVhUUkFfQ0ZMQUdTIG1hY3JvCiAgLSBpbnN0YWxsIGdvIGdkYiBmdW5jdGlvbnMgJiBwcmludGVyCi0gZ2RiLXByaW50ZXIucGF0Y2gKICAtIHBhdGNoIGxpbmtlciAoc3JjL2NtZC9sZC9kd2FyZi5jKSB0byBlbWl0IGNvcnJlY3QgbG9jYXRpb24gb2YgZ28KICAgIGdkYiBmdW5jdGlvbnMgYW5kIHByZXR0eSBwcmludGVyCjwvdGV4dGFyZWE+PC9kaXY+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAiY2hhbmdlcyJ9LAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgdGFiTW9kZTogInNoaWZ0IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1ycG0tY2hhbmdlczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJQTSBzcGVjIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJzcGVjLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3BlYy5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFJQTSBzcGVjIG1vZGU8L2gxPgogICAgCiAgICA8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMKIyBzcGVjIGZpbGUgZm9yIHBhY2thZ2UgbWluaWRsbmEKIwojIENvcHlyaWdodCAoYykgMjAxMSwgU2FzY2hhIFBlaWxpY2tlIDxzYXNjaHBlQGdteC5kZT4KIwojIEFsbCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlIGZpbGUgY29udHJpYnV0ZWQgYnkgdGhpcmQgcGFydGllcwojIHJlbWFpbiB0aGUgcHJvcGVydHkgb2YgdGhlaXIgY29weXJpZ2h0IG93bmVycywgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQKIyB1cG9uLiBUaGUgbGljZW5zZSBmb3IgdGhpcyBmaWxlLCBhbmQgbW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zIHRvIHRoZQojIGZpbGUsIGlzIHRoZSBzYW1lIGxpY2Vuc2UgYXMgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGl0c2VsZiAodW5sZXNzIHRoZQojIGxpY2Vuc2UgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGlzIG5vdCBhbiBPcGVuIFNvdXJjZSBMaWNlbnNlLCBpbiB3aGljaAojIGNhc2UgdGhlIGxpY2Vuc2UgaXMgdGhlIE1JVCBMaWNlbnNlKS4gQW4gIk9wZW4gU291cmNlIExpY2Vuc2UiIGlzIGEKIyBsaWNlbnNlIHRoYXQgY29uZm9ybXMgdG8gdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gKFZlcnNpb24gMS45KQojIHB1Ymxpc2hlZCBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4KCgpOYW1lOiAgICAgICAgICAgbGlidXBucDYKVmVyc2lvbjogICAgICAgIDEuNi4xMwpSZWxlYXNlOiAgICAgICAgMApTdW1tYXJ5OiAgICAgICAgUG9ydGFibGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIFNESwpHcm91cDogICAgICAgICAgU3lzdGVtL0xpYnJhcmllcwpMaWNlbnNlOiAgICAgICAgQlNELTMtQ2xhdXNlClVybDogICAgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3B1cG5wLwpTb3VyY2UwOiAgICAgICAgaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHVwbnAvbGlidXBucC0le3ZlcnNpb259LnRhci5iejIKQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1idWlsZAoKJWRlc2NyaXB0aW9uClRoZSBwb3J0YWJsZSBVbml2ZXJzYWwgUGx1ZyBhbmQgUGxheSAoVVBuUCkgU0RLIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGJ1aWxkaW5nClVQblAtY29tcGxpYW50IGNvbnRyb2wgcG9pbnRzLCBkZXZpY2VzLCBhbmQgYnJpZGdlcyBvbiBzZXZlcmFsIG9wZXJhdGluZwpzeXN0ZW1zLgoKJXBhY2thZ2UgLW4gbGlidXBucC1kZXZlbApTdW1tYXJ5OiAgICAgICAgUG9ydGFibGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIFNESwpHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvTGlicmFyaWVzL0MgYW5kIEMrKwpQcm92aWRlczogICAgICAgcGtnY29uZmlnKGxpYnVwbnApClJlcXVpcmVzOiAgICAgICAle25hbWV9ID0gJXt2ZXJzaW9ufQoKJWRlc2NyaXB0aW9uIC1uIGxpYnVwbnAtZGV2ZWwKVGhlIHBvcnRhYmxlIFVuaXZlcnNhbCBQbHVnIGFuZCBQbGF5IChVUG5QKSBTREsgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYnVpbGRpbmcKVVBuUC1jb21wbGlhbnQgY29udHJvbCBwb2ludHMsIGRldmljZXMsIGFuZCBicmlkZ2VzIG9uIHNldmVyYWwgb3BlcmF0aW5nCnN5c3RlbXMuCgolcHJlcAolc2V0dXAgLW4gbGlidXBucC0le3ZlcnNpb259CgolYnVpbGQKJWNvbmZpZ3VyZSAtLWRpc2FibGUtc3RhdGljCm1ha2UgJXs/X3NtcF9tZmxhZ3N9CgolaW5zdGFsbAolbWFrZWluc3RhbGwKZmluZCAle2J1aWxkcm9vdH0gLXR5cGUgZiAtbmFtZSAnKi5sYScgLWV4ZWMgcm0gLWYge30gJzsnCgolcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZwoKJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZwoKJWZpbGVzCiVkZWZhdHRyKC0scm9vdCxyb290LC0pCiVkb2MgQ2hhbmdlTG9nIE5FV1MgUkVBRE1FIFRPRE8KJXtfbGliZGlyfS9saWJpeG1sLnNvLioKJXtfbGliZGlyfS9saWJ0aHJlYWR1dGlsLnNvLioKJXtfbGliZGlyfS9saWJ1cG5wLnNvLioKCiVmaWxlcyAtbiBsaWJ1cG5wLWRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290LC0pCiV7X2xpYmRpcn0vcGtnY29uZmlnL2xpYnVwbnAucGMKJXtfbGliZGlyfS9saWJpeG1sLnNvCiV7X2xpYmRpcn0vbGlidGhyZWFkdXRpbC5zbwole19saWJkaXJ9L2xpYnVwbnAuc28KJXtfaW5jbHVkZWRpcn0vdXBucC8KCiVjaGFuZ2Vsb2c8L3RleHRhcmVhPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiB7bmFtZTogInNwZWMifSwKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJwbS1zcGVjPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/spec.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByZWFtYmxlIHtjb2xvcjogI2IyNjgxODsgZm9udC13ZWlnaHQ6IGJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbWFjcm8ge2NvbG9yOiAjYjIxOGIyO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlY3Rpb24ge2NvbG9yOiBncmVlbjsgZm9udC13ZWlnaHQ6IGJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc2NyaXB0IHtjb2xvcjogcmVkO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWlzc3VlIHtjb2xvcjogeWVsbG93O30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/spec.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gUXVpY2sgYW5kIGRpcnR5IHNwZWMgZmlsZSBoaWdobGlnaHRpbmcKCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3BlYyIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykgewogIHZhciBhcmNoID0gL14oaTM4NnxpNTg2fGk2ODZ8eDg2XzY0fHBwYzY0fHBwY3xpYTY0fHMzOTB4fHMzOTB8c3BhcmM2NHxzcGFyY3Y5fHNwYXJjfG5vYXJjaHxhbHBoYWV2NnxhbHBoYXxocHBhfG1pcHNlbCkvOwoKICB2YXIgcHJlYW1ibGUgPSAvXihOYW1lfFZlcnNpb258UmVsZWFzZXxMaWNlbnNlfFN1bW1hcnl8VXJsfEdyb3VwfFNvdXJjZXxCdWlsZEFyY2h8QnVpbGRSZXF1aXJlc3xCdWlsZFJvb3R8QXV0b1JlcVByb3Z8UHJvdmlkZXN8UmVxdWlyZXMoXChcdytcKSk/fE9ic29sZXRlc3xDb25mbGljdHN8UmVjb21tZW5kc3xTb3VyY2VcZCp8UGF0Y2hcZCp8RXhjbHVzaXZlQXJjaHxOb1NvdXJjZXxTdXBwbGVtZW50cyk6LzsKICB2YXIgc2VjdGlvbiA9IC9eJShkZWJ1Z19wYWNrYWdlfHBhY2thZ2V8ZGVzY3JpcHRpb258cHJlcHxidWlsZHxpbnN0YWxsfGZpbGVzfGNsZWFufGNoYW5nZWxvZ3xwcmV1bnxwb3N0dW58cHJlfHBvc3R8dHJpZ2dlcmlufHRyaWdnZXJ1bnxwcmV0cmFuc3xwb3N0dHJhbnN8dmVyaWZ5c2NyaXB0fGNoZWNrfHRyaWdnZXJwb3N0dW58dHJpZ2dlcnByZWlufHRyaWdnZXIpLzsKICB2YXIgY29udHJvbF9mbG93X2NvbXBsZXggPSAvXiUoaWZuYXJjaHxpZmFyY2h8aWYpLzsgLy8gcnBtIGNvbnRyb2wgZmxvdyBtYWNyb3MKICB2YXIgY29udHJvbF9mbG93X3NpbXBsZSA9IC9eJShlbHNlfGVuZGlmKS87IC8vIHJwbSBjb250cm9sIGZsb3cgbWFjcm9zCiAgdmFyIG9wZXJhdG9ycyA9IC9eKFwhfFw/fFw8XD18XDx8XD5cPXxcPnxcPVw9fFwmXCZ8XHxcfCkvOyAvLyBvcGVyYXRvcnMgaW4gY29udHJvbCBmbG93IG1hY3JvcwoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjb250cm9sRmxvdzogZmFsc2UsCiAgICAgICAgICBtYWNyb1BhcmFtZXRlcnM6IGZhbHNlLAogICAgICAgICAgc2VjdGlvbjogZmFsc2UKICAgICAgICB9OwogICAgfSwKICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpOwogICAgICBpZiAoY2ggPT0gIiMiKSB7IHN0cmVhbS5za2lwVG9FbmQoKTsgcmV0dXJuICJjb21tZW50IjsgfQoKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocHJlYW1ibGUpKSB7IHJldHVybiAicHJlYW1ibGUiOyB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzZWN0aW9uKSkgeyByZXR1cm4gInNlY3Rpb24iOyB9CiAgICAgIH0KCiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cJFx3Ky8pKSB7IHJldHVybiAiZGVmIjsgfSAvLyBWYXJpYWJsZXMgbGlrZSAnJFJQTV9CVUlMRF9ST09UJwogICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXCRce1x3K1x9LykpIHsgcmV0dXJuICJkZWYiOyB9IC8vIFZhcmlhYmxlcyBsaWtlICcke1JQTV9CVUlMRF9ST09UfScKCiAgICAgIGlmIChzdHJlYW0ubWF0Y2goY29udHJvbF9mbG93X3NpbXBsZSkpIHsgcmV0dXJuICJrZXl3b3JkIjsgfQogICAgICBpZiAoc3RyZWFtLm1hdGNoKGNvbnRyb2xfZmxvd19jb21wbGV4KSkgewogICAgICAgIHN0YXRlLmNvbnRyb2xGbG93ID0gdHJ1ZTsKICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5jb250cm9sRmxvdykgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gob3BlcmF0b3JzKSkgeyByZXR1cm4gIm9wZXJhdG9yIjsgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oXGQrKS8pKSB7IHJldHVybiAibnVtYmVyIjsgfQogICAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHsgc3RhdGUuY29udHJvbEZsb3cgPSBmYWxzZTsgfQogICAgICB9CgogICAgICBpZiAoc3RyZWFtLm1hdGNoKGFyY2gpKSB7IHJldHVybiAibnVtYmVyIjsgfQoKICAgICAgLy8gTWFjcm9zIGxpa2UgJyVtYWtlX2luc3RhbGwnIG9yICclYXR0cigwNzc1LHJvb3Qscm9vdCknCiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14lW1x3XSsvKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cKC8pKSB7IHN0YXRlLm1hY3JvUGFyYW1ldGVycyA9IHRydWU7IH0KICAgICAgICByZXR1cm4gIm1hY3JvIjsKICAgICAgfQogICAgICBpZiAoc3RhdGUubWFjcm9QYXJhbWV0ZXJzKSB7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxkKy8pKSB7IHJldHVybiAibnVtYmVyIjt9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwpLykpIHsKICAgICAgICAgIHN0YXRlLm1hY3JvUGFyYW1ldGVycyA9IGZhbHNlOwogICAgICAgICAgcmV0dXJuICJtYWNybyI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14lXHtcPz9bXHcgXC1dK1x9LykpIHsgcmV0dXJuICJtYWNybyI7IH0gLy8gTWFjcm9zIGxpa2UgJyV7ZGVmaW5lZCBmZWRvcmF9JwoKICAgICAgLy9UT0RPOiBJbmNsdWRlIGJhc2ggc2NyaXB0IHN1Yi1wYXJzZXIgKENvZGVNaXJyb3Igc3VwcG9ydHMgdGhhdCkKICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1ycG0tc3BlYyIsICJzcGVjIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHJlU3RydWN0dXJlZFRleHQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJzdC5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci4uIFRoaXMgaXMgYW4gZXhjZXJwdCBmcm9tIFNwaGlueCBkb2N1bWVudGF0aW9uOiBodHRwOi8vc3BoaW54LnBvY29vLm9yZy9fc291cmNlcy9yZXN0LnR4dAoKLi4gaGlnaGxpZ2h0bGFuZzo6IHJlc3QKCi4uIF9yc3QtcHJpbWVyOgoKcmVTdHJ1Y3R1cmVkVGV4dCBQcmltZXIKPT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgc2VjdGlvbiBpcyBhIGJyaWVmIGludHJvZHVjdGlvbiB0byByZVN0cnVjdHVyZWRUZXh0IChyZVNUKSBjb25jZXB0cyBhbmQKc3ludGF4LCBpbnRlbmRlZCB0byBwcm92aWRlIGF1dGhvcnMgd2l0aCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYXV0aG9yIGRvY3VtZW50cwpwcm9kdWN0aXZlbHkuICBTaW5jZSByZVNUIHdhcyBkZXNpZ25lZCB0byBiZSBhIHNpbXBsZSwgdW5vYnRydXNpdmUgbWFya3VwCmxhbmd1YWdlLCB0aGlzIHdpbGwgbm90IHRha2UgdG9vIGxvbmcuCgouLiBzZWVhbHNvOjoKCiAgIFRoZSBhdXRob3JpdGF0aXZlIGByZVN0cnVjdHVyZWRUZXh0IFVzZXIgRG9jdW1lbnRhdGlvbgogICAmbHQ7aHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldC9yc3QuaHRtbCZndDtgXy4gIFRoZSAicmVmIiBsaW5rcyBpbiB0aGlzCiAgIGRvY3VtZW50IGxpbmsgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIGNvbnN0cnVjdHMgaW4gdGhlIHJlU1QKICAgcmVmZXJlbmNlLgoKClBhcmFncmFwaHMKLS0tLS0tLS0tLQoKVGhlIHBhcmFncmFwaCAoOmR1cmVmOmByZWYgJmx0O3BhcmFncmFwaHMmZ3Q7YCkgaXMgdGhlIG1vc3QgYmFzaWMgYmxvY2sgaW4gYSByZVNUCmRvY3VtZW50LiAgUGFyYWdyYXBocyBhcmUgc2ltcGx5IGNodW5rcyBvZiB0ZXh0IHNlcGFyYXRlZCBieSBvbmUgb3IgbW9yZSBibGFuawpsaW5lcy4gIEFzIGluIFB5dGhvbiwgaW5kZW50YXRpb24gaXMgc2lnbmlmaWNhbnQgaW4gcmVTVCwgc28gYWxsIGxpbmVzIG9mIHRoZQpzYW1lIHBhcmFncmFwaCBtdXN0IGJlIGxlZnQtYWxpZ25lZCB0byB0aGUgc2FtZSBsZXZlbCBvZiBpbmRlbnRhdGlvbi4KCgouLiBfaW5saW5lbWFya3VwOgoKSW5saW5lIG1hcmt1cAotLS0tLS0tLS0tLS0tCgpUaGUgc3RhbmRhcmQgcmVTVCBpbmxpbmUgbWFya3VwIGlzIHF1aXRlIHNpbXBsZTogdXNlCgoqIG9uZSBhc3RlcmlzazogYGAqdGV4dCpgYCBmb3IgZW1waGFzaXMgKGl0YWxpY3MpLAoqIHR3byBhc3Rlcmlza3M6IGBgKip0ZXh0KipgYCBmb3Igc3Ryb25nIGVtcGhhc2lzIChib2xkZmFjZSksIGFuZAoqIGJhY2txdW90ZXM6IGBgYGB0ZXh0YGBgYCBmb3IgY29kZSBzYW1wbGVzLgoKSWYgYXN0ZXJpc2tzIG9yIGJhY2txdW90ZXMgYXBwZWFyIGluIHJ1bm5pbmcgdGV4dCBhbmQgY291bGQgYmUgY29uZnVzZWQgd2l0aAppbmxpbmUgbWFya3VwIGRlbGltaXRlcnMsIHRoZXkgaGF2ZSB0byBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guCgpCZSBhd2FyZSBvZiBzb21lIHJlc3RyaWN0aW9ucyBvZiB0aGlzIG1hcmt1cDoKCiogaXQgbWF5IG5vdCBiZSBuZXN0ZWQsCiogY29udGVudCBtYXkgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2U6IGBgKiB0ZXh0KmBgIGlzIHdyb25nLAoqIGl0IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gc3Vycm91bmRpbmcgdGV4dCBieSBub24td29yZCBjaGFyYWN0ZXJzLiAgVXNlIGEKICBiYWNrc2xhc2ggZXNjYXBlZCBzcGFjZSB0byB3b3JrIGFyb3VuZCB0aGF0OiBgYHRoaXNpc1wgKm9uZSpcIHdvcmRgYC4KClRoZXNlIHJlc3RyaWN0aW9ucyBtYXkgYmUgbGlmdGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgZG9jdXRpbHMuCgpyZVNUIGFsc28gYWxsb3dzIGZvciBjdXN0b20gImludGVycHJldGVkIHRleHQgcm9sZXMiJywgd2hpY2ggc2lnbmlmeSB0aGF0IHRoZQplbmNsb3NlZCB0ZXh0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBpbiBhIHNwZWNpZmljIHdheS4gIFNwaGlueCB1c2VzIHRoaXMgdG8KcHJvdmlkZSBzZW1hbnRpYyBtYXJrdXAgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIG9mIGlkZW50aWZpZXJzLCBhcyBkZXNjcmliZWQgaW4KdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24uICBUaGUgZ2VuZXJhbCBzeW50YXggaXMgYGA6cm9sZW5hbWU6YGNvbnRlbnRgYGAuCgpTdGFuZGFyZCByZVNUIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgcm9sZXM6CgoqIDpkdXJvbGU6YGVtcGhhc2lzYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgKmVtcGhhc2lzKmBgCiogOmR1cm9sZTpgc3Ryb25nYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgKipzdHJvbmcqKmBgCiogOmR1cm9sZTpgbGl0ZXJhbGAgLS0gYWx0ZXJuYXRlIHNwZWxsaW5nIGZvciBgYGBgbGl0ZXJhbGBgYGAKKiA6ZHVyb2xlOmBzdWJzY3JpcHRgIC0tIHN1YnNjcmlwdCB0ZXh0CiogOmR1cm9sZTpgc3VwZXJzY3JpcHRgIC0tIHN1cGVyc2NyaXB0IHRleHQKKiA6ZHVyb2xlOmB0aXRsZS1yZWZlcmVuY2VgIC0tIGZvciB0aXRsZXMgb2YgYm9va3MsIHBlcmlvZGljYWxzLCBhbmQgb3RoZXIKICBtYXRlcmlhbHMKClNlZSA6cmVmOmBpbmxpbmUtbWFya3VwYCBmb3Igcm9sZXMgYWRkZWQgYnkgU3BoaW54LgoKCkxpc3RzIGFuZCBRdW90ZS1saWtlIGJsb2NrcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkxpc3QgbWFya3VwICg6ZHVyZWY6YHJlZiAmbHQ7YnVsbGV0LWxpc3RzJmd0O2ApIGlzIG5hdHVyYWw6IGp1c3QgcGxhY2UgYW4gYXN0ZXJpc2sgYXQKdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoIGFuZCBpbmRlbnQgcHJvcGVybHkuICBUaGUgc2FtZSBnb2VzIGZvciBudW1iZXJlZCBsaXN0czsKdGhleSBjYW4gYWxzbyBiZSBhdXRvbnVtYmVyZWQgdXNpbmcgYSBgYCNgYCBzaWduOjoKCiAgICogVGhpcyBpcyBhIGJ1bGxldGVkIGxpc3QuCiAgICogSXQgaGFzIHR3byBpdGVtcywgdGhlIHNlY29uZAogICAgIGl0ZW0gdXNlcyB0d28gbGluZXMuCgogICAxLiBUaGlzIGlzIGEgbnVtYmVyZWQgbGlzdC4KICAgMi4gSXQgaGFzIHR3byBpdGVtcyB0b28uCgogICAjLiBUaGlzIGlzIGEgbnVtYmVyZWQgbGlzdC4KICAgIy4gSXQgaGFzIHR3byBpdGVtcyB0b28uCgoKTmVzdGVkIGxpc3RzIGFyZSBwb3NzaWJsZSwgYnV0IGJlIGF3YXJlIHRoYXQgdGhleSBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZQpwYXJlbnQgbGlzdCBpdGVtcyBieSBibGFuayBsaW5lczo6CgogICAqIHRoaXMgaXMKICAgKiBhIGxpc3QKCiAgICAgKiB3aXRoIGEgbmVzdGVkIGxpc3QKICAgICAqIGFuZCBzb21lIHN1Yml0ZW1zCgogICAqIGFuZCBoZXJlIHRoZSBwYXJlbnQgbGlzdCBjb250aW51ZXMKCkRlZmluaXRpb24gbGlzdHMgKDpkdXJlZjpgcmVmICZsdDtkZWZpbml0aW9uLWxpc3RzJmd0O2ApIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6OgoKICAgdGVybSAodXAgdG8gYSBsaW5lIG9mIHRleHQpCiAgICAgIERlZmluaXRpb24gb2YgdGhlIHRlcm0sIHdoaWNoIG11c3QgYmUgaW5kZW50ZWQKCiAgICAgIGFuZCBjYW4gZXZlbiBjb25zaXN0IG9mIG11bHRpcGxlIHBhcmFncmFwaHMKCiAgIG5leHQgdGVybQogICAgICBEZXNjcmlwdGlvbi4KCk5vdGUgdGhhdCB0aGUgdGVybSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGxpbmUgb2YgdGV4dC4KClF1b3RlZCBwYXJhZ3JhcGhzICg6ZHVyZWY6YHJlZiAmbHQ7YmxvY2stcXVvdGVzJmd0O2ApIGFyZSBjcmVhdGVkIGJ5IGp1c3QgaW5kZW50aW5nCnRoZW0gbW9yZSB0aGFuIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzLgoKTGluZSBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtsaW5lLWJsb2NrcyZndDtgKSBhcmUgYSB3YXkgb2YgcHJlc2VydmluZyBsaW5lIGJyZWFrczo6CgogICB8IFRoZXNlIGxpbmVzIGFyZQogICB8IGJyb2tlbiBleGFjdGx5IGxpa2UgaW4KICAgfCB0aGUgc291cmNlIGZpbGUuCgpUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIG1vcmUgc3BlY2lhbCBibG9ja3MgYXZhaWxhYmxlOgoKKiBmaWVsZCBsaXN0cyAoOmR1cmVmOmByZWYgJmx0O2ZpZWxkLWxpc3RzJmd0O2ApCiogb3B0aW9uIGxpc3RzICg6ZHVyZWY6YHJlZiAmbHQ7b3B0aW9uLWxpc3RzJmd0O2ApCiogcXVvdGVkIGxpdGVyYWwgYmxvY2tzICg6ZHVyZWY6YHJlZiAmbHQ7cXVvdGVkLWxpdGVyYWwtYmxvY2tzJmd0O2ApCiogZG9jdGVzdCBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtkb2N0ZXN0LWJsb2NrcyZndDtgKQoKClNvdXJjZSBDb2RlCi0tLS0tLS0tLS0tCgpMaXRlcmFsIGNvZGUgYmxvY2tzICg6ZHVyZWY6YHJlZiAmbHQ7bGl0ZXJhbC1ibG9ja3MmZ3Q7YCkgYXJlIGludHJvZHVjZWQgYnkgZW5kaW5nIGEKcGFyYWdyYXBoIHdpdGggdGhlIHNwZWNpYWwgbWFya2VyIGBgOjpgYC4gIFRoZSBsaXRlcmFsIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQKKGFuZCwgbGlrZSBhbGwgcGFyYWdyYXBocywgc2VwYXJhdGVkIGZyb20gdGhlIHN1cnJvdW5kaW5nIG9uZXMgYnkgYmxhbmsgbGluZXMpOjoKCiAgIFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGguIFRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOjoKCiAgICAgIEl0IGlzIG5vdCBwcm9jZXNzZWQgaW4gYW55IHdheSwgZXhjZXB0CiAgICAgIHRoYXQgdGhlIGluZGVudGF0aW9uIGlzIHJlbW92ZWQuCgogICAgICBJdCBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcy4KCiAgIFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGggYWdhaW4uCgpUaGUgaGFuZGxpbmcgb2YgdGhlIGBgOjpgYCBtYXJrZXIgaXMgc21hcnQ6CgoqIElmIGl0IG9jY3VycyBhcyBhIHBhcmFncmFwaCBvZiBpdHMgb3duLCB0aGF0IHBhcmFncmFwaCBpcyBjb21wbGV0ZWx5IGxlZnQKICBvdXQgb2YgdGhlIGRvY3VtZW50LgoqIElmIGl0IGlzIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UsIHRoZSBtYXJrZXIgaXMgcmVtb3ZlZC4KKiBJZiBpdCBpcyBwcmVjZWRlZCBieSBub24td2hpdGVzcGFjZSwgdGhlIG1hcmtlciBpcyByZXBsYWNlZCBieSBhIHNpbmdsZQogIGNvbG9uLgoKVGhhdCB3YXksIHRoZSBzZWNvbmQgc2VudGVuY2UgaW4gdGhlIGFib3ZlIGV4YW1wbGUncyBmaXJzdCBwYXJhZ3JhcGggd291bGQgYmUKcmVuZGVyZWQgYXMgIlRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOiIuCgoKLi4gX3JzdC10YWJsZXM6CgpUYWJsZXMKLS0tLS0tCgpUd28gZm9ybXMgb2YgdGFibGVzIGFyZSBzdXBwb3J0ZWQuICBGb3IgKmdyaWQgdGFibGVzKiAoOmR1cmVmOmByZWYKJmx0O2dyaWQtdGFibGVzJmd0O2ApLCB5b3UgaGF2ZSB0byAicGFpbnQiIHRoZSBjZWxsIGdyaWQgeW91cnNlbGYuICBUaGV5IGxvb2sgbGlrZQp0aGlzOjoKCiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKICAgfCBIZWFkZXIgcm93LCBjb2x1bW4gMSAgIHwgSGVhZGVyIDIgICB8IEhlYWRlciAzIHwgSGVhZGVyIDQgfAogICB8IChoZWFkZXIgcm93cyBvcHRpb25hbCkgfCAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICB8CiAgICs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT0rPT09PT09PT09PSsKICAgfCBib2R5IHJvdyAxLCBjb2x1bW4gMSAgIHwgY29sdW1uIDIgICB8IGNvbHVtbiAzIHwgY29sdW1uIDQgfAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiAgIHwgYm9keSByb3cgMiAgICAgICAgICAgICB8IC4uLiAgICAgICAgfCAuLi4gICAgICB8ICAgICAgICAgIHwKICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwoKKlNpbXBsZSB0YWJsZXMqICg6ZHVyZWY6YHJlZiAmbHQ7c2ltcGxlLXRhYmxlcyZndDtgKSBhcmUgZWFzaWVyIHRvIHdyaXRlLCBidXQKbGltaXRlZDogdGhleSBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByb3csIGFuZCB0aGUgZmlyc3QgY29sdW1uIGNhbm5vdApjb250YWluIG11bHRpcGxlIGxpbmVzLiAgVGhleSBsb29rIGxpa2UgdGhpczo6CgogICA9PT09PSAgPT09PT0gID09PT09PT0KICAgQSAgICAgIEIgICAgICBBIGFuZCBCCiAgID09PT09ICA9PT09PSAgPT09PT09PQogICBGYWxzZSAgRmFsc2UgIEZhbHNlCiAgIFRydWUgICBGYWxzZSAgRmFsc2UKICAgRmFsc2UgIFRydWUgICBGYWxzZQogICBUcnVlICAgVHJ1ZSAgIFRydWUKICAgPT09PT0gID09PT09ICA9PT09PT09CgoKSHlwZXJsaW5rcwotLS0tLS0tLS0tCgpFeHRlcm5hbCBsaW5rcwpeXl5eXl5eXl5eXl5eXgoKVXNlIGBgYExpbmsgdGV4dCAmbHQ7aHR0cDovL2V4YW1wbGUuY29tLyZndDtgX2BgIGZvciBpbmxpbmUgd2ViIGxpbmtzLiAgSWYgdGhlIGxpbmsKdGV4dCBzaG91bGQgYmUgdGhlIHdlYiBhZGRyZXNzLCB5b3UgZG9uJ3QgbmVlZCBzcGVjaWFsIG1hcmt1cCBhdCBhbGwsIHRoZSBwYXJzZXIKZmluZHMgbGlua3MgYW5kIG1haWwgYWRkcmVzc2VzIGluIG9yZGluYXJ5IHRleHQuCgpZb3UgY2FuIGFsc28gc2VwYXJhdGUgdGhlIGxpbmsgYW5kIHRoZSB0YXJnZXQgZGVmaW5pdGlvbiAoOmR1cmVmOmByZWYKJmx0O2h5cGVybGluay10YXJnZXRzJmd0O2ApLCBsaWtlIHRoaXM6OgoKICAgVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGNvbnRhaW5zIGBhIGxpbmtgXy4KCiAgIC4uIF9hIGxpbms6IGh0dHA6Ly9leGFtcGxlLmNvbS8KCgpJbnRlcm5hbCBsaW5rcwpeXl5eXl5eXl5eXl5eXgoKSW50ZXJuYWwgbGlua2luZyBpcyBkb25lIHZpYSBhIHNwZWNpYWwgcmVTVCByb2xlIHByb3ZpZGVkIGJ5IFNwaGlueCwgc2VlIHRoZQpzZWN0aW9uIG9uIHNwZWNpZmljIG1hcmt1cCwgOnJlZjpgcmVmLXJvbGVgLgoKClNlY3Rpb25zCi0tLS0tLS0tCgpTZWN0aW9uIGhlYWRlcnMgKDpkdXJlZjpgcmVmICZsdDtzZWN0aW9ucyZndDtgKSBhcmUgY3JlYXRlZCBieSB1bmRlcmxpbmluZyAoYW5kCm9wdGlvbmFsbHkgb3ZlcmxpbmluZykgdGhlIHNlY3Rpb24gdGl0bGUgd2l0aCBhIHB1bmN0dWF0aW9uIGNoYXJhY3RlciwgYXQgbGVhc3QKYXMgbG9uZyBhcyB0aGUgdGV4dDo6CgogICA9PT09PT09PT09PT09PT09PQogICBUaGlzIGlzIGEgaGVhZGluZwogICA9PT09PT09PT09PT09PT09PQoKTm9ybWFsbHksIHRoZXJlIGFyZSBubyBoZWFkaW5nIGxldmVscyBhc3NpZ25lZCB0byBjZXJ0YWluIGNoYXJhY3RlcnMgYXMgdGhlCnN0cnVjdHVyZSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHN1Y2Nlc3Npb24gb2YgaGVhZGluZ3MuICBIb3dldmVyLCBmb3IgdGhlClB5dGhvbiBkb2N1bWVudGF0aW9uLCB0aGlzIGNvbnZlbnRpb24gaXMgdXNlZCB3aGljaCB5b3UgbWF5IGZvbGxvdzoKCiogYGAjYGAgd2l0aCBvdmVybGluZSwgZm9yIHBhcnRzCiogYGAqYGAgd2l0aCBvdmVybGluZSwgZm9yIGNoYXB0ZXJzCiogYGA9YGAsIGZvciBzZWN0aW9ucwoqIGBgLWBgLCBmb3Igc3Vic2VjdGlvbnMKKiBgYF5gYCwgZm9yIHN1YnN1YnNlY3Rpb25zCiogYGAiYGAsIGZvciBwYXJhZ3JhcGhzCgpPZiBjb3Vyc2UsIHlvdSBhcmUgZnJlZSB0byB1c2UgeW91ciBvd24gbWFya2VyIGNoYXJhY3RlcnMgKHNlZSB0aGUgcmVTVApkb2N1bWVudGF0aW9uKSwgYW5kIHVzZSBhIGRlZXBlciBuZXN0aW5nIGxldmVsLCBidXQga2VlcCBpbiBtaW5kIHRoYXQgbW9zdAp0YXJnZXQgZm9ybWF0cyAoSFRNTCwgTGFUZVgpIGhhdmUgYSBsaW1pdGVkIHN1cHBvcnRlZCBuZXN0aW5nIGRlcHRoLgoKCkV4cGxpY2l0IE1hcmt1cAotLS0tLS0tLS0tLS0tLS0KCiJFeHBsaWNpdCBtYXJrdXAiICg6ZHVyZWY6YHJlZiAmbHQ7ZXhwbGljaXQtbWFya3VwLWJsb2NrcyZndDtgKSBpcyB1c2VkIGluIHJlU1QgZm9yCm1vc3QgY29uc3RydWN0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyBmb290bm90ZXMsCnNwZWNpYWxseS1oaWdobGlnaHRlZCBwYXJhZ3JhcGhzLCBjb21tZW50cywgYW5kIGdlbmVyaWMgZGlyZWN0aXZlcy4KCkFuIGV4cGxpY2l0IG1hcmt1cCBibG9jayBiZWdpbnMgd2l0aCBhIGxpbmUgc3RhcnRpbmcgd2l0aCBgYC4uYGAgZm9sbG93ZWQgYnkKd2hpdGVzcGFjZSBhbmQgaXMgdGVybWluYXRlZCBieSB0aGUgbmV4dCBwYXJhZ3JhcGggYXQgdGhlIHNhbWUgbGV2ZWwgb2YKaW5kZW50YXRpb24uICAoVGhlcmUgbmVlZHMgdG8gYmUgYSBibGFuayBsaW5lIGJldHdlZW4gZXhwbGljaXQgbWFya3VwIGFuZCBub3JtYWwKcGFyYWdyYXBocy4gIFRoaXMgbWF5IGFsbCBzb3VuZCBhIGJpdCBjb21wbGljYXRlZCwgYnV0IGl0IGlzIGludHVpdGl2ZSBlbm91Z2gKd2hlbiB5b3Ugd3JpdGUgaXQuKQoKCi4uIF9kaXJlY3RpdmVzOgoKRGlyZWN0aXZlcwotLS0tLS0tLS0tCgpBIGRpcmVjdGl2ZSAoOmR1cmVmOmByZWYgJmx0O2RpcmVjdGl2ZXMmZ3Q7YCkgaXMgYSBnZW5lcmljIGJsb2NrIG9mIGV4cGxpY2l0IG1hcmt1cC4KQmVzaWRlcyByb2xlcywgaXQgaXMgb25lIG9mIHRoZSBleHRlbnNpb24gbWVjaGFuaXNtcyBvZiByZVNULCBhbmQgU3BoaW54IG1ha2VzCmhlYXZ5IHVzZSBvZiBpdC4KCkRvY3V0aWxzIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlczoKCiogQWRtb25pdGlvbnM6IDpkdWRpcjpgYXR0ZW50aW9uYCwgOmR1ZGlyOmBjYXV0aW9uYCwgOmR1ZGlyOmBkYW5nZXJgLAogIDpkdWRpcjpgZXJyb3JgLCA6ZHVkaXI6YGhpbnRgLCA6ZHVkaXI6YGltcG9ydGFudGAsIDpkdWRpcjpgbm90ZWAsCiAgOmR1ZGlyOmB0aXBgLCA6ZHVkaXI6YHdhcm5pbmdgIGFuZCB0aGUgZ2VuZXJpYyA6ZHVkaXI6YGFkbW9uaXRpb25gLgogIChNb3N0IHRoZW1lcyBzdHlsZSBvbmx5ICJub3RlIiBhbmQgIndhcm5pbmciIHNwZWNpYWxseS4pCgoqIEltYWdlczoKCiAgLSA6ZHVkaXI6YGltYWdlYCAoc2VlIGFsc28gSW1hZ2VzXyBiZWxvdykKICAtIDpkdWRpcjpgZmlndXJlYCAoYW4gaW1hZ2Ugd2l0aCBjYXB0aW9uIGFuZCBvcHRpb25hbCBsZWdlbmQpCgoqIEFkZGl0aW9uYWwgYm9keSBlbGVtZW50czoKCiAgLSA6ZHVkaXI6YGNvbnRlbnRzYCAoYSBsb2NhbCwgaS5lLiBmb3IgdGhlIGN1cnJlbnQgZmlsZSBvbmx5LCB0YWJsZSBvZgogICAgY29udGVudHMpCiAgLSA6ZHVkaXI6YGNvbnRhaW5lcmAgKGEgY29udGFpbmVyIHdpdGggYSBjdXN0b20gY2xhc3MsIHVzZWZ1bCB0byBnZW5lcmF0ZSBhbgogICAgb3V0ZXIgYGAmbHQ7ZGl2Jmd0O2BgIGluIEhUTUwpCiAgLSA6ZHVkaXI6YHJ1YnJpY2AgKGEgaGVhZGluZyB3aXRob3V0IHJlbGF0aW9uIHRvIHRoZSBkb2N1bWVudCBzZWN0aW9uaW5nKQogIC0gOmR1ZGlyOmB0b3BpY2AsIDpkdWRpcjpgc2lkZWJhcmAgKHNwZWNpYWwgaGlnaGxpZ2h0ZWQgYm9keSBlbGVtZW50cykKICAtIDpkdWRpcjpgcGFyc2VkLWxpdGVyYWxgIChsaXRlcmFsIGJsb2NrIHRoYXQgc3VwcG9ydHMgaW5saW5lIG1hcmt1cCkKICAtIDpkdWRpcjpgZXBpZ3JhcGhgIChhIGJsb2NrIHF1b3RlIHdpdGggb3B0aW9uYWwgYXR0cmlidXRpb24gbGluZSkKICAtIDpkdWRpcjpgaGlnaGxpZ2h0c2AsIDpkdWRpcjpgcHVsbC1xdW90ZWAgKGJsb2NrIHF1b3RlcyB3aXRoIHRoZWlyIG93bgogICAgY2xhc3MgYXR0cmlidXRlKQogIC0gOmR1ZGlyOmBjb21wb3VuZGAgKGEgY29tcG91bmQgcGFyYWdyYXBoKQoKKiBTcGVjaWFsIHRhYmxlczoKCiAgLSA6ZHVkaXI6YHRhYmxlYCAoYSB0YWJsZSB3aXRoIHRpdGxlKQogIC0gOmR1ZGlyOmBjc3YtdGFibGVgIChhIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMpCiAgLSA6ZHVkaXI6YGxpc3QtdGFibGVgIChhIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGEgbGlzdCBvZiBsaXN0cykKCiogU3BlY2lhbCBkaXJlY3RpdmVzOgoKICAtIDpkdWRpcjpgcmF3YCAoaW5jbHVkZSByYXcgdGFyZ2V0LWZvcm1hdCBtYXJrdXApCiAgLSA6ZHVkaXI6YGluY2x1ZGVgIChpbmNsdWRlIHJlU3RydWN0dXJlZFRleHQgZnJvbSBhbm90aGVyIGZpbGUpCiAgICAtLSBpbiBTcGhpbngsIHdoZW4gZ2l2ZW4gYW4gYWJzb2x1dGUgaW5jbHVkZSBmaWxlIHBhdGgsIHRoaXMgZGlyZWN0aXZlIHRha2VzCiAgICBpdCBhcyByZWxhdGl2ZSB0byB0aGUgc291cmNlIGRpcmVjdG9yeQogIC0gOmR1ZGlyOmBjbGFzc2AgKGFzc2lnbiBhIGNsYXNzIGF0dHJpYnV0ZSB0byB0aGUgbmV4dCBlbGVtZW50KSBbMV1fCgoqIEhUTUwgc3BlY2lmaWNzOgoKICAtIDpkdWRpcjpgbWV0YWAgKGdlbmVyYXRpb24gb2YgSFRNTCBgYCZsdDttZXRhJmd0O2BgIHRhZ3MpCiAgLSA6ZHVkaXI6YHRpdGxlYCAob3ZlcnJpZGUgZG9jdW1lbnQgdGl0bGUpCgoqIEluZmx1ZW5jaW5nIG1hcmt1cDoKCiAgLSA6ZHVkaXI6YGRlZmF1bHQtcm9sZWAgKHNldCBhIG5ldyBkZWZhdWx0IHJvbGUpCiAgLSA6ZHVkaXI6YHJvbGVgIChjcmVhdGUgYSBuZXcgcm9sZSkKCiAgU2luY2UgdGhlc2UgYXJlIG9ubHkgcGVyLWZpbGUsIGJldHRlciB1c2UgU3BoaW54JyBmYWNpbGl0aWVzIGZvciBzZXR0aW5nIHRoZQogIDpjb25mdmFsOmBkZWZhdWx0X3JvbGVgLgoKRG8gKm5vdCogdXNlIHRoZSBkaXJlY3RpdmVzIDpkdWRpcjpgc2VjdG51bWAsIDpkdWRpcjpgaGVhZGVyYCBhbmQKOmR1ZGlyOmBmb290ZXJgLgoKRGlyZWN0aXZlcyBhZGRlZCBieSBTcGhpbnggYXJlIGRlc2NyaWJlZCBpbiA6cmVmOmBzcGhpbnhtYXJrdXBgLgoKQmFzaWNhbGx5LCBhIGRpcmVjdGl2ZSBjb25zaXN0cyBvZiBhIG5hbWUsIGFyZ3VtZW50cywgb3B0aW9ucyBhbmQgY29udGVudC4gKEtlZXAKdGhpcyB0ZXJtaW5vbG9neSBpbiBtaW5kLCBpdCBpcyB1c2VkIGluIHRoZSBuZXh0IGNoYXB0ZXIgZGVzY3JpYmluZyBjdXN0b20KZGlyZWN0aXZlcy4pICBMb29raW5nIGF0IHRoaXMgZXhhbXBsZSwgOjoKCiAgIC4uIGZ1bmN0aW9uOjogZm9vKHgpCiAgICAgICAgICAgICAgICAgZm9vKHksIHopCiAgICAgIDptb2R1bGU6IHNvbWUubW9kdWxlLm5hbWUKCiAgICAgIFJldHVybiBhIGxpbmUgb2YgdGV4dCBpbnB1dCBmcm9tIHRoZSB1c2VyLgoKYGBmdW5jdGlvbmBgIGlzIHRoZSBkaXJlY3RpdmUgbmFtZS4gIEl0IGlzIGdpdmVuIHR3byBhcmd1bWVudHMgaGVyZSwgdGhlCnJlbWFpbmRlciBvZiB0aGUgZmlyc3QgbGluZSBhbmQgdGhlIHNlY29uZCBsaW5lLCBhcyB3ZWxsIGFzIG9uZSBvcHRpb24KYGBtb2R1bGVgYCAoYXMgeW91IGNhbiBzZWUsIG9wdGlvbnMgYXJlIGdpdmVuIGluIHRoZSBsaW5lcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKdGhlIGFyZ3VtZW50cyBhbmQgaW5kaWNhdGVkIGJ5IHRoZSBjb2xvbnMpLiAgT3B0aW9ucyBtdXN0IGJlIGluZGVudGVkIHRvIHRoZQpzYW1lIGxldmVsIGFzIHRoZSBkaXJlY3RpdmUgY29udGVudC4KClRoZSBkaXJlY3RpdmUgY29udGVudCBmb2xsb3dzIGFmdGVyIGEgYmxhbmsgbGluZSBhbmQgaXMgaW5kZW50ZWQgcmVsYXRpdmUgdG8gdGhlCmRpcmVjdGl2ZSBzdGFydC4KCgpJbWFnZXMKLS0tLS0tCgpyZVNUIHN1cHBvcnRzIGFuIGltYWdlIGRpcmVjdGl2ZSAoOmR1ZGlyOmByZWYgJmx0O2ltYWdlJmd0O2ApLCB1c2VkIGxpa2Ugc286OgoKICAgLi4gaW1hZ2U6OiBnbnUucG5nCiAgICAgIChvcHRpb25zKQoKV2hlbiB1c2VkIHdpdGhpbiBTcGhpbngsIHRoZSBmaWxlIG5hbWUgZ2l2ZW4gKGhlcmUgYGBnbnUucG5nYGApIG11c3QgZWl0aGVyIGJlCnJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZmlsZSwgb3IgYWJzb2x1dGUgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSByZWxhdGl2ZSB0bwp0aGUgdG9wIHNvdXJjZSBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGUgYGBza2V0Y2gvc3BhbS5yc3RgYCBjb3VsZCByZWZlcgp0byB0aGUgaW1hZ2UgYGBpbWFnZXMvc3BhbS5wbmdgYCBhcyBgYC4uL2ltYWdlcy9zcGFtLnBuZ2BgIG9yCmBgL2ltYWdlcy9zcGFtLnBuZ2BgLgoKU3BoaW54IHdpbGwgYXV0b21hdGljYWxseSBjb3B5IGltYWdlIGZpbGVzIG92ZXIgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIG91dHB1dApkaXJlY3Rvcnkgb24gYnVpbGRpbmcgKGUuZy4gdGhlIGBgX3N0YXRpY2BgIGRpcmVjdG9yeSBmb3IgSFRNTCBvdXRwdXQuKQoKSW50ZXJwcmV0YXRpb24gb2YgaW1hZ2Ugc2l6ZSBvcHRpb25zIChgYHdpZHRoYGAgYW5kIGBgaGVpZ2h0YGApIGlzIGFzIGZvbGxvd3M6CmlmIHRoZSBzaXplIGhhcyBubyB1bml0IG9yIHRoZSB1bml0IGlzIHBpeGVscywgdGhlIGdpdmVuIHNpemUgd2lsbCBvbmx5IGJlCnJlc3BlY3RlZCBmb3Igb3V0cHV0IGNoYW5uZWxzIHRoYXQgc3VwcG9ydCBwaXhlbHMgKGkuZS4gbm90IGluIExhVGVYIG91dHB1dCkuCk90aGVyIHVuaXRzIChsaWtlIGBgcHRgYCBmb3IgcG9pbnRzKSB3aWxsIGJlIHVzZWQgZm9yIEhUTUwgYW5kIExhVGVYIG91dHB1dC4KClNwaGlueCBleHRlbmRzIHRoZSBzdGFuZGFyZCBkb2N1dGlscyBiZWhhdmlvciBieSBhbGxvd2luZyBhbiBhc3RlcmlzayBmb3IgdGhlCmV4dGVuc2lvbjo6CgogICAuLiBpbWFnZTo6IGdudS4qCgpTcGhpbnggdGhlbiBzZWFyY2hlcyBmb3IgYWxsIGltYWdlcyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgcGF0dGVybiBhbmQgZGV0ZXJtaW5lcwp0aGVpciB0eXBlLiAgRWFjaCBidWlsZGVyIHRoZW4gY2hvb3NlcyB0aGUgYmVzdCBpbWFnZSBvdXQgb2YgdGhlc2UgY2FuZGlkYXRlcy4KRm9yIGluc3RhbmNlLCBpZiB0aGUgZmlsZSBuYW1lIGBgZ251LipgYCB3YXMgZ2l2ZW4gYW5kIHR3byBmaWxlcyA6ZmlsZTpgZ251LnBkZmAKYW5kIDpmaWxlOmBnbnUucG5nYCBleGlzdGVkIGluIHRoZSBzb3VyY2UgdHJlZSwgdGhlIExhVGVYIGJ1aWxkZXIgd291bGQgY2hvb3NlCnRoZSBmb3JtZXIsIHdoaWxlIHRoZSBIVE1MIGJ1aWxkZXIgd291bGQgcHJlZmVyIHRoZSBsYXR0ZXIuCgouLiB2ZXJzaW9uY2hhbmdlZDo6IDAuNAogICBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgZmlsZSBuYW1lcyBlbmRpbmcgaW4gYW4gYXN0ZXJpc2suCgouLiB2ZXJzaW9uY2hhbmdlZDo6IDAuNgogICBJbWFnZSBwYXRocyBjYW4gbm93IGJlIGFic29sdXRlLgoKCkZvb3Rub3RlcwotLS0tLS0tLS0KCkZvciBmb290bm90ZXMgKDpkdXJlZjpgcmVmICZsdDtmb290bm90ZXMmZ3Q7YCksIHVzZSBgYFsjbmFtZV1fYGAgdG8gbWFyayB0aGUgZm9vdG5vdGUKbG9jYXRpb24sIGFuZCBhZGQgdGhlIGZvb3Rub3RlIGJvZHkgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQgYWZ0ZXIgYQoiRm9vdG5vdGVzIiBydWJyaWMgaGVhZGluZywgbGlrZSBzbzo6CgogICBMb3JlbSBpcHN1bSBbI2YxXV8gZG9sb3Igc2l0IGFtZXQgLi4uIFsjZjJdXwoKICAgLi4gcnVicmljOjogRm9vdG5vdGVzCgogICAuLiBbI2YxXSBUZXh0IG9mIHRoZSBmaXJzdCBmb290bm90ZS4KICAgLi4gWyNmMl0gVGV4dCBvZiB0aGUgc2Vjb25kIGZvb3Rub3RlLgoKWW91IGNhbiBhbHNvIGV4cGxpY2l0bHkgbnVtYmVyIHRoZSBmb290bm90ZXMgKGBgWzFdX2BgKSBvciB1c2UgYXV0by1udW1iZXJlZApmb290bm90ZXMgd2l0aG91dCBuYW1lcyAoYGBbI11fYGApLgoKCkNpdGF0aW9ucwotLS0tLS0tLS0KClN0YW5kYXJkIHJlU1QgY2l0YXRpb25zICg6ZHVyZWY6YHJlZiAmbHQ7Y2l0YXRpb25zJmd0O2ApIGFyZSBzdXBwb3J0ZWQsIHdpdGggdGhlCmFkZGl0aW9uYWwgZmVhdHVyZSB0aGF0IHRoZXkgYXJlICJnbG9iYWwiLCBpLmUuIGFsbCBjaXRhdGlvbnMgY2FuIGJlIHJlZmVyZW5jZWQKZnJvbSBhbGwgZmlsZXMuICBVc2UgdGhlbSBsaWtlIHNvOjoKCiAgIExvcmVtIGlwc3VtIFtSZWZdXyBkb2xvciBzaXQgYW1ldC4KCiAgIC4uIFtSZWZdIEJvb2sgb3IgYXJ0aWNsZSByZWZlcmVuY2UsIFVSTCBvciB3aGF0ZXZlci4KCkNpdGF0aW9uIHVzYWdlIGlzIHNpbWlsYXIgdG8gZm9vdG5vdGUgdXNhZ2UsIGJ1dCB3aXRoIGEgbGFiZWwgdGhhdCBpcyBub3QKbnVtZXJpYyBvciBiZWdpbnMgd2l0aCBgYCNgYC4KCgpTdWJzdGl0dXRpb25zCi0tLS0tLS0tLS0tLS0KCnJlU1Qgc3VwcG9ydHMgInN1YnN0aXR1dGlvbnMiICg6ZHVyZWY6YHJlZiAmbHQ7c3Vic3RpdHV0aW9uLWRlZmluaXRpb25zJmd0O2ApLCB3aGljaAphcmUgcGllY2VzIG9mIHRleHQgYW5kL29yIG1hcmt1cCByZWZlcnJlZCB0byBpbiB0aGUgdGV4dCBieSBgYHxuYW1lfGBgLiAgVGhleQphcmUgZGVmaW5lZCBsaWtlIGZvb3Rub3RlcyB3aXRoIGV4cGxpY2l0IG1hcmt1cCBibG9ja3MsIGxpa2UgdGhpczo6CgogICAuLiB8bmFtZXwgcmVwbGFjZTo6IHJlcGxhY2VtZW50ICp0ZXh0KgoKb3IgdGhpczo6CgogICAuLiB8Y2F1dGlvbnwgaW1hZ2U6OiB3YXJuaW5nLnBuZwogICAgICAgICAgICAgICAgOmFsdDogV2FybmluZyEKClNlZSB0aGUgOmR1cmVmOmByZVNUIHJlZmVyZW5jZSBmb3Igc3Vic3RpdHV0aW9ucyAmbHQ7c3Vic3RpdHV0aW9uLWRlZmluaXRpb25zJmd0O2AKZm9yIGRldGFpbHMuCgpJZiB5b3Ugd2FudCB0byB1c2Ugc29tZSBzdWJzdGl0dXRpb25zIGZvciBhbGwgZG9jdW1lbnRzLCBwdXQgdGhlbSBpbnRvCjpjb25mdmFsOmByc3RfcHJvbG9nYCBvciBwdXQgdGhlbSBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgaW5jbHVkZSBpdCBpbnRvIGFsbApkb2N1bWVudHMgeW91IHdhbnQgdG8gdXNlIHRoZW0gaW4sIHVzaW5nIHRoZSA6cnN0OmRpcjpgaW5jbHVkZWAgZGlyZWN0aXZlLiAgKEJlCnN1cmUgdG8gZ2l2ZSB0aGUgaW5jbHVkZSBmaWxlIGEgZmlsZSBuYW1lIGV4dGVuc2lvbiBkaWZmZXJpbmcgZnJvbSB0aGF0IG9mIG90aGVyCnNvdXJjZSBmaWxlcywgdG8gYXZvaWQgU3BoaW54IGZpbmRpbmcgaXQgYXMgYSBzdGFuZGFsb25lIGRvY3VtZW50LikKClNwaGlueCBkZWZpbmVzIHNvbWUgZGVmYXVsdCBzdWJzdGl0dXRpb25zLCBzZWUgOnJlZjpgZGVmYXVsdC1zdWJzdGl0dXRpb25zYC4KCgpDb21tZW50cwotLS0tLS0tLQoKRXZlcnkgZXhwbGljaXQgbWFya3VwIGJsb2NrIHdoaWNoIGlzbid0IGEgdmFsaWQgbWFya3VwIGNvbnN0cnVjdCAobGlrZSB0aGUKZm9vdG5vdGVzIGFib3ZlKSBpcyByZWdhcmRlZCBhcyBhIGNvbW1lbnQgKDpkdXJlZjpgcmVmICZsdDtjb21tZW50cyZndDtgKS4gIEZvcgpleGFtcGxlOjoKCiAgIC4uIFRoaXMgaXMgYSBjb21tZW50LgoKWW91IGNhbiBpbmRlbnQgdGV4dCBhZnRlciBhIGNvbW1lbnQgc3RhcnQgdG8gZm9ybSBtdWx0aWxpbmUgY29tbWVudHM6OgoKICAgLi4KICAgICAgVGhpcyB3aG9sZSBpbmRlbnRlZCBibG9jawogICAgICBpcyBhIGNvbW1lbnQuCgogICAgICBTdGlsbCBpbiB0aGUgY29tbWVudC4KCgpTb3VyY2UgZW5jb2RpbmcKLS0tLS0tLS0tLS0tLS0tCgpTaW5jZSB0aGUgZWFzaWVzdCB3YXkgdG8gaW5jbHVkZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSBlbSBkYXNoZXMgb3IgY29weXJpZ2h0CnNpZ25zIGluIHJlU1QgaXMgdG8gZGlyZWN0bHkgd3JpdGUgdGhlbSBhcyBVbmljb2RlIGNoYXJhY3RlcnMsIG9uZSBoYXMgdG8Kc3BlY2lmeSBhbiBlbmNvZGluZy4gIFNwaGlueCBhc3N1bWVzIHNvdXJjZSBmaWxlcyB0byBiZSBlbmNvZGVkIGluIFVURi04IGJ5CmRlZmF1bHQ7IHlvdSBjYW4gY2hhbmdlIHRoaXMgd2l0aCB0aGUgOmNvbmZ2YWw6YHNvdXJjZV9lbmNvZGluZ2AgY29uZmlnIHZhbHVlLgoKCkdvdGNoYXMKLS0tLS0tLQoKVGhlcmUgYXJlIHNvbWUgcHJvYmxlbXMgb25lIGNvbW1vbmx5IHJ1bnMgaW50byB3aGlsZSBhdXRob3JpbmcgcmVTVCBkb2N1bWVudHM6CgoqICoqU2VwYXJhdGlvbiBvZiBpbmxpbmUgbWFya3VwOioqIEFzIHNhaWQgYWJvdmUsIGlubGluZSBtYXJrdXAgc3BhbnMgbXVzdCBiZQogIHNlcGFyYXRlZCBmcm9tIHRoZSBzdXJyb3VuZGluZyB0ZXh0IGJ5IG5vbi13b3JkIGNoYXJhY3RlcnMsIHlvdSBoYXZlIHRvIHVzZSBhCiAgYmFja3NsYXNoLWVzY2FwZWQgc3BhY2UgdG8gZ2V0IGFyb3VuZCB0aGF0LiAgU2VlIGB0aGUgcmVmZXJlbmNlCiAgJmx0O2h0dHA6Ly9kb2N1dGlscy5zZi5uZXQvZG9jcy9yZWYvcnN0L3Jlc3RydWN0dXJlZHRleHQuaHRtbCNpbmxpbmUtbWFya3VwJmd0O2BfCiAgZm9yIHRoZSBkZXRhaWxzLgoKKiAqKk5vIG5lc3RlZCBpbmxpbmUgbWFya3VwOioqIFNvbWV0aGluZyBsaWtlIGBgKnNlZSA6ZnVuYzpgZm9vYCpgYCBpcyBub3QKICBwb3NzaWJsZS4KCgouLiBydWJyaWM6OiBGb290bm90ZXMKCi4uIFsxXSBXaGVuIHRoZSBkZWZhdWx0IGRvbWFpbiBjb250YWlucyBhIDpyc3Q6ZGlyOmBjbGFzc2AgZGlyZWN0aXZlLCB0aGlzIGRpcmVjdGl2ZQogICAgICAgd2lsbCBiZSBzaGFkb3dlZC4gIFRoZXJlZm9yZSwgU3BoaW54IHJlLWV4cG9ydHMgaXQgYXMgOnJzdDpkaXI6YHJzdC1jbGFzc2AuCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CiAgICA8cD5UaGUgcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlIHN1cHBvcnRzIG9uZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjo8L3A+CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT52ZXJiYXRpbSAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QSBuYW1lIG9yIE1JTUUgdHlwZSBvZiBhIG1vZGUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGhpZ2hsaWdodGluZwogICAgICB2ZXJiYXRpbSBibG9ja3MuIEJ5IGRlZmF1bHQsIHJlU3RydWN0dXJlZFRleHQgbW9kZSB1c2VzIHVuaWZvcm0gY29sb3IKICAgICAgZm9yIHdob2xlIGJsb2NrIG9mIHZlcmJhdGltIHRleHQgaWYgbm8gbW9kZSBpcyBnaXZlbi48L2RkPgogICAgPC9kbD4KICAgIDxwPklmIDxjb2RlPnB5dGhvbjwvY29kZT4gbW9kZSBpcyBhdmFpbGFibGUsCiAgICBpdCB3aWxsIGJlIHVzZWQgZm9yIGhpZ2hsaWdodGluZyBibG9ja3MgY29udGFpbmluZyBQeXRob24vSVB5dGhvbiB0ZXJtaW5hbAogICAgc2Vzc2lvbnMgKGJsb2NrcyBzdGFydGluZyB3aXRoIDxjb2RlPiZndDsmZ3Q7Jmd0OzwvY29kZT4gKGZvciBQeXRob24pIG9yCiAgICA8Y29kZT5JbiBbbnVtXTo8L2NvZGU+IChmb3IgSVB5dGhvbikuCgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1yc3Q8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4KCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdyc3QnLCBmdW5jdGlvbihjb25maWcsIG9wdGlvbnMpIHsKICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmbiwgY3R4KSB7CiAgICAgICAgc3RhdGUuZm4gPSBmbjsKICAgICAgICBzZXRDdHgoc3RhdGUsIGN0eCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Q3R4KHN0YXRlLCBjdHgpIHsKICAgICAgICBzdGF0ZS5jdHggPSBjdHggfHwge307CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Tm9ybWFsKHN0YXRlLCBjaCkgewogICAgICAgIGlmIChjaCAmJiAodHlwZW9mIGNoICE9PSAnc3RyaW5nJykpIHsKICAgICAgICAgICAgdmFyIHN0ciA9IGNoLmN1cnJlbnQoKTsKICAgICAgICAgICAgY2ggPSBzdHJbc3RyLmxlbmd0aC0xXTsKICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwsIHtiYWNrOiBjaH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGhhc01vZGUobW9kZSkgewogICAgICAgIGlmIChtb2RlKSB7CiAgICAgICAgICAgIHZhciBtb2RlcyA9IENvZGVNaXJyb3IubGlzdE1vZGVzKCk7CgogICAgICAgICAgICBmb3IgKHZhciBpIGluIG1vZGVzKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kZXNbaV0gPT0gbW9kZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TW9kZShtb2RlKSB7CiAgICAgICAgaWYgKGhhc01vZGUobW9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIG1vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICB2YXIgdmVyYmF0aW1Nb2RlID0gZ2V0TW9kZShvcHRpb25zLnZlcmJhdGltKTsKICAgIHZhciBweXRob25Nb2RlID0gZ2V0TW9kZSgncHl0aG9uJyk7CgogICAgdmFyIHJlU2VjdGlvbiA9IC9eWyEiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxcXV5fYHt8fX5dLzsKICAgIHZhciByZURpcmVjdGl2ZSA9IC9eXHMqXHcoWy06Llx3XSpcdyk/OjooXHN8JCkvOwogICAgdmFyIHJlSHlwZXJsaW5rID0gL15ccypfW1x3LV0rOihcc3wkKS87CiAgICB2YXIgcmVGb290bm90ZSA9IC9eXHMqXFsoXGQrfCMpXF0oXHN8JCkvOwogICAgdmFyIHJlQ2l0YXRpb24gPSAvXlxzKlxbW0EtWmEtel1bXHctXSpcXShcc3wkKS87CiAgICB2YXIgcmVGb290bm90ZVJlZiA9IC9eXFsoXGQrfCMpXF1fLzsKICAgIHZhciByZUNpdGF0aW9uUmVmID0gL15cW1tBLVphLXpdW1x3LV0qXF1fLzsKICAgIHZhciByZURpcmVjdGl2ZU1hcmtlciA9IC9eXC5cLihcc3wkKS87CiAgICB2YXIgcmVWZXJiYXRpbU1hcmtlciA9IC9eOjpccyokLzsKICAgIHZhciByZVByZUlubGluZSA9IC9eWy1ccyIoW3s8LzpdLzsKICAgIHZhciByZVBvc3RJbmxpbmUgPSAvXlstXHNgJyIpXF19Pi86Liw7IT9cXF9dLzsKICAgIHZhciByZUVudW1lcmF0ZWRMaXN0ID0gL15ccyooKFxkK3xbQS1aYS16I10pWy4pXXxcKChcZCt8W0EtWi1hLXojXSlcKSlccy87CiAgICB2YXIgcmVCdWxsZXRlZExpc3QgPSAvXlxzKlstXCtcKl1ccy87CiAgICB2YXIgcmVFeGFtcGxlcyA9IC9eXHMrKD4+PnxJbiBcW1xkK1xdOilccy87CgogICAgZnVuY3Rpb24gbm9ybWFsKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2gsIHNvbCwgaTsKCiAgICAgICAgaWYgKHN0cmVhbS5lYXQoL1xcLykpIHsKICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBzb2wgPSBzdHJlYW0uc29sKCk7CgogICAgICAgIGlmIChzb2wgJiYgKGNoID0gc3RyZWFtLmVhdChyZVNlY3Rpb24pKSkgewogICAgICAgICAgICBmb3IgKGkgPSAwOyBzdHJlYW0uZWF0KGNoKTsgaSsrKTsKCiAgICAgICAgICAgIGlmIChpID49IDMgJiYgc3RyZWFtLm1hdGNoKC9eXHMqJC8pKSB7CiAgICAgICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIG51bGwpOwogICAgICAgICAgICAgICAgcmV0dXJuICdoZWFkZXInOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcChpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlTWFya2VyKSkgewogICAgICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGRpcmVjdGl2ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdtZXRhJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocmVWZXJiYXRpbU1hcmtlcikpIHsKICAgICAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHZlcmJhdGltTW9kZTsKCiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgdmVyYmF0aW0sIHsKICAgICAgICAgICAgICAgICAgICBtb2RlOiBtb2RlLAogICAgICAgICAgICAgICAgICAgIGxvY2FsOiBtb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdtZXRhJzsKICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRXhhbXBsZXMsIGZhbHNlKSkgewogICAgICAgICAgICBpZiAoIXB5dGhvbk1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ21ldGEnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIG1vZGUgPSBweXRob25Nb2RlOwoKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSwgewogICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYWw6IG1vZGUuc3RhcnRTdGF0ZSgpCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGVzdEJhY2t3YXJkKHJlKSB7CiAgICAgICAgICAgIHJldHVybiBzb2wgfHwgIXN0YXRlLmN0eC5iYWNrIHx8IHJlLnRlc3Qoc3RhdGUuY3R4LmJhY2spOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGVzdEZvcndhcmQocmUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5lb2woKSB8fCBzdHJlYW0ubWF0Y2gocmUsIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRlc3RJbmxpbmUocmUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChyZSkgJiYgdGVzdEJhY2t3YXJkKC9cVy8pICYmIHRlc3RGb3J3YXJkKC9cVy8pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRlc3RJbmxpbmUocmVGb290bm90ZVJlZikpIHsKICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICByZXR1cm4gJ2Zvb3Rub3RlJzsKICAgICAgICB9CgogICAgICAgIGlmICh0ZXN0SW5saW5lKHJlQ2l0YXRpb25SZWYpKSB7CiAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgcmV0dXJuICdjaXRhdGlvbic7CiAgICAgICAgfQoKICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgIGlmICh0ZXN0QmFja3dhcmQocmVQcmVJbmxpbmUpKSB7CiAgICAgICAgICAgIGlmICgoY2ggPT09ICc6JyB8fCBjaCA9PT0gJ3wnKSAmJiBzdHJlYW0uZWF0KC9cUy8pKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW47CgogICAgICAgICAgICAgICAgaWYgKGNoID09PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9ICdidWlsdGluJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSAnYXRvbSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGlubGluZSwgewogICAgICAgICAgICAgICAgICAgIGNoOiBjaCwKICAgICAgICAgICAgICAgICAgICB3aWRlOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBwcmV2OiBudWxsLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoY2ggPT09ICcqJyB8fCBjaCA9PT0gJ2AnKSB7CiAgICAgICAgICAgICAgICB2YXIgb3JpZyA9IGNoLAogICAgICAgICAgICAgICAgICAgIHdpZGUgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgICAgICAgICAgaWYgKGNoID09IG9yaWcpIHsKICAgICAgICAgICAgICAgICAgICB3aWRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGNoICYmICEvXHMvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3JpZyA9PT0gJyonKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gd2lkZSA/ICdzdHJvbmcnIDogJ2VtJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHdpZGUgPyAnc3RyaW5nJyA6ICdzdHJpbmctMic7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgaW5saW5lLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoOiBvcmlnLCAgICAgICAgICAgICAgIC8vIGlubGluZSgpIGhhcyB0byBrbm93IHdoYXQgdG8gc2VhcmNoIGZvcgogICAgICAgICAgICAgICAgICAgICAgICB3aWRlOiB3aWRlLCAgICAgICAgICAgICAvLyBhcmUgd2UgbG9va2luZyBmb3IgYGNoYCBvciBgY2hjaGAKICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbnVsbCwgICAgICAgICAgICAgLy8gdGVybWluYXRvciBtdXN0IG5vdCBiZSBwcmVjZWVkZWQgd2l0aCB3aGl0ZXNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbiAgICAgICAgICAgIC8vIEkgZG9uJ3Qgd2FudCB0byByZWNvbXB1dGUgdGhpcyBhbGwgdGhlIHRpbWUKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmxpbmUoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCksCiAgICAgICAgICAgIHRva2VuID0gc3RhdGUuY3R4LnRva2VuOwoKICAgICAgICBmdW5jdGlvbiBmaW5pc2goY2gpIHsKICAgICAgICAgICAgc3RhdGUuY3R4LnByZXYgPSBjaDsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNoICE9IHN0YXRlLmN0eC5jaCkgewogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIGlmICgvXHMvLnRlc3Qoc3RhdGUuY3R4LnByZXYpKSB7CiAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlLmN0eC53aWRlKSB7CiAgICAgICAgICAgIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgIGlmIChjaCAhPSBzdGF0ZS5jdHguY2gpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSAmJiAhcmVQb3N0SW5saW5lLnRlc3Qoc3RyZWFtLnBlZWsoKSkpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmN0eC53aWRlKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwpOwogICAgICAgIHNldE5vcm1hbChzdGF0ZSwgY2gpOwoKICAgICAgICByZXR1cm4gdG9rZW47CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aXZlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSBudWxsOwoKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlKSkgewogICAgICAgICAgICB0b2tlbiA9ICdhdHRyaWJ1dGUnOwogICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKHJlSHlwZXJsaW5rKSkgewogICAgICAgICAgICB0b2tlbiA9ICdsaW5rJzsKICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChyZUZvb3Rub3RlKSkgewogICAgICAgICAgICB0b2tlbiA9ICdxdW90ZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocmVDaXRhdGlvbikpIHsKICAgICAgICAgICAgdG9rZW4gPSAncXVvdGUnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwoKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgY29tbWVudCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBGSVhNRSB0aGlzIGlzIHVucmVhY2hhYmxlCiAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGJvZHksIHtzdGFydDogdHJ1ZX0pOwogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBib2R5KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSAnYm9keSc7CgogICAgICAgIGlmICghc3RhdGUuY3R4LnN0YXJ0IHx8IHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgdG9rZW4pOwogICAgICAgIH0KCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHNldEN0eChzdGF0ZSk7CgogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBjb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgJ2NvbW1lbnQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB2ZXJiYXRpbShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIGJsb2NrKHN0cmVhbSwgc3RhdGUsICdtZXRhJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICAgICAgaWYgKCFzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHZlcmJhdGltTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN0eC5sb2NhbCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGJsb2NrKHN0cmVhbSwgc3RhdGUsIHRva2VuKSB7CiAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCBzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIHN0cmVhbSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4ge2ZuOiBub3JtYWwsIGN0eDoge319OwogICAgICAgIH0sCgogICAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHtmbjogc3RhdGUuZm4sIGN0eDogc3RhdGUuY3R4fTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgdG9rZW4gPSBzdGF0ZS5mbihzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KICAgIH07Cn0sICJweXRob24iKTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXJzdCIsICJyc3QiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJ1YnkgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJ1YnkuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAuY20tcy1kZWZhdWx0IHNwYW4uY20tYXJyb3cgeyBjb2xvcjogcmVkOyB9CiAgICA8L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSdWJ5IG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2RlIGZyb20gaHR0cDovL3NhbmRib3gubWMuZWR1L35iZW5uZXQvcnVieS9jb2RlL3BvbHlfcmIuaHRtbAojCiMgVGhpcyBwcm9ncmFtIGV2YWx1YXRlcyBwb2x5bm9taWFscy4gIEl0IGZpcnN0IGFza3MgZm9yIHRoZSBjb2VmZmljaWVudHMKIyBvZiBhIHBvbHlub21pYWwsIHdoaWNoIG11c3QgYmUgZW50ZXJlZCBvbiBvbmUgbGluZSwgaGlnaGVzdC1vcmRlciBmaXJzdC4KIyBJdCB0aGVuIHJlcXVlc3RzIHZhbHVlcyBvZiB4IGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSBwb2x5IGZvcgojIGVhY2ggeC4gIEl0IHdpbGwgcmVwZWF0bHkgYXNrIGZvciB4IHZhbHVlcywgdW5sZXNzIHlvdSB0aGUgdXNlciBlbnRlcnMKIyBhIGJsYW5rIGxpbmUuICBJdCB0aGF0IGNhc2UsIGl0IHdpbGwgYXNrIGZvciBhbm90aGVyIHBvbHlub21pYWwuICBJZiB0aGUKIyB1c2VyIHR5cGVzIHF1aXQgZm9yIGVpdGhlciBpbnB1dCwgdGhlIHByb2dyYW0gaW1tZWRpYXRlbHkgZXhpdHMuCiMKCiMKIyBGdW5jdGlvbiB0byBldmFsdWF0ZSBhIHBvbHlub21pYWwgYXQgeC4gIFRoZSBwb2x5bm9taWFsIGlzIGdpdmVuCiMgYXMgYSBsaXN0IG9mIGNvZWZmaWNpZW50cywgZnJvbSB0aGUgZ3JlYXRlc3QgdG8gdGhlIGxlYXN0LgpkZWYgcG9seXZhbCh4LCBjb2VmKQogICAgc3VtID0gMAogICAgY29lZiA9IGNvZWYuY2xvbmUgICAgICAgICAgICMgRG9uJ3Qgd2FudCB0byBkZXN0cm95IHRoZSBvcmlnaW5hbAogICAgd2hpbGUgdHJ1ZQogICAgICAgIHN1bSArPSBjb2VmLnNoaWZ0ICAgICAgICMgQWRkIGFuZCByZW1vdmUgdGhlIG5leHQgY29lZgogICAgICAgIGJyZWFrIGlmIGNvZWYuZW1wdHk/ICAgICMgSWYgbm8gbW9yZSwgZG9uZSBlbnRpcmVseS4KICAgICAgICBzdW0gKj0geCAgICAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB0aGUgcmlnaHQgbnVtYmVyIG9mIHRpbWVzLgogICAgZW5kCiAgICByZXR1cm4gc3VtCmVuZAoKIwojIEZ1bmN0aW9uIHRvIHJlYWQgYSBsaW5lIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGludGVnZXJzIGFuZCByZXR1cm4KIyB0aGVtIGFzIGFuIGFycmF5IG9mIGludGVnZXJzLiAgSWYgdGhlIHN0cmluZyBjb252ZXJzaW9uIGZhaWxzLCBpdAojIHRocm93cyBUeXBlRXJyb3IuICBJZiB0aGUgaW5wdXQgbGluZSBpcyB0aGUgd29yZCAncXVpdCcsIHRoZW4gaXQKIyBjb252ZXJ0cyBpdCB0byBhbiBlbmQtb2YtZmlsZSBleGNlcHRpb24KZGVmIHJlYWRpbnRzKHByb21wdCkKICAgICMgUmVhZCBhIGxpbmUKICAgIHByaW50IHByb21wdAogICAgbGluZSA9IHJlYWRsaW5lLmNob21wCiAgICByYWlzZSBFT0ZFcnJvci5uZXcgaWYgbGluZSA9PSAncXVpdCcgIyBZb3UgY2FuIGFsc28gdXNlIGEgcmVhbCBFT0YuCiAgICAgICAgICAgIAogICAgIyBHbyB0aHJvdWdoIGVhY2ggaXRlbSBvbiB0aGUgbGluZSwgY29udmVydGluZyBlYWNoIG9uZSBhbmQgYWRkaW5nIGl0CiAgICAjIHRvIHJldHZhbC4KICAgIHJldHZhbCA9IFsgXQogICAgZm9yIHN0ciBpbiBsaW5lLnNwbGl0KC9ccysvKQogICAgICAgIGlmIHN0ciA9fiAvXlwtP1xkKyQvCiAgICAgICAgICAgIHJldHZhbC5wdXNoKHN0ci50b19pKQogICAgICAgIGVsc2UKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLm5ldwogICAgICAgIGVuZAogICAgZW5kCgogICAgcmV0dXJuIHJldHZhbAplbmQKCiMKIyBUYWtlIGEgY29lZmYgYW5kIGFuIGV4cG9uZW50IGFuZCByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaWdub3JpbmcKIyB0aGUgc2lnbiBvZiB0aGUgY29lZmZpY2llbnQuCmRlZiB0ZXJtX3RvX3N0cihjb2VmLCBleHApCiAgICByZXQgPSAiIgoKICAgICMgU2hvdyBjb2VmZiwgdW5sZXNzIGl0J3MgMSBvciBhdCB0aGUgcmlnaHQKICAgIGNvZWYgPSBjb2VmLmFicwogICAgcmV0ID0gY29lZi50b19zICAgICB1bmxlc3MgY29lZiA9PSAxICYmIGV4cCA+IDAKICAgIHJldCArPSAieCIgaWYgZXhwID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHggaWYgZXhwb25lbnQgbm90IDAKICAgIHJldCArPSAiXiIgKyBleHAudG9fcyBpZiBleHAgPiAxICAgICAgICAgICAgICAgICAgICAjIF5leHBvbmVudCwgaWYgPiAxLgoKICAgIHJldHVybiByZXQKZW5kCgojCiMgQ3JlYXRlIGEgc3RyaW5nIG9mIHRoZSBwb2x5bm9taWFsIGluIHNvcnQtb2YtcmVhZGFibGUgZm9ybS4KZGVmIHBvbHlzdHIocCkKICAgICMgR2V0IHRoZSBleHBvbmVudCBvZiBmaXJzdCBjb2VmZmljaWVudCwgcGx1cyAxLgogICAgZXhwID0gcC5sZW5ndGgKCiAgICAjIEFzc2lnbiBleHBvbmVudHMgdG8gZWFjaCB0ZXJtLCBtYWtpbmcgcGFpcnMgb2YgY29lZmYgYW5kIGV4cG9uZW50LAogICAgIyBUaGVuIGdldCByaWQgb2YgdGhlIHplcm8gdGVybXMuCiAgICBwID0gKHAubWFwIHsgfGN8IGV4cCAtPSAxOyBbIGMsIGV4cCBdIH0pLnNlbGVjdCB7IHxwfCBwWzBdICE9IDAgfQoKICAgICMgSWYgdGhlcmUncyBub3RoaW5nIGxlZnQsIGl0J3MgYSB6ZXJvCiAgICByZXR1cm4gIjAiIGlmIHAuZW1wdHk/CgogICAgIyAqKiogTm93IHAgaXMgYSBub24tZW1wdHkgbGlzdCBvZiBbIGNvZWYsIGV4cG9uZW50IF0gcGFpcnMuICoqKgoKICAgICMgQ29udmVydCB0aGUgZmlyc3QgdGVybSwgcHJlY2VkZWQgYnkgYSAiLSIgaWYgaXQncyBuZWdhdGl2ZS4KICAgIHJlc3VsdCA9IChpZiBwWzBdWzBdIDwgMCB0aGVuICItIiBlbHNlICIiIGVuZCkgKyB0ZXJtX3RvX3N0cigqcFswXSkKCiAgICAjIENvbnZlcnQgdGhlIHJlc3Qgb2YgdGhlIHRlcm1zLCBpbiBlYWNoIGNhc2UgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZQogICAgIyArIG9yIC0gc2VwYXJhdGluZyB0aGVtLiAgCiAgICBmb3IgdGVybSBpbiBwWzEuLi5wLmxlbmd0aF0KICAgICAgICAjIEFkZCB0aGUgc2VwYXJhdG9yIHRoZW4gdGhlIHJlcC4gb2YgdGhlIHRlcm0uCiAgICAgICAgcmVzdWx0ICs9IChpZiB0ZXJtWzBdIDwgMCB0aGVuICIgLSAiIGVsc2UgIiArICIgZW5kKSArIAogICAgICAgICAgICAgICAgdGVybV90b19zdHIoKnRlcm0pCiAgICBlbmQKCiAgICByZXR1cm4gcmVzdWx0CmVuZAogICAgICAgIAojCiMgUnVuIHVudGlsIHNvbWUga2luZCBvZiBlbmRmaWxlLgpiZWdpbgogICAgIyBSZXBlYXQgdW50aWwgYW4gZXhjZXB0aW9uIG9yIHF1aXQgZ2V0cyB1cyBvdXQuCiAgICB3aGlsZSB0cnVlCiAgICAgICAgIyBSZWFkIGEgcG9seSB1bnRpbCBpdCB3b3Jrcy4gIEFuIEVPRiB3aWxsIGV4Y2VwdCBvdXQgb2YgdGhlCiAgICAgICAgIyBwcm9ncmFtLgogICAgICAgIHByaW50ICJcbiIKICAgICAgICBiZWdpbgogICAgICAgICAgICBwb2x5ID0gcmVhZGludHMoIkVudGVyIGEgcG9seW5vbWlhbCBjb2VmZmljaWVudHM6ICIpCiAgICAgICAgcmVzY3VlIFR5cGVFcnJvcgogICAgICAgICAgICBwcmludCAiVHJ5IGFnYWluLlxuIgogICAgICAgICAgICByZXRyeQogICAgICAgIGVuZAogICAgICAgIGJyZWFrIGlmIHBvbHkuZW1wdHk/CgogICAgICAgICMgUmVhZCBhbmQgZXZhbHVhdGUgeCB2YWx1ZXMgdW50aWwgdGhlIHVzZXIgdHlwZXMgYSBibGFuayBsaW5lLgogICAgICAgICMgQWdhaW4sIGFuIEVPRiB3aWxsIGV4Y2VwdCBvdXQgb2YgdGhlIHBnbS4KICAgICAgICB3aGlsZSB0cnVlCiAgICAgICAgICAgICMgUmVxdWVzdCBhbiBpbnRlZ2VyLgogICAgICAgICAgICBwcmludCAiRW50ZXIgeCB2YWx1ZSBvciBibGFuayBsaW5lOiAiCiAgICAgICAgICAgIHggPSByZWFkbGluZS5jaG9tcAogICAgICAgICAgICBicmVhayBpZiB4ID09ICcnCiAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yLm5ldyBpZiB4ID09ICdxdWl0JwoKICAgICAgICAgICAgIyBJZiBpdCBsb29rcyBiYWQsIGxldCdzIHRyeSBhZ2Fpbi4KICAgICAgICAgICAgaWYgeCAhfiAvXlwtP1xkKyQvCiAgICAgICAgICAgICAgICBwcmludCAiVGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBhbiBpbnRlZ2VyLiAgUGxlYXNlIHRyeSBhZ2Fpbi5cbiIKICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAjIENvbnZlcnQgdG8gYW4gaW50ZWdlciBhbmQgcHJpbnQgdGhlIHJlc3VsdC4KICAgICAgICAgICAgeCA9IHgudG9faQogICAgICAgICAgICBwcmludCAicCh4KSA9ICIsIHBvbHlzdHIocG9seSksICJcbiIKICAgICAgICAgICAgcHJpbnQgInAoIiwgeCwgIikgPSAiLCBwb2x5dmFsKHgsIHBvbHkpLCAiXG4iCiAgICAgICAgZW5kCiAgICBlbmQKcmVzY3VlIEVPRkVycm9yCiAgICBwcmludCAiXG49PT0gRU9GID09PVxuIgpyZXNjdWUgSW50ZXJydXB0LCBTaWduYWxFeGNlcHRpb24KICAgIHByaW50ICJcbj09PSBJbnRlcnJ1cHRlZCA9PT1cbiIKZWxzZQogICAgcHJpbnQgIi0tLSBCeWUgLS0tXG4iCmVuZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogInRleHQveC1ydWJ5IiwKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJ1Ynk8L2NvZGU+LjwvcD4KCiAgICA8cD5EZXZlbG9wbWVudCBvZiB0aGUgQ29kZU1pcnJvciBSdWJ5IG1vZGUgd2FzIGtpbmRseSBzcG9uc29yZWQKICAgIGJ5IDxhIGhyZWY9Imh0dHA6Ly91YmFsby5jb20vIj5VYmFsbzwvYT4sIHdobyBob2xkCiAgICB0aGUgPGEgaHJlZj0iTElDRU5TRSI+bGljZW5zZTwvYT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBVYmFsbywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVWJhbG8sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBVQkFMTywgSU5DIEJFIExJQUJMRSBGT1IgQU5ZCkRJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECk9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTClNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJydWJ5IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICBmdW5jdGlvbiB3b3JkT2JqKHdvcmRzKSB7CiAgICB2YXIgbyA9IHt9OwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSB3b3Jkcy5sZW5ndGg7IGkgPCBlOyArK2kpIG9bd29yZHNbaV1dID0gdHJ1ZTsKICAgIHJldHVybiBvOwogIH0KICB2YXIga2V5d29yZHMgPSB3b3JkT2JqKFsKICAgICJhbGlhcyIsICJhbmQiLCAiQkVHSU4iLCAiYmVnaW4iLCAiYnJlYWsiLCAiY2FzZSIsICJjbGFzcyIsICJkZWYiLCAiZGVmaW5lZD8iLCAiZG8iLCAiZWxzZSIsCiAgICAiZWxzaWYiLCAiRU5EIiwgImVuZCIsICJlbnN1cmUiLCAiZmFsc2UiLCAiZm9yIiwgImlmIiwgImluIiwgIm1vZHVsZSIsICJuZXh0IiwgIm5vdCIsICJvciIsCiAgICAicmVkbyIsICJyZXNjdWUiLCAicmV0cnkiLCAicmV0dXJuIiwgInNlbGYiLCAic3VwZXIiLCAidGhlbiIsICJ0cnVlIiwgInVuZGVmIiwgInVubGVzcyIsCiAgICAidW50aWwiLCAid2hlbiIsICJ3aGlsZSIsICJ5aWVsZCIsICJuaWwiLCAicmFpc2UiLCAidGhyb3ciLCAiY2F0Y2giLCAiZmFpbCIsICJsb29wIiwgImNhbGxjYyIsCiAgICAiY2FsbGVyIiwgImxhbWJkYSIsICJwcm9jIiwgInB1YmxpYyIsICJwcm90ZWN0ZWQiLCAicHJpdmF0ZSIsICJyZXF1aXJlIiwgImxvYWQiLAogICAgInJlcXVpcmVfcmVsYXRpdmUiLCAiZXh0ZW5kIiwgImF1dG9sb2FkIgogIF0pOwogIHZhciBpbmRlbnRXb3JkcyA9IHdvcmRPYmooWyJkZWYiLCAiY2xhc3MiLCAiY2FzZSIsICJmb3IiLCAid2hpbGUiLCAiZG8iLCAibW9kdWxlIiwgInRoZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYXRjaCIsICJsb29wIiwgInByb2MiLCAiYmVnaW4iXSk7CiAgdmFyIGRlZGVudFdvcmRzID0gd29yZE9iaihbImVuZCIsICJ1bnRpbCJdKTsKICB2YXIgbWF0Y2hpbmcgPSB7IlsiOiAiXSIsICJ7IjogIn0iLCAiKCI6ICIpIn07CiAgdmFyIGN1clB1bmM7CgogIGZ1bmN0aW9uIGNoYWluKG5ld3Rvaywgc3RyZWFtLCBzdGF0ZSkgewogICAgc3RhdGUudG9rZW5pemUucHVzaChuZXd0b2spOwogICAgcmV0dXJuIG5ld3RvayhzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICBjdXJQdW5jID0gbnVsbDsKICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKCI9YmVnaW4iKSAmJiBzdHJlYW0uZW9sKCkpIHsKICAgICAgc3RhdGUudG9rZW5pemUucHVzaChyZWFkQmxvY2tDb21tZW50KTsKICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgIH0KICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpLCBtOwogICAgaWYgKGNoID09ICJgIiB8fCBjaCA9PSAiJyIgfHwgY2ggPT0gJyInIHx8CiAgICAgICAgKGNoID09ICIvIiAmJiAhc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5wZWVrKCkgIT0gIiAiKSkgewogICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChjaCwgInN0cmluZyIsIGNoID09ICciJyB8fCBjaCA9PSAiYCIpLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiUiKSB7CiAgICAgIHZhciBzdHlsZSwgZW1iZWQgPSBmYWxzZTsKICAgICAgaWYgKHN0cmVhbS5lYXQoInMiKSkgc3R5bGUgPSAiYXRvbSI7CiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoL1tXUV0vKSkgeyBzdHlsZSA9ICJzdHJpbmciOyBlbWJlZCA9IHRydWU7IH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgvW3d4cXJdLykpIHN0eWxlID0gInN0cmluZyI7CiAgICAgIHZhciBkZWxpbSA9IHN0cmVhbS5lYXQoL1teXHdcc10vKTsKICAgICAgaWYgKCFkZWxpbSkgcmV0dXJuICJvcGVyYXRvciI7CiAgICAgIGlmIChtYXRjaGluZy5wcm9wZXJ0eUlzRW51bWVyYWJsZShkZWxpbSkpIGRlbGltID0gbWF0Y2hpbmdbZGVsaW1dOwogICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChkZWxpbSwgc3R5bGUsIGVtYmVkLCB0cnVlKSwgc3RyZWFtLCBzdGF0ZSk7CiAgICB9IGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI8IiAmJiAobSA9IHN0cmVhbS5tYXRjaCgvXjwtP1tcYFwiXCddPyhbYS16QS1aXz9dXHcqKVtcYFwiXCddPyg/Ojt8JCkvKSkpIHsKICAgICAgcmV0dXJuIGNoYWluKHJlYWRIZXJlRG9jKG1bMV0pLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIjAiKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJ4IikpIHN0cmVhbS5lYXRXaGlsZSgvW1xkYS1mQS1GXS8pOwogICAgICBlbHNlIGlmIChzdHJlYW0uZWF0KCJiIikpIHN0cmVhbS5lYXRXaGlsZSgvWzAxXS8pOwogICAgICBlbHNlIHN0cmVhbS5lYXRXaGlsZSgvWzAtN10vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfSBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXltcZF9dKig/OlwuW1xkX10rKT8oPzpbZUVdWytcLV0/W1xkX10rKT8vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiPyIpIHsKICAgICAgd2hpbGUgKHN0cmVhbS5tYXRjaCgvXlxcW0NNXS0vKSkge30KICAgICAgaWYgKHN0cmVhbS5lYXQoIlxcIikpIHN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKICAgICAgZWxzZSBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI6IikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiJyIpKSByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZCgiJyIsICJhdG9tIiwgZmFsc2UpLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0cmVhbS5lYXQoJyInKSkgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoJyInLCAiYXRvbSIsIHRydWUpLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcP10vKTsKICAgICAgcmV0dXJuICJhdG9tIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIkAiKSB7CiAgICAgIHN0cmVhbS5lYXQoIkAiKTsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcP10vKTsKICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiQiKSB7CiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XD9dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMyI7CiAgICB9IGVsc2UgaWYgKC9cdy8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcP10vKTsKICAgICAgaWYgKHN0cmVhbS5lYXQoIjoiKSkgcmV0dXJuICJhdG9tIjsKICAgICAgcmV0dXJuICJpZGVudCI7CiAgICB9IGVsc2UgaWYgKGNoID09ICJ8IiAmJiAoc3RhdGUudmFyTGlzdCB8fCBzdGF0ZS5sYXN0VG9rID09ICJ7IiB8fCBzdGF0ZS5sYXN0VG9rID09ICJkbyIpKSB7CiAgICAgIGN1clB1bmMgPSAifCI7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmICgvW1woXClcW1xde31cXDtdLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgIHJldHVybiAiYXJyb3ciOwogICAgfSBlbHNlIGlmICgvWz0rXC1cLyo6XC5eJTw+fnxdLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1s9K1wtXC8qOlwuXiU8Pn58XS8pOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9rZW5CYXNlVW50aWxCcmFjZSgpIHsKICAgIHZhciBkZXB0aCA9IDE7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAifSIpIHsKICAgICAgICBkZXB0aC0tOwogICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT0gInsiKSB7CiAgICAgICAgZGVwdGgrKzsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gcmVhZFF1b3RlZChxdW90ZSwgc3R5bGUsIGVtYmVkLCB1bmVzY2FwZWQpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoOwogICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAodW5lc2NhcGVkIHx8ICFlc2NhcGVkKSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGVtYmVkICYmIGNoID09ICIjIiAmJiAhZXNjYXBlZCAmJiBzdHJlYW0uZWF0KCJ7IikpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplLnB1c2godG9rZW5CYXNlVW50aWxCcmFjZShhcmd1bWVudHMuY2FsbGVlKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CiAgZnVuY3Rpb24gcmVhZEhlcmVEb2MocGhyYXNlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHBocmFzZSkpIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CiAgZnVuY3Rpb24gcmVhZEJsb2NrQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgiPWVuZCIpICYmIHN0cmVhbS5lb2woKSkKICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICByZXR1cm4gImNvbW1lbnQiOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiBbdG9rZW5CYXNlXSwKICAgICAgICAgICAgICBpbmRlbnRlZDogMCwKICAgICAgICAgICAgICBjb250ZXh0OiB7dHlwZTogInRvcCIsIGluZGVudGVkOiAtY29uZmlnLmluZGVudFVuaXR9LAogICAgICAgICAgICAgIGNvbnRpbnVlZExpbmU6IGZhbHNlLAogICAgICAgICAgICAgIGxhc3RUb2s6IG51bGwsCiAgICAgICAgICAgICAgdmFyTGlzdDogZmFsc2V9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSksIGt3dHlwZTsKICAgICAgaWYgKHN0eWxlID09ICJpZGVudCIpIHsKICAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgICAgc3R5bGUgPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSA/ICJrZXl3b3JkIgogICAgICAgICAgOiAvXltBLVpdLy50ZXN0KHdvcmQpID8gInRhZyIKICAgICAgICAgIDogKHN0YXRlLmxhc3RUb2sgPT0gImRlZiIgfHwgc3RhdGUubGFzdFRvayA9PSAiY2xhc3MiIHx8IHN0YXRlLnZhckxpc3QpID8gImRlZiIKICAgICAgICAgIDogInZhcmlhYmxlIjsKICAgICAgICBpZiAoaW5kZW50V29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIGt3dHlwZSA9ICJpbmRlbnQiOwogICAgICAgIGVsc2UgaWYgKGRlZGVudFdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSBrd3R5cGUgPSAiZGVkZW50IjsKICAgICAgICBlbHNlIGlmICgod29yZCA9PSAiaWYiIHx8IHdvcmQgPT0gInVubGVzcyIpICYmIHN0cmVhbS5jb2x1bW4oKSA9PSBzdHJlYW0uaW5kZW50YXRpb24oKSkKICAgICAgICAgIGt3dHlwZSA9ICJpbmRlbnQiOwogICAgICB9CiAgICAgIGlmIChjdXJQdW5jIHx8IChzdHlsZSAmJiBzdHlsZSAhPSAiY29tbWVudCIpKSBzdGF0ZS5sYXN0VG9rID0gd29yZCB8fCBjdXJQdW5jIHx8IHN0eWxlOwogICAgICBpZiAoY3VyUHVuYyA9PSAifCIpIHN0YXRlLnZhckxpc3QgPSAhc3RhdGUudmFyTGlzdDsKCiAgICAgIGlmIChrd3R5cGUgPT0gImluZGVudCIgfHwgL1tcKFxbXHtdLy50ZXN0KGN1clB1bmMpKQogICAgICAgIHN0YXRlLmNvbnRleHQgPSB7cHJldjogc3RhdGUuY29udGV4dCwgdHlwZTogY3VyUHVuYyB8fCBzdHlsZSwgaW5kZW50ZWQ6IHN0YXRlLmluZGVudGVkfTsKICAgICAgZWxzZSBpZiAoKGt3dHlwZSA9PSAiZGVkZW50IiB8fCAvW1wpXF1cfV0vLnRlc3QoY3VyUHVuYykpICYmIHN0YXRlLmNvbnRleHQucHJldikKICAgICAgICBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OwoKICAgICAgaWYgKHN0cmVhbS5lb2woKSkKICAgICAgICBzdGF0ZS5jb250aW51ZWRMaW5lID0gKGN1clB1bmMgPT0gIlxcIiB8fCBzdHlsZSA9PSAib3BlcmF0b3IiKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuaXplW3N0YXRlLnRva2VuaXplLmxlbmd0aC0xXSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCk7CiAgICAgIHZhciBjdCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIHZhciBjbG9zaW5nID0gY3QudHlwZSA9PSBtYXRjaGluZ1tmaXJzdENoYXJdIHx8CiAgICAgICAgY3QudHlwZSA9PSAia2V5d29yZCIgJiYgL14oPzplbmR8dW50aWx8ZWxzZXxlbHNpZnx3aGVufHJlc2N1ZSlcYi8udGVzdCh0ZXh0QWZ0ZXIpOwogICAgICByZXR1cm4gY3QuaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBjb25maWcuaW5kZW50VW5pdCkgKwogICAgICAgIChzdGF0ZS5jb250aW51ZWRMaW5lID8gY29uZmlnLmluZGVudFVuaXQgOiAwKTsKICAgIH0sCiAgICAgZWxlY3RyaWNDaGFyczogIn1kZSIgLy8gZW5EIGFuZCByZXNjdUUKCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1ydWJ5IiwgInJ1YnkiKTsKCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJ1c3QgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJ1c3QuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFJ1c3QgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZS4KCnR5cGUgZm9vPFQ+ID0gaW50OwplbnVtIGJhciB7CiAgICBzb21lKGludCwgZm9vPGZsb2F0PiksCiAgICBub25lCn0KCmZuIGNoZWNrX2NyYXRlKHg6IGludCkgewogICAgbGV0IHYgPSAxMDsKICAgIGFsdCBmb28gewogICAgICAxIHRvIDMgewogICAgICAgIHByaW50X2ZvbygpOwogICAgICAgIGlmIHggewogICAgICAgICAgICBibGFoKCkgKyAxMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgKHgsIHkpIHsgImJ5ZSIgfQogICAgICBfIHsgImhpIiB9CiAgICB9Cn0KPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgdGFiTW9kZTogImluZGVudCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJ1c3RzcmM8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/rust.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJydXN0IiwgZnVuY3Rpb24oKSB7CiAgdmFyIGluZGVudFVuaXQgPSA0LCBhbHRJbmRlbnRVbml0ID0gMjsKICB2YXIgdmFsS2V5d29yZHMgPSB7CiAgICAiaWYiOiAiaWYtc3R5bGUiLCAid2hpbGUiOiAiaWYtc3R5bGUiLCAiZWxzZSI6ICJlbHNlLXN0eWxlIiwKICAgICJkbyI6ICJlbHNlLXN0eWxlIiwgInJldCI6ICJlbHNlLXN0eWxlIiwgImZhaWwiOiAiZWxzZS1zdHlsZSIsCiAgICAiYnJlYWsiOiAiYXRvbSIsICJjb250IjogImF0b20iLCAiY29uc3QiOiAibGV0IiwgInJlc291cmNlIjogImZuIiwKICAgICJsZXQiOiAibGV0IiwgImZuIjogImZuIiwgImZvciI6ICJmb3IiLCAiYWx0IjogImFsdCIsICJpZmFjZSI6ICJpZmFjZSIsCiAgICAiaW1wbCI6ICJpbXBsIiwgInR5cGUiOiAidHlwZSIsICJlbnVtIjogImVudW0iLCAibW9kIjogIm1vZCIsCiAgICAiYXMiOiAib3AiLCAidHJ1ZSI6ICJhdG9tIiwgImZhbHNlIjogImF0b20iLCAiYXNzZXJ0IjogIm9wIiwgImNoZWNrIjogIm9wIiwKICAgICJjbGFpbSI6ICJvcCIsICJuYXRpdmUiOiAiaWdub3JlIiwgInVuc2FmZSI6ICJpZ25vcmUiLCAiaW1wb3J0IjogImVsc2Utc3R5bGUiLAogICAgImV4cG9ydCI6ICJlbHNlLXN0eWxlIiwgImNvcHkiOiAib3AiLCAibG9nIjogIm9wIiwgImxvZ19lcnIiOiAib3AiLAogICAgInVzZSI6ICJvcCIsICJiaW5kIjogIm9wIiwgInNlbGYiOiAiYXRvbSIKICB9OwogIHZhciB0eXBlS2V5d29yZHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkcyA9IHsiZm4iOiAiZm4iLCAiYmxvY2siOiAiZm4iLCAib2JqIjogIm9iaiJ9OwogICAgdmFyIGF0b21zID0gImJvb2wgdWludCBpbnQgaTggaTE2IGkzMiBpNjQgdTggdTE2IHUzMiB1NjQgZmxvYXQgZjMyIGY2NCBzdHIgY2hhciIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gYXRvbXMubGVuZ3RoOyBpIDwgZTsgKytpKSBrZXl3b3Jkc1thdG9tc1tpXV0gPSAiYXRvbSI7CiAgICByZXR1cm4ga2V5d29yZHM7CiAgfSgpOwogIHZhciBvcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fFwuQF0vOwoKICAvLyBUb2tlbml6ZXIKCiAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZhbHVlcyB3aXRob3V0CiAgLy8gY29uc2luZyB1cCB0b25zIG9mIG9iamVjdHMuCiAgdmFyIHRjYXQsIGNvbnRlbnQ7CiAgZnVuY3Rpb24gcih0Yywgc3R5bGUpIHsKICAgIHRjYXQgPSB0YzsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJykgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoY2ggPT0gIiciKSB7CiAgICAgIHRjYXQgPSAiYXRvbSI7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5za2lwVG8oIiciKSkgeyBzdHJlYW0ubmV4dCgpOyByZXR1cm4gInN0cmluZyI7IH0KICAgICAgICBlbHNlIHsgcmV0dXJuICJlcnJvciI7IH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgIHJldHVybiBzdHJlYW0uZWF0KCInIikgPyAic3RyaW5nIiA6ICJlcnJvciI7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIi8iKSkgeyBzdHJlYW0uc2tpcFRvRW5kKCk7IHJldHVybiAiY29tbWVudCI7IH0KICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KDEpOwogICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgfQogICAgaWYgKGNoID09ICIjIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiWyIpKSB7IHRjYXQgPSAib3Blbi1hdHRyIjsgcmV0dXJuIG51bGw7IH0KICAgICAgc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwogICAgICByZXR1cm4gcigibWFjcm8iLCAibWV0YSIpOwogICAgfQogICAgaWYgKGNoID09ICI6IiAmJiBzdHJlYW0ubWF0Y2goIjo8IikpIHsKICAgICAgcmV0dXJuIHIoIm9wIiwgbnVsbCk7CiAgICB9CiAgICBpZiAoY2gubWF0Y2goL1xkLykgfHwgKGNoID09ICIuIiAmJiBzdHJlYW0uZWF0KC9cZC8pKSkgewogICAgICB2YXIgZmxwID0gZmFsc2U7CiAgICAgIGlmICghc3RyZWFtLm1hdGNoKC9eeFtcZGEtZl0rL2kpICYmICFzdHJlYW0ubWF0Y2goL15iWzAxXSsvKSkgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgiLiIpKSB7IGZscCA9IHRydWU7IHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15lWytcLV0/XGQrL2kpKSB7IGZscCA9IHRydWU7IH0KICAgICAgfQogICAgICBpZiAoZmxwKSBzdHJlYW0ubWF0Y2goL15mKD86MzJ8NjQpLyk7CiAgICAgIGVsc2Ugc3RyZWFtLm1hdGNoKC9eW3VpXSg/Ojh8MTZ8MzJ8NjQpLyk7CiAgICAgIHJldHVybiByKCJhdG9tIiwgIm51bWJlciIpOwogICAgfQogICAgaWYgKGNoLm1hdGNoKC9bKClcW1xde306OyxdLykpIHJldHVybiByKGNoLCBudWxsKTsKICAgIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSByZXR1cm4gcigiLT4iLCBudWxsKTsKICAgIGlmIChjaC5tYXRjaChvcGVyYXRvckNoYXIpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcigib3AiLCBudWxsKTsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKICAgIGNvbnRlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgaWYgKHN0cmVhbS5tYXRjaCgvXjo6XHcvKSkgewogICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICByZXR1cm4gcigicHJlZml4IiwgInZhcmlhYmxlLTIiKTsKICAgIH0KICAgIGlmIChzdGF0ZS5rZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjb250ZW50KSkKICAgICAgcmV0dXJuIHIoc3RhdGUua2V5d29yZHNbY29udGVudF0sIGNvbnRlbnQubWF0Y2goL3RydWV8ZmFsc2UvKSA/ICJhdG9tIiA6ICJrZXl3b3JkIik7CiAgICByZXR1cm4gcigibmFtZSIsICJ2YXJpYWJsZSIpOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoLCBlc2NhcGVkID0gZmFsc2U7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAnIicgJiYgIWVzY2FwZWQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICByZXR1cm4gcigiYXRvbSIsICJzdHJpbmciKTsKICAgICAgfQogICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgIH0KICAgIC8vIEhhY2sgdG8gbm90IGNvbmZ1c2UgdGhlIHBhcnNlciB3aGVuIGEgc3RyaW5nIGlzIHNwbGl0IGluCiAgICAvLyBwaWVjZXMuCiAgICByZXR1cm4gcigib3AiLCAic3RyaW5nIik7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoZGVwdGgpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBsYXN0Q2ggPSBudWxsLCBjaDsKICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgIGlmIChjaCA9PSAiLyIgJiYgbGFzdENoID09ICIqIikgewogICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQoZGVwdGggLSAxKTsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY2ggPT0gIioiICYmIGxhc3RDaCA9PSAiLyIpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KGRlcHRoICsgMSk7CiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIGxhc3RDaCA9IGNoOwogICAgICB9CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9OwogIH0KCiAgLy8gUGFyc2VyCgogIHZhciBjeCA9IHtzdGF0ZTogbnVsbCwgc3RyZWFtOiBudWxsLCBtYXJrZWQ6IG51bGwsIGNjOiBudWxsfTsKICBmdW5jdGlvbiBwYXNzKCkgewogICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChhcmd1bWVudHNbaV0pOwogIH0KICBmdW5jdGlvbiBjb250KCkgewogICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHsKICAgIHZhciByZXN1bHQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CiAgICAgIHN0YXRlLmxleGljYWwgPSB7aW5kZW50ZWQ6IHN0YXRlLmluZGVudGVkLCBjb2x1bW46IGN4LnN0cmVhbS5jb2x1bW4oKSwKICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLCBwcmV2OiBzdGF0ZS5sZXhpY2FsLCBpbmZvOiBpbmZvfTsKICAgIH07CiAgICByZXN1bHQubGV4ID0gdHJ1ZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvcGxleCgpIHsKICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgaWYgKHN0YXRlLmxleGljYWwucHJldikgewogICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICIpIikKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7CiAgICAgIHN0YXRlLmxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLnByZXY7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHR5cGVjeCgpIHsgY3guc3RhdGUua2V5d29yZHMgPSB0eXBlS2V5d29yZHM7IH0KICBmdW5jdGlvbiB2YWxjeCgpIHsgY3guc3RhdGUua2V5d29yZHMgPSB2YWxLZXl3b3JkczsgfQogIHBvcGxleC5sZXggPSB0eXBlY3gubGV4ID0gdmFsY3gubGV4ID0gdHJ1ZTsKCiAgZnVuY3Rpb24gY29tbWFzZXAoY29tYiwgZW5kKSB7CiAgICBmdW5jdGlvbiBtb3JlKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udChjb21iLCBtb3JlKTsKICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpOwogICAgICByZXR1cm4gY29udChtb3JlKTsKICAgIH0KICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgcmV0dXJuIHBhc3MoY29tYiwgbW9yZSk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gc3RhdF9vZihjb21iLCB0YWcpIHsKICAgIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiLCB0YWcpLCBjb21iLCBwb3BsZXgsIGJsb2NrKTsKICB9CiAgZnVuY3Rpb24gYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gImxldCIpIHJldHVybiBzdGF0X29mKGxldGRlZjEsICJsZXQiKTsKICAgIGlmICh0eXBlID09ICJmbiIpIHJldHVybiBzdGF0X29mKGZuZGVmKTsKICAgIGlmICh0eXBlID09ICJ0eXBlIikgcmV0dXJuIGNvbnQocHVzaGxleCgic3RhdCIpLCB0eWRlZiwgZW5kc3RhdGVtZW50LCBwb3BsZXgsIGJsb2NrKTsKICAgIGlmICh0eXBlID09ICJlbnVtIikgcmV0dXJuIHN0YXRfb2YoZW51bWRlZik7CiAgICBpZiAodHlwZSA9PSAibW9kIikgcmV0dXJuIHN0YXRfb2YobW9kKTsKICAgIGlmICh0eXBlID09ICJpZmFjZSIpIHJldHVybiBzdGF0X29mKGlmYWNlKTsKICAgIGlmICh0eXBlID09ICJpbXBsIikgcmV0dXJuIHN0YXRfb2YoaW1wbCk7CiAgICBpZiAodHlwZSA9PSAib3Blbi1hdHRyIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBjb21tYXNlcChleHByZXNzaW9uLCAiXSIpLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImlnbm9yZSIgfHwgdHlwZS5tYXRjaCgvW1xdXCk7LF0vKSkgcmV0dXJuIGNvbnQoYmxvY2spOwogICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHByZXNzaW9uLCBwb3BsZXgsIGVuZHN0YXRlbWVudCwgYmxvY2spOwogIH0KICBmdW5jdGlvbiBlbmRzdGF0ZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAiYXRvbSIgfHwgdHlwZSA9PSAibmFtZSIpIHJldHVybiBjb250KG1heWJlb3ApOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGV4cHJicmFjZSwgcG9wbGV4KTsKICAgIGlmICh0eXBlLm1hdGNoKC9bXFtcKF0vKSkgcmV0dXJuIG1hdGNoQnJhY2tldHModHlwZSwgZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZS5tYXRjaCgvW1xdXClcfTssXS8pKSByZXR1cm4gcGFzcygpOwogICAgaWYgKHR5cGUgPT0gImlmLXN0eWxlIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiZWxzZS1zdHlsZSIgfHwgdHlwZSA9PSAib3AiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwYXR0ZXJuLCBtYXliZXR5cGUsIGlub3AsIGV4cHJlc3Npb24sIGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gImFsdCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGFsdGJvZHkpOwogICAgaWYgKHR5cGUgPT0gImZuIikgcmV0dXJuIGNvbnQoZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gIm1hY3JvIikgcmV0dXJuIGNvbnQobWFjcm8pOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVvcCh0eXBlKSB7CiAgICBpZiAoY29udGVudCA9PSAiLiIpIHJldHVybiBjb250KG1heWJlcHJvcCk7CiAgICBpZiAoY29udGVudCA9PSAiOjo8Iil7cmV0dXJuIGNvbnQodHlwYXJhbXMsIG1heWJlb3ApO30KICAgIGlmICh0eXBlID09ICJvcCIgfHwgY29udGVudCA9PSAiOiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gIigiIHx8IHR5cGUgPT0gIlsiKSByZXR1cm4gbWF0Y2hCcmFja2V0cyh0eXBlLCBleHByZXNzaW9uKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIG1heWJlcHJvcCh0eXBlKSB7CiAgICBpZiAoY29udGVudC5tYXRjaCgvXlx3KyQvKSkge2N4Lm1hcmtlZCA9ICJ2YXJpYWJsZSI7IHJldHVybiBjb250KG1heWJlb3ApO30KICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBleHByYnJhY2UodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm9wIikgewogICAgICBpZiAoY29udGVudCA9PSAifCIpIHJldHVybiBjb250KGJsb2NrdmFycywgcG9wbGV4LCBwdXNobGV4KCJ9IiwgImJsb2NrIiksIGJsb2NrKTsKICAgICAgaWYgKGNvbnRlbnQgPT0gInx8IikgcmV0dXJuIGNvbnQocG9wbGV4LCBwdXNobGV4KCJ9IiwgImJsb2NrIiksIGJsb2NrKTsKICAgIH0KICAgIGlmIChjb250ZW50ID09ICJtdXRhYmxlIiB8fCAoY29udGVudC5tYXRjaCgvXlx3KyQvKSAmJiBjeC5zdHJlYW0ucGVlaygpID09ICI6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhY3guc3RyZWFtLm1hdGNoKCI6OiIsIGZhbHNlKSkpCiAgICAgIHJldHVybiBwYXNzKHJlY29yZF9vZihleHByZXNzaW9uKSk7CiAgICByZXR1cm4gcGFzcyhibG9jayk7CiAgfQogIGZ1bmN0aW9uIHJlY29yZF9vZihjb21iKSB7CiAgICBmdW5jdGlvbiBybyh0eXBlKSB7CiAgICAgIGlmIChjb250ZW50ID09ICJtdXRhYmxlIiB8fCBjb250ZW50ID09ICJ3aXRoIikge2N4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQocm8pO30KICAgICAgaWYgKGNvbnRlbnQubWF0Y2goL15cdyokLykpIHtjeC5tYXJrZWQgPSAidmFyaWFibGUiOyByZXR1cm4gY29udChybyk7fQogICAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KGNvbWIsIHJvKTsKICAgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgICByZXR1cm4gY29udChybyk7CiAgICB9CiAgICByZXR1cm4gcm87CiAgfQogIGZ1bmN0aW9uIGJsb2NrdmFycyh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQoYmxvY2t2YXJzKTt9CiAgICBpZiAodHlwZSA9PSAib3AiICYmIGNvbnRlbnQgPT0gInwiKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIGNvbnQoYmxvY2t2YXJzKTsKICB9CgogIGZ1bmN0aW9uIGxldGRlZjEodHlwZSkgewogICAgaWYgKHR5cGUubWF0Y2goL1tcXVwpXH07XS8pKSByZXR1cm4gY29udCgpOwogICAgaWYgKGNvbnRlbnQgPT0gIj0iKSByZXR1cm4gY29udChleHByZXNzaW9uLCBsZXRkZWYyKTsKICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQobGV0ZGVmMSk7CiAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIGxldGRlZjEpOwogIH0KICBmdW5jdGlvbiBsZXRkZWYyKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bXF1cKVx9OyxdLykpIHJldHVybiBwYXNzKGxldGRlZjEpOwogICAgZWxzZSByZXR1cm4gcGFzcyhleHByZXNzaW9uLCBsZXRkZWYyKTsKICB9CiAgZnVuY3Rpb24gbWF5YmV0eXBlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gaW5vcCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIgJiYgY29udGVudCA9PSAiaW4iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udCgpO30KICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGZuZGVmKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICJAIiB8fCBjb250ZW50ID09ICJ+Iikge2N4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQoZm5kZWYpO30KICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChmbmRlZik7fQogICAgaWYgKGNvbnRlbnQgPT0gIjwiKSByZXR1cm4gY29udCh0eXBhcmFtcywgZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcGFzcyhleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBjb21tYXNlcChhcmdkZWYsICIpIiksIHBvcGxleCwgZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gIi0+IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gsIGZuZGVmKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoKTsKICAgIHJldHVybiBjb250KGZuZGVmKTsKICB9CiAgZnVuY3Rpb24gdHlkZWYodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KHR5ZGVmKTt9CiAgICBpZiAoY29udGVudCA9PSAiPCIpIHJldHVybiBjb250KHR5cGFyYW1zLCB0eWRlZik7CiAgICBpZiAoY29udGVudCA9PSAiPSIpIHJldHVybiBjb250KHR5cGVjeCwgcnR5cGUsIHZhbGN4KTsKICAgIHJldHVybiBjb250KHR5ZGVmKTsKICB9CiAgZnVuY3Rpb24gZW51bWRlZih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQoZW51bWRlZik7fQogICAgaWYgKGNvbnRlbnQgPT0gIjwiKSByZXR1cm4gY29udCh0eXBhcmFtcywgZW51bWRlZik7CiAgICBpZiAoY29udGVudCA9PSAiPSIpIHJldHVybiBjb250KHR5cGVjeCwgcnR5cGUsIHZhbGN4LCBlbmRzdGF0ZW1lbnQpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIHR5cGVjeCwgZW51bWJsb2NrLCB2YWxjeCwgcG9wbGV4KTsKICAgIHJldHVybiBjb250KGVudW1kZWYpOwogIH0KICBmdW5jdGlvbiBlbnVtYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGNvbW1hc2VwKHJ0eXBlLCAiKSIpLCBwb3BsZXgsIGVudW1ibG9jayk7CiAgICBpZiAoY29udGVudC5tYXRjaCgvXlx3KyQvKSkgY3gubWFya2VkID0gImRlZiI7CiAgICByZXR1cm4gY29udChlbnVtYmxvY2spOwogIH0KICBmdW5jdGlvbiBtb2QodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KG1vZCk7fQogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gaWZhY2UodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KGlmYWNlKTt9CiAgICBpZiAoY29udGVudCA9PSAiPCIpIHJldHVybiBjb250KHR5cGFyYW1zLCBpZmFjZSk7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ssIHBvcGxleCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KICBmdW5jdGlvbiBpbXBsKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI8IikgcmV0dXJuIGNvbnQodHlwYXJhbXMsIGltcGwpOwogICAgaWYgKGNvbnRlbnQgPT0gIm9mIiB8fCBjb250ZW50ID09ICJmb3IiKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChydHlwZSwgaW1wbCk7fQogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KGltcGwpO30KICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBibG9jaywgcG9wbGV4KTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIHR5cGFyYW1zKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI+IikgcmV0dXJuIGNvbnQoKTsKICAgIGlmIChjb250ZW50ID09ICIsIikgcmV0dXJuIGNvbnQodHlwYXJhbXMpOwogICAgaWYgKGNvbnRlbnQgPT0gIjoiKSByZXR1cm4gY29udChydHlwZSwgdHlwYXJhbXMpOwogICAgcmV0dXJuIHBhc3MocnR5cGUsIHR5cGFyYW1zKTsKICB9CiAgZnVuY3Rpb24gYXJnZGVmKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChhcmdkZWYpO30KICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gcnR5cGUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gInZhcmlhYmxlLTMiOyByZXR1cm4gY29udChydHlwZW1heWJlcGFyYW0pOyB9CiAgICBpZiAoY29udGVudCA9PSAibXV0YWJsZSIpIHtjeC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVybiBjb250KHJ0eXBlKTt9CiAgICBpZiAodHlwZSA9PSAiYXRvbSIpIHJldHVybiBjb250KHJ0eXBlbWF5YmVwYXJhbSk7CiAgICBpZiAodHlwZSA9PSAib3AiIHx8IHR5cGUgPT0gIm9iaiIpIHJldHVybiBjb250KHJ0eXBlKTsKICAgIGlmICh0eXBlID09ICJmbiIpIHJldHVybiBjb250KGZudHlwZSk7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoInsiKSwgcmVjb3JkX29mKHJ0eXBlKSwgcG9wbGV4KTsKICAgIHJldHVybiBtYXRjaEJyYWNrZXRzKHR5cGUsIHJ0eXBlKTsKICB9CiAgZnVuY3Rpb24gcnR5cGVtYXliZXBhcmFtKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI8IikgcmV0dXJuIGNvbnQodHlwYXJhbXMpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gZm50eXBlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKCIpLCBjb21tYXNlcChydHlwZSwgIikiKSwgcG9wbGV4LCBmbnR5cGUpOwogICAgaWYgKHR5cGUgPT0gIi0+IikgcmV0dXJuIGNvbnQocnR5cGUpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gcGF0dGVybih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQocGF0dGVybm1heWJlb3ApO30KICAgIGlmICh0eXBlID09ICJhdG9tIikgcmV0dXJuIGNvbnQocGF0dGVybm1heWJlb3ApOwogICAgaWYgKHR5cGUgPT0gIm9wIikgcmV0dXJuIGNvbnQocGF0dGVybik7CiAgICBpZiAodHlwZS5tYXRjaCgvW1xdXClcfTssXS8pKSByZXR1cm4gcGFzcygpOwogICAgcmV0dXJuIG1hdGNoQnJhY2tldHModHlwZSwgcGF0dGVybik7CiAgfQogIGZ1bmN0aW9uIHBhdHRlcm5tYXliZW9wKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJvcCIgJiYgY29udGVudCA9PSAiLiIpIHJldHVybiBjb250KCk7CiAgICBpZiAoY29udGVudCA9PSAidG8iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChwYXR0ZXJuKTt9CiAgICBlbHNlIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGFsdGJvZHkodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiwgImFsdCIpLCBhbHRibG9jazEsIHBvcGxleCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KICBmdW5jdGlvbiBhbHRibG9jazEodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gInwiKSByZXR1cm4gY29udChhbHRibG9jazEpOwogICAgaWYgKGNvbnRlbnQgPT0gIndoZW4iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNzaW9uLCBhbHRibG9jazIpO30KICAgIGlmICh0eXBlLm1hdGNoKC9bXF1cKTssXS8pKSByZXR1cm4gY29udChhbHRibG9jazEpOwogICAgcmV0dXJuIHBhc3MocGF0dGVybiwgYWx0YmxvY2syKTsKICB9CiAgZnVuY3Rpb24gYWx0YmxvY2syKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIsICJhbHQiKSwgYmxvY2ssIHBvcGxleCwgYWx0YmxvY2sxKTsKICAgIGVsc2UgcmV0dXJuIHBhc3MoYWx0YmxvY2sxKTsKICB9CgogIGZ1bmN0aW9uIG1hY3JvKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bXFtcKFx7XS8pKSByZXR1cm4gbWF0Y2hCcmFja2V0cyh0eXBlLCBleHByZXNzaW9uKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHModHlwZSwgY29tYikgewogICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIGNvbW1hc2VwKGNvbWIsICJdIiksIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgY29tbWFzZXAoY29tYiwgIikiKSwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21tYXNlcChjb21iLCAifSIpLCBwb3BsZXgpOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlKHN0YXRlLCBzdHJlYW0sIHN0eWxlKSB7CiAgICB2YXIgY2MgPSBzdGF0ZS5jYzsKICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KICAgIC8vIChMZXNzIHdhc3RlZnVsIHRoYW4gY29uc2luZyB1cCBhIGh1bmRyZWQgY2xvc3VyZXMgb24gZXZlcnkgY2FsbC4pCiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGJsb2NrOwogICAgICBpZiAoY29tYmluYXRvcih0Y2F0KSkgewogICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpCiAgICAgICAgICBjYy5wb3AoKSgpOwogICAgICAgIHJldHVybiBjeC5tYXJrZWQgfHwgc3R5bGU7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgIGNjOiBbXSwKICAgICAgICBsZXhpY2FsOiB7aW5kZW50ZWQ6IC1pbmRlbnRVbml0LCBjb2x1bW46IDAsIHR5cGU6ICJ0b3AiLCBhbGlnbjogZmFsc2V9LAogICAgICAgIGtleXdvcmRzOiB2YWxLZXl3b3JkcywKICAgICAgICBpbmRlbnRlZDogMAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdGNhdCA9IGNvbnRlbnQgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwogICAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoImFsaWduIikpCiAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7CiAgICAgIGlmICh0Y2F0ID09ICJwcmVmaXgiKSByZXR1cm4gc3R5bGU7CiAgICAgIGlmICghY29udGVudCkgY29udGVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIHJldHVybiBwYXJzZShzdGF0ZSwgc3RyZWFtLCBzdHlsZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbCwKICAgICAgICAgIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsKICAgICAgaWYgKHR5cGUgPT0gInN0YXQiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIGluZGVudFVuaXQ7CiAgICAgIGlmIChsZXhpY2FsLmFsaWduKSByZXR1cm4gbGV4aWNhbC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiAobGV4aWNhbC5pbmZvID09ICJhbHQiID8gYWx0SW5kZW50VW5pdCA6IGluZGVudFVuaXQpKTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnVzdHNyYyIsICJydXN0Iik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNjaGVtZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic2NoZW1lLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogU2NoZW1lIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KOyBTZWUgaWYgdGhlIGlucHV0IHN0YXJ0cyB3aXRoIGEgZ2l2ZW4gc3ltYm9sLgooZGVmaW5lIChtYXRjaC1zeW1ib2wgaW5wdXQgcGF0dGVybikKICAoY29uZCAoKG51bGw/IChyZW1haW4gaW5wdXQpKSAjZikKCSgoZXF2PyAoY2FyIChyZW1haW4gaW5wdXQpKSBwYXR0ZXJuKSAoci1jZHIgaW5wdXQpKQoJKGVsc2UgI2YpKSkKCjsgQWxsb3cgdGhlIGlucHV0IHRvIHN0YXJ0IHdpdGggb25lIG9mIGEgbGlzdCBvZiBwYXR0ZXJucy4KKGRlZmluZSAobWF0Y2gtb3IgaW5wdXQgcGF0dGVybikKICAoY29uZCAoKG51bGw/IHBhdHRlcm4pICNmKQoJKChtYXRjaC1wYXR0ZXJuIGlucHV0IChjYXIgcGF0dGVybikpKQoJKGVsc2UgKG1hdGNoLW9yIGlucHV0IChjZHIgcGF0dGVybikpKSkpCgo7IEFsbG93IGEgc2VxdWVuY2Ugb2YgcGF0dGVybnMuCihkZWZpbmUgKG1hdGNoLXNlcSBpbnB1dCBwYXR0ZXJuKQogIChpZiAobnVsbD8gcGF0dGVybikKICAgICAgaW5wdXQKICAgICAgKGxldCAoKG1hdGNoIChtYXRjaC1wYXR0ZXJuIGlucHV0IChjYXIgcGF0dGVybikpKSkKCShpZiBtYXRjaCAobWF0Y2gtc2VxIG1hdGNoIChjZHIgcGF0dGVybikpICNmKSkpKQoKOyBNYXRjaCB3aXRoIHRoZSBwYXR0ZXJuIGJ1dCBubyBwcm9ibGVtIGlmIGl0IGRvZXMgbm90IG1hdGNoLgooZGVmaW5lIChtYXRjaC1vcHQgaW5wdXQgcGF0dGVybikKICAobGV0ICgobWF0Y2ggKG1hdGNoLXBhdHRlcm4gaW5wdXQgKGNhciBwYXR0ZXJuKSkpKQogICAgKGlmIG1hdGNoIG1hdGNoIGlucHV0KSkpCgo7IE1hdGNoIGFueXRoaW5nIChvdGhlciB0aGFuICcoKSksIHVudGlsIHBhdHRlcm4gaXMgZm91bmQuIFRoZSByYXRoZXIKOyBjbHVtc3kgZm9ybSBvZiByZXF1aXJpbmcgYW4gZW5kaW5nIHBhdHRlcm4gaXMgbmVlZGVkIHRvIGRlY2lkZSB3aGVyZQo7IHRoZSBlbmQgb2YgdGhlIG1hdGNoIGlzLiBJZiBub25lIGlzIGdpdmVuLCB0aGlzIHdpbGwgbWF0Y2ggdGhlIHJlc3QKOyBvZiB0aGUgc2VudGVuY2UuCihkZWZpbmUgKG1hdGNoLWFueSBpbnB1dCBwYXR0ZXJuKQogIChjb25kICgobnVsbD8gKHJlbWFpbiBpbnB1dCkpICNmKQoJKChudWxsPyBwYXR0ZXJuKSAoZi1jb25zIChyZW1haW4gaW5wdXQpIChjbGVhci1yZW1haW4gaW5wdXQpKSkKCShlbHNlCgkgKGxldCAoKGFjY3VtLWFueSAoY29sbGVjdG9yKSkpCgkgICAoZGVmaW5lIChtYXRjaC1wYXR0ZXJuLWFueSBpbnB1dCBwYXR0ZXJuKQoJICAgICAoY29uZCAoKG51bGw/IChyZW1haW4gaW5wdXQpKSAjZikKCQkgICAoZWxzZSAoYWNjdW0tYW55IChjYXIgKHJlbWFpbiBpbnB1dCkpKQoJCQkgKGNvbmQgKChtYXRjaC1wYXR0ZXJuIChyLWNkciBpbnB1dCkgcGF0dGVybikpCgkJCSAgICAgICAoZWxzZSAobWF0Y2gtcGF0dGVybi1hbnkgKHItY2RyIGlucHV0KSBwYXR0ZXJuKSkpKSkpCgkgICAobGV0ICgocmV0dmFsIChtYXRjaC1wYXR0ZXJuLWFueSBpbnB1dCAoY2FyIHBhdHRlcm4pKSkpCgkgICAgIChpZiByZXR2YWwKCQkgKGYtY29ucyAoYWNjdW0tYW55KSByZXR2YWwpCgkJICNmKSkpKSkpCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHt9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtc2NoZW1lPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/scheme.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEF1dGhvcjogS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4KICovCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic2NoZW1lIiwgZnVuY3Rpb24gKGNvbmZpZywgbW9kZSkgewogICAgdmFyIEJVSUxUSU4gPSAiYnVpbHRpbiIsIENPTU1FTlQgPSAiY29tbWVudCIsIFNUUklORyA9ICJzdHJpbmciLAogICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEPSJrZXl3b3JkIjsKICAgIHZhciBJTkRFTlRfV09SRF9TS0lQID0gMiwgS0VZV09SRFNfU0tJUCA9IDE7CgogICAgZnVuY3Rpb24gbWFrZUtleXdvcmRzKHN0cikgewogICAgICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTsKICAgICAgICByZXR1cm4gb2JqOwogICAgfQoKICAgIHZhciBrZXl3b3JkcyA9IG1ha2VLZXl3b3JkcygizrsgY2FzZS1sYW1iZGEgY2FsbC9jYyBjbGFzcyBkZWZpbmUtY2xhc3MgZXhpdC1oYW5kbGVyIGZpZWxkIGltcG9ydCBpbmhlcml0IGluaXQtZmllbGQgaW50ZXJmYWNlIGxldCotdmFsdWVzIGxldC12YWx1ZXMgbGV0L2VjIG1peGluIG9wdC1sYW1iZGEgb3ZlcnJpZGUgcHJvdGVjdCBwcm92aWRlIHB1YmxpYyByZW5hbWUgcmVxdWlyZSByZXF1aXJlLWZvci1zeW50YXggc3ludGF4IHN5bnRheC1jYXNlIHN5bnRheC1lcnJvciB1bml0L3NpZyB1bmxlc3Mgd2hlbiB3aXRoLXN5bnRheCBhbmQgYmVnaW4gY2FsbC13aXRoLWN1cnJlbnQtY29udGludWF0aW9uIGNhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSBjYXNlIGNvbmQgZGVmaW5lIGRlZmluZS1zeW50YXggZGVsYXkgZG8gZHluYW1pYy13aW5kIGVsc2UgZm9yLWVhY2ggaWYgbGFtYmRhIGxldCBsZXQqIGxldC1zeW50YXggbGV0cmVjIGxldHJlYy1zeW50YXggbWFwIG9yIHN5bnRheC1ydWxlcyBhYnMgYWNvcyBhbmdsZSBhcHBlbmQgYXBwbHkgYXNpbiBhc3NvYyBhc3NxIGFzc3YgYXRhbiBib29sZWFuPyBjYWFyIGNhZHIgY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlIGNhbGwtd2l0aC12YWx1ZXMgY2FyIGNkZGRhciBjZGRkZHIgY2RyIGNlaWxpbmcgY2hhci0+aW50ZWdlciBjaGFyLWFscGhhYmV0aWM/IGNoYXItY2k8PT8gY2hhci1jaTw/IGNoYXItY2k9PyBjaGFyLWNpPj0/IGNoYXItY2k+PyBjaGFyLWRvd25jYXNlIGNoYXItbG93ZXItY2FzZT8gY2hhci1udW1lcmljPyBjaGFyLXJlYWR5PyBjaGFyLXVwY2FzZSBjaGFyLXVwcGVyLWNhc2U/IGNoYXItd2hpdGVzcGFjZT8gY2hhcjw9PyBjaGFyPD8gY2hhcj0/IGNoYXI+PT8gY2hhcj4/IGNoYXI/IGNsb3NlLWlucHV0LXBvcnQgY2xvc2Utb3V0cHV0LXBvcnQgY29tcGxleD8gY29ucyBjb3MgY3VycmVudC1pbnB1dC1wb3J0IGN1cnJlbnQtb3V0cHV0LXBvcnQgZGVub21pbmF0b3IgZGlzcGxheSBlb2Ytb2JqZWN0PyBlcT8gZXF1YWw/IGVxdj8gZXZhbCBldmVuPyBleGFjdC0+aW5leGFjdCBleGFjdD8gZXhwIGV4cHQgI2YgZmxvb3IgZm9yY2UgZ2NkIGltYWctcGFydCBpbmV4YWN0LT5leGFjdCBpbmV4YWN0PyBpbnB1dC1wb3J0PyBpbnRlZ2VyLT5jaGFyIGludGVnZXI/IGludGVyYWN0aW9uLWVudmlyb25tZW50IGxjbSBsZW5ndGggbGlzdCBsaXN0LT5zdHJpbmcgbGlzdC0+dmVjdG9yIGxpc3QtcmVmIGxpc3QtdGFpbCBsaXN0PyBsb2FkIGxvZyBtYWduaXR1ZGUgbWFrZS1wb2xhciBtYWtlLXJlY3Rhbmd1bGFyIG1ha2Utc3RyaW5nIG1ha2UtdmVjdG9yIG1heCBtZW1iZXIgbWVtcSBtZW12IG1pbiBtb2R1bG8gbmVnYXRpdmU/IG5ld2xpbmUgbm90IG51bGwtZW52aXJvbm1lbnQgbnVsbD8gbnVtYmVyLT5zdHJpbmcgbnVtYmVyPyBudW1lcmF0b3Igb2RkPyBvcGVuLWlucHV0LWZpbGUgb3Blbi1vdXRwdXQtZmlsZSBvdXRwdXQtcG9ydD8gcGFpcj8gcGVlay1jaGFyIHBvcnQ/IHBvc2l0aXZlPyBwcm9jZWR1cmU/IHF1YXNpcXVvdGUgcXVvdGUgcXVvdGllbnQgcmF0aW9uYWw/IHJhdGlvbmFsaXplIHJlYWQgcmVhZC1jaGFyIHJlYWwtcGFydCByZWFsPyByZW1haW5kZXIgcmV2ZXJzZSByb3VuZCBzY2hlbWUtcmVwb3J0LWVudmlyb25tZW50IHNldCEgc2V0LWNhciEgc2V0LWNkciEgc2luIHNxcnQgc3RyaW5nIHN0cmluZy0+bGlzdCBzdHJpbmctPm51bWJlciBzdHJpbmctPnN5bWJvbCBzdHJpbmctYXBwZW5kIHN0cmluZy1jaTw9PyBzdHJpbmctY2k8PyBzdHJpbmctY2k9PyBzdHJpbmctY2k+PT8gc3RyaW5nLWNpPj8gc3RyaW5nLWNvcHkgc3RyaW5nLWZpbGwhIHN0cmluZy1sZW5ndGggc3RyaW5nLXJlZiBzdHJpbmctc2V0ISBzdHJpbmc8PT8gc3RyaW5nPD8gc3RyaW5nPT8gc3RyaW5nPj0/IHN0cmluZz4/IHN0cmluZz8gc3Vic3RyaW5nIHN5bWJvbC0+c3RyaW5nIHN5bWJvbD8gI3QgdGFuIHRyYW5zY3JpcHQtb2ZmIHRyYW5zY3JpcHQtb24gdHJ1bmNhdGUgdmFsdWVzIHZlY3RvciB2ZWN0b3ItPmxpc3QgdmVjdG9yLWZpbGwhIHZlY3Rvci1sZW5ndGggdmVjdG9yLXJlZiB2ZWN0b3Itc2V0ISB3aXRoLWlucHV0LWZyb20tZmlsZSB3aXRoLW91dHB1dC10by1maWxlIHdyaXRlIHdyaXRlLWNoYXIgemVybz8iKTsKICAgIHZhciBpbmRlbnRLZXlzID0gbWFrZUtleXdvcmRzKCJkZWZpbmUgbGV0IGxldHJlYyBsZXQqIGxhbWJkYSIpOwoKICAgIGZ1bmN0aW9uIHN0YXRlU3RhY2soaW5kZW50LCB0eXBlLCBwcmV2KSB7IC8vIHJlcHJlc2VudHMgYSBzdGF0ZSBzdGFjayBvYmplY3QKICAgICAgICB0aGlzLmluZGVudCA9IGluZGVudDsKICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIHRoaXMucHJldiA9IHByZXY7CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnQsIHR5cGUpIHsKICAgICAgICBzdGF0ZS5pbmRlbnRTdGFjayA9IG5ldyBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgc3RhdGUuaW5kZW50U3RhY2spOwogICAgfQoKICAgIGZ1bmN0aW9uIHBvcFN0YWNrKHN0YXRlKSB7CiAgICAgICAgc3RhdGUuaW5kZW50U3RhY2sgPSBzdGF0ZS5pbmRlbnRTdGFjay5wcmV2OwogICAgfQoKICAgIHZhciBiaW5hcnlNYXRjaGVyID0gbmV3IFJlZ0V4cCgvXig/OlstK11pfFstK11bMDFdKyMqKD86XC9bMDFdKyMqKT9pfFstK10/WzAxXSsjKig/OlwvWzAxXSsjKik/QFstK10/WzAxXSsjKig/OlwvWzAxXSsjKik/fFstK10/WzAxXSsjKig/OlwvWzAxXSsjKik/Wy0rXSg/OlswMV0rIyooPzpcL1swMV0rIyopPyk/aXxbLStdP1swMV0rIyooPzpcL1swMV0rIyopPykoPz1bKClcczsiXXwkKS9pKTsKICAgIHZhciBvY3RhbE1hdGNoZXIgPSBuZXcgUmVnRXhwKC9eKD86Wy0rXWl8Wy0rXVswLTddKyMqKD86XC9bMC03XSsjKik/aXxbLStdP1swLTddKyMqKD86XC9bMC03XSsjKik/QFstK10/WzAtN10rIyooPzpcL1swLTddKyMqKT98Wy0rXT9bMC03XSsjKig/OlwvWzAtN10rIyopP1stK10oPzpbMC03XSsjKig/OlwvWzAtN10rIyopPyk/aXxbLStdP1swLTddKyMqKD86XC9bMC03XSsjKik/KSg/PVsoKVxzOyJdfCQpL2kpOwogICAgdmFyIGhleE1hdGNoZXIgPSBuZXcgUmVnRXhwKC9eKD86Wy0rXWl8Wy0rXVtcZGEtZl0rIyooPzpcL1tcZGEtZl0rIyopP2l8Wy0rXT9bXGRhLWZdKyMqKD86XC9bXGRhLWZdKyMqKT9AWy0rXT9bXGRhLWZdKyMqKD86XC9bXGRhLWZdKyMqKT98Wy0rXT9bXGRhLWZdKyMqKD86XC9bXGRhLWZdKyMqKT9bLStdKD86W1xkYS1mXSsjKig/OlwvW1xkYS1mXSsjKik/KT9pfFstK10/W1xkYS1mXSsjKig/OlwvW1xkYS1mXSsjKik/KSg/PVsoKVxzOyJdfCQpL2kpOwogICAgdmFyIGRlY2ltYWxNYXRjaGVyID0gbmV3IFJlZ0V4cCgvXig/OlstK11pfFstK10oPzooPzooPzpcZCsjK1wuPyMqfFxkK1wuXGQqIyp8XC5cZCsjKnxcZCspKD86W2VzZmRsXVstK10/XGQrKT8pfFxkKyMqXC9cZCsjKilpfFstK10/KD86KD86KD86XGQrIytcLj8jKnxcZCtcLlxkKiMqfFwuXGQrIyp8XGQrKSg/Oltlc2ZkbF1bLStdP1xkKyk/KXxcZCsjKlwvXGQrIyopQFstK10/KD86KD86KD86XGQrIytcLj8jKnxcZCtcLlxkKiMqfFwuXGQrIyp8XGQrKSg/Oltlc2ZkbF1bLStdP1xkKyk/KXxcZCsjKlwvXGQrIyopfFstK10/KD86KD86KD86XGQrIytcLj8jKnxcZCtcLlxkKiMqfFwuXGQrIyp8XGQrKSg/Oltlc2ZkbF1bLStdP1xkKyk/KXxcZCsjKlwvXGQrIyopWy0rXSg/Oig/Oig/OlxkKyMrXC4/Iyp8XGQrXC5cZCojKnxcLlxkKyMqfFxkKykoPzpbZXNmZGxdWy0rXT9cZCspPyl8XGQrIypcL1xkKyMqKT9pfCg/Oig/Oig/OlxkKyMrXC4/Iyp8XGQrXC5cZCojKnxcLlxkKyMqfFxkKykoPzpbZXNmZGxdWy0rXT9cZCspPyl8XGQrIypcL1xkKyMqKSkoPz1bKClcczsiXXwkKS9pKTsKCiAgICBmdW5jdGlvbiBpc0JpbmFyeU51bWJlciAoc3RyZWFtKSB7CiAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChiaW5hcnlNYXRjaGVyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc09jdGFsTnVtYmVyIChzdHJlYW0pIHsKICAgICAgICByZXR1cm4gc3RyZWFtLm1hdGNoKG9jdGFsTWF0Y2hlcik7CiAgICB9CgogICAgZnVuY3Rpb24gaXNEZWNpbWFsTnVtYmVyIChzdHJlYW0sIGJhY2t1cCkgewogICAgICAgIGlmIChiYWNrdXAgPT09IHRydWUpIHsKICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChkZWNpbWFsTWF0Y2hlcik7CiAgICB9CgogICAgZnVuY3Rpb24gaXNIZXhOdW1iZXIgKHN0cmVhbSkgewogICAgICAgIHJldHVybiBzdHJlYW0ubWF0Y2goaGV4TWF0Y2hlcik7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBpbmRlbnRTdGFjazogbnVsbCwKICAgICAgICAgICAgICAgIGluZGVudGF0aW9uOiAwLAogICAgICAgICAgICAgICAgbW9kZTogZmFsc2UsCiAgICAgICAgICAgICAgICBzRXhwckNvbW1lbnQ6IGZhbHNlCiAgICAgICAgICAgIH07CiAgICAgICAgfSwKCiAgICAgICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRlbnRTdGFjayA9PSBudWxsICYmIHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICAgICAgLy8gdXBkYXRlIGluZGVudGF0aW9uLCBidXQgb25seSBpZiBpbmRlbnRTdGFjayBpcyBlbXB0eQogICAgICAgICAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gc2tpcCBzcGFjZXMKICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmV0dXJuVHlwZSA9IG51bGw7CgogICAgICAgICAgICBzd2l0Y2goc3RhdGUubW9kZSl7CiAgICAgICAgICAgICAgICBjYXNlICJzdHJpbmciOiAvLyBtdWx0aS1saW5lIHN0cmluZyBwYXJzaW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCwgZXNjYXBlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gIlwiIiAmJiAhZXNjYXBlZCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBTVFJJTkc7IC8vIGNvbnRpbnVlIG9uIGluIHNjaGVtZS1zdHJpbmcgbW9kZQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiY29tbWVudCI6IC8vIGNvbW1lbnQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQsIG1heWJlRW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSAiIyIgJiYgbWF5YmVFbmQpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtYXliZUVuZCA9IChuZXh0ID09ICJ8Iik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicy1leHByLWNvbW1lbnQiOiAvLyBzLWV4cHIgY29tbWVudGluZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKHN0cmVhbS5wZWVrKCkgPT0gIigiIHx8IHN0cmVhbS5wZWVrKCkgPT0gIlsiKXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0dWFsbHkgc3RhcnQgc2NoZW1lIHMtZXhwciBjb21tZW50aW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc0V4cHJDb21tZW50ID0gMDsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IHdlIGp1c3QgY29tbWVudCB0aGUgZW50aXJlIG9mIHRoZSBuZXh0IHRva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14vc10vKTsgLy8gZWF0IG5vbiBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGRlZmF1bHQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICJcIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gU1RSSU5HOwoKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICInIikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcjJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgifCIpKSB7ICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aS1saW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSAiY29tbWVudCI7IC8vIHRvZ2dsZSB0byBjb21tZW50IG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoL1t0Zl0vaSkpIHsgICAgICAgICAgICAvLyAjdC8jZiAoYXRvbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBBVE9NOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJzsnKSkgeyAgICAgICAgICAgICAgICAvLyBTLUV4cHIgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzLWV4cHItY29tbWVudCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1UZXN0ID0gbnVsbCwgaGFzRXhhY3RuZXNzID0gZmFsc2UsIGhhc1JhZGl4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0KC9bZWldL2kpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXhhY3RuZXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTsgICAgICAgLy8gbXVzdCBiZSByYWRpeCBzcGVjaWZpZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14jYi9pKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVRlc3QgPSBpc0JpbmFyeU51bWJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eI28vaSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1UZXN0ID0gaXNPY3RhbE51bWJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eI3gvaSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1UZXN0ID0gaXNIZXhOdW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXiNkL2kpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVGVzdCA9IGlzRGVjaW1hbE51bWJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eWy0rMC05Ll0vLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNSYWRpeCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVRlc3QgPSBpc0RlY2ltYWxOdW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZS1jb25zdW1lIHRoZSBpbnRpYWwgIyBpZiBhbGwgbWF0Y2hlcyBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc0V4YWN0bmVzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoJyMnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1UZXN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmFkaXggJiYgIWhhc0V4YWN0bmVzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zdW1lIG9wdGlvbmFsIGV4YWN0bmVzcyBhZnRlciByYWRpeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubWF0Y2goL14jW2VpXS9pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVRlc3Qoc3RyZWFtKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL15bLSswLTkuXS8udGVzdChjaCkgJiYgaXNEZWNpbWFsTnVtYmVyKHN0cmVhbSwgdHJ1ZSkpIHsgLy8gbWF0Y2ggbm9uLXByZWZpeGVkIG51bWJlciwgbXVzdCBiZSBkZWNpbWFsCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBOVU1CRVI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAiOyIpIHsgLy8gY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7IC8vIHJlc3Qgb2YgdGhlIGxpbmUgaXMgYSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIigiIHx8IGNoID09ICJbIikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5V29yZCA9ICcnOyB2YXIgaW5kZW50VGVtcCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAgIEVpdGhlcgogICAgICAgICAgICAgICAgICAgICAgICAoaW5kZW50LXdvcmQgLi4KICAgICAgICAgICAgICAgICAgICAgICAgKG5vbi1pbmRlbnQtd29yZCAuLgogICAgICAgICAgICAgICAgICAgICAgICAoO3NvbWV0aGluZyBlbHNlLCBicmFja2V0LCBldGMuCiAgICAgICAgICAgICAgICAgICAgICAgICovCgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGxldHRlciA9IHN0cmVhbS5lYXQoL1teXHNcKFxbXDtcKVxdXS8pKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlXb3JkICs9IGxldHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleVdvcmQubGVuZ3RoID4gMCAmJiBpbmRlbnRLZXlzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGtleVdvcmQpKSB7IC8vIGluZGVudC13b3JkCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnRUZW1wICsgSU5ERU5UX1dPUkRfU0tJUCwgY2gpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBub24taW5kZW50IHdvcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNvbnRpbnVlIGVhdGluZyB0aGUgc3BhY2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0U3BhY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgfHwgc3RyZWFtLnBlZWsoKSA9PSAiOyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RoaW5nIHNpZ25pZmljYW50IGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVzdGFydCBpbmRlbnRhdGlvbiAxIHNwYWNlIGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnRUZW1wICsgMSwgY2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2soc3RhdGUsIGluZGVudFRlbXAgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aCwgY2gpOyAvLyBlbHNlIHdlIG1hdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcChzdHJlYW0uY3VycmVudCgpLmxlbmd0aCAtIDEpOyAvLyB1bmRvIGFsbCB0aGUgZWF0aW5nCgogICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3RhdGUuc0V4cHJDb21tZW50ID09ICJudW1iZXIiKSBzdGF0ZS5zRXhwckNvbW1lbnQrKzsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCUkFDS0VUOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIikiIHx8IGNoID09ICJdIikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlJBQ0tFVDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrICE9IG51bGwgJiYgc3RhdGUuaW5kZW50U3RhY2sudHlwZSA9PSAoY2ggPT0gIikiID8gIigiIDogIlsiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wU3RhY2soc3RhdGUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBzdGF0ZS5zRXhwckNvbW1lbnQgPT0gIm51bWJlciIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKC0tc3RhdGUuc0V4cHJDb21tZW50ID09IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsgLy8gZmluYWwgY2xvc2luZyBicmFja2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNFeHByQ29tbWVudCA9IGZhbHNlOyAvLyB0dXJuIG9mZiBzLWV4cHIgY29tbWVudGluZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9cLSEkJSYqK1wuXC86PD0+P0BcXn5dLyk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMgJiYga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCVUlMVElOOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuVHlwZSA9ICJ2YXJpYWJsZSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHN0YXRlLnNFeHByQ29tbWVudCA9PSAibnVtYmVyIikgPyBDT01NRU5UIDogcmV0dXJuVHlwZTsKICAgICAgICB9LAoKICAgICAgICBpbmRlbnQ6IGZ1bmN0aW9uIChzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRlbnRTdGFjayA9PSBudWxsKSByZXR1cm4gc3RhdGUuaW5kZW50YXRpb247CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5pbmRlbnRTdGFjay5pbmRlbnQ7CiAgICAgICAgfQogICAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zY2hlbWUiLCAic2NoZW1lIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/shell/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/shell/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxtZXRhIGNoYXJzZXQ9dXRmLTg+Cjx0aXRsZT5Db2RlTWlycm9yOiBTaGVsbCBtb2RlPC90aXRsZT4KCjxsaW5rIHJlbD1zdHlsZXNoZWV0IGhyZWY9Li4vLi4vbGliL2NvZGVtaXJyb3IuY3NzPgo8bGluayByZWw9c3R5bGVzaGVldCBocmVmPS4uLy4uL2RvYy9kb2NzLmNzcz4KCjxzdHlsZSB0eXBlPXRleHQvY3NzPgogIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9Cjwvc3R5bGU+Cgo8c2NyaXB0IHNyYz0uLi8uLi9saWIvY29kZW1pcnJvci5qcz48L3NjcmlwdD4KPHNjcmlwdCBzcmM9c2hlbGwuanM+PC9zY3JpcHQ+Cgo8aDE+Q29kZU1pcnJvcjogU2hlbGwgbW9kZTwvaDE+Cgo8dGV4dGFyZWEgaWQ9Y29kZT4KIyEvYmluL2Jhc2gKCiMgY2xvbmUgdGhlIHJlcG9zaXRvcnkKZ2l0IGNsb25lIGh0dHA6Ly9naXRodWIuY29tL2dhcmRlbi90cmVlCgojIGdlbmVyYXRlIEhUVFBTIGNyZWRlbnRpYWxzCmNkIHRyZWUKb3BlbnNzbCBnZW5yc2EgLWFlczI1NiAtb3V0IGh0dHBzLmtleSAxMDI0Cm9wZW5zc2wgcmVxIC1uZXcgLW5vZGVzIC1rZXkgaHR0cHMua2V5IC1vdXQgaHR0cHMuY3NyCm9wZW5zc2wgeDUwOSAtcmVxIC1kYXlzIDM2NSAtaW4gaHR0cHMuY3NyIC1zaWdua2V5IGh0dHBzLmtleSAtb3V0IGh0dHBzLmNydApjcCBodHRwcy5rZXl7LC5vcmlnfQpvcGVuc3NsIHJzYSAtaW4gaHR0cHMua2V5Lm9yaWcgLW91dCBodHRwcy5rZXkKCiMgc3RhcnQgdGhlIHNlcnZlciBpbiBIVFRQUyBtb2RlCmNkIHdlYgpzdWRvIG5vZGUgLi4vc2VydmVyLmpzIDQ0MyAneWVzJyAmZ3Q7Jmd0OyAuLi9ub2RlLmxvZyAmYW1wOwoKIyBoZXJlIGlzIGhvdyB0byBzdG9wIHRoZSBzZXJ2ZXIKZm9yIHBpZCBpbiBgcHMgYXV4IHwgZ3JlcCAnbm9kZSAuLi9zZXJ2ZXIuanMnIHwgYXdrICd7cHJpbnQgJDJ9J2AgOyBkbwogIHN1ZG8ga2lsbCAtOSAkcGlkIDImZ3Q7IC9kZXYvbnVsbApkb25lCgpleGl0IDA8L3RleHRhcmVhPgoKPHNjcmlwdD4KICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvZGUnKSwgewogICAgbW9kZTogJ3NoZWxsJywKICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogIH0pOwo8L3NjcmlwdD4KCjxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtc2g8L2NvZGU+LjwvcD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/shell/shell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdzaGVsbCcsIGZ1bmN0aW9uKGNvbmZpZykgewoKICB2YXIgYXRvbXMgPSBbJ3RydWUnLCdmYWxzZSddLAogICAgICBrZXl3b3JkcyA9IFsnaWYnLCd0aGVuJywnZG8nLCdlbHNlJywnZWxpZicsJ3doaWxlJywndW50aWwnLCdmb3InLCdpbicsJ2VzYWMnLCdmaScsJ2ZpbicsJ2ZpbCcsJ2RvbmUnLCdleGl0Jywnc2V0JywndW5zZXQnLCdleHBvcnQnLCdmdW5jdGlvbiddLAogICAgICBjb21tYW5kcyA9IFsnYWInLCdhd2snLCdiYXNoJywnYmVlcCcsJ2NhdCcsJ2NjJywnY2QnLCdjaG93bicsJ2NobW9kJywnY2hyb290JywnY2xlYXInLCdjcCcsJ2N1cmwnLCdjdXQnLCdkaWZmJywnZWNobycsJ2ZpbmQnLCdnYXdrJywnZ2NjJywnZ2V0JywnZ2l0JywnZ3JlcCcsJ2tpbGwnLCdraWxsYWxsJywnbHMnLCdtYWtlJywnbWtkaXInLCdvcGVuc3NsJywnbXYnLCduYycsJ25vZGUnLCducG0nLCdwaW5nJywncHMnLCdyZXN0YXJ0Jywncm0nLCdybWRpcicsJ3NlZCcsJ3NlcnZpY2UnLCdzaCcsJ3Nob3B0Jywnc2hyZWQnLCdzb3VyY2UnLCdzb3J0Jywnc2xlZXAnLCdzc2gnLCdzdGFydCcsJ3N0b3AnLCdzdScsJ3N1ZG8nLCd0ZWUnLCd0ZWxuZXQnLCd0b3AnLCd0b3VjaCcsJ3ZpJywndmltJywnd2FsbCcsJ3djJywnd2dldCcsJ3dobycsJ3dyaXRlJywneWVzJywnenNoJ107CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CgogICAgdmFyIHNvbCA9IHN0cmVhbS5zb2woKTsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgaWYgKGNoID09PSAnXCcnIHx8IGNoID09PSAnIicgfHwgY2ggPT09ICdgJykgewogICAgICBzdGF0ZS50b2tlbnMudW5zaGlmdCh0b2tlblN0cmluZyhjaCkpOwogICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoY2ggPT09ICcjJykgewogICAgICBpZiAoc29sICYmIHN0cmVhbS5lYXQoJyEnKSkgewogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gJ21ldGEnOyAvLyAnY29tbWVudCc/CiAgICAgIH0KICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgfQogICAgaWYgKGNoID09PSAnJCcpIHsKICAgICAgc3RhdGUudG9rZW5zLnVuc2hpZnQodG9rZW5Eb2xsYXIpOwogICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0gJz0nKSB7CiAgICAgIHJldHVybiAnb3BlcmF0b3InOwogICAgfQogICAgaWYgKGNoID09PSAnLScpIHsKICAgICAgc3RyZWFtLmVhdCgnLScpOwogICAgICBzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CiAgICAgIHJldHVybiAnYXR0cmlidXRlJzsKICAgIH0KICAgIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsKICAgICAgaWYoIS9cdy8udGVzdChzdHJlYW0ucGVlaygpKSkgewogICAgICAgIHJldHVybiAnbnVtYmVyJzsKICAgICAgfQogICAgfQogICAgc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJz0nICYmIC9cdysvLnRlc3QoY3VyKSkgcmV0dXJuICdkZWYnOwogICAgaWYgKGF0b21zLmluZGV4T2YoY3VyKSAhPT0gLTEpIHJldHVybiAnYXRvbSc7CiAgICBpZiAoY29tbWFuZHMuaW5kZXhPZihjdXIpICE9PSAtMSkgcmV0dXJuICdidWlsdGluJzsKICAgIGlmIChrZXl3b3Jkcy5pbmRleE9mKGN1cikgIT09IC0xKSByZXR1cm4gJ2tleXdvcmQnOwogICAgcmV0dXJuICd3b3JkJzsKICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgbmV4dCwgZW5kID0gZmFsc2UsIGVzY2FwZWQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09PSBxdW90ZSAmJiAhZXNjYXBlZCkgewogICAgICAgICAgZW5kID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAobmV4dCA9PT0gJyQnICYmICFlc2NhcGVkICYmIHF1b3RlICE9PSAnXCcnKSB7CiAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTsKICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICBzdGF0ZS50b2tlbnMudW5zaGlmdCh0b2tlbkRvbGxhcik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT09ICdcXCc7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhZXNjYXBlZCkgewogICAgICAgIHN0YXRlLnRva2Vucy5zaGlmdCgpOwogICAgICB9CiAgICAgIHJldHVybiAocXVvdGUgPT09ICdgJyB8fCBxdW90ZSA9PT0gJyknID8gJ3F1b3RlJyA6ICdzdHJpbmcnKTsKICAgIH07CiAgfTsKCiAgdmFyIHRva2VuRG9sbGFyID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0YXRlLnRva2Vucy5sZW5ndGggPiAxKSBzdHJlYW0uZWF0KCckJyk7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpLCBodW5ncnkgPSAvXHcvOwogICAgaWYgKGNoID09PSAneycpIGh1bmdyeSA9IC9bXn1dLzsKICAgIGlmIChjaCA9PT0gJygnKSB7CiAgICAgIHN0YXRlLnRva2Vuc1swXSA9IHRva2VuU3RyaW5nKCcpJyk7CiAgICAgIHJldHVybiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICghL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaHVuZ3J5KTsKICAgICAgc3RyZWFtLmVhdCgnfScpOwogICAgfQogICAgc3RhdGUudG9rZW5zLnNoaWZ0KCk7CiAgICByZXR1cm4gJ2RlZic7CiAgfTsKCiAgZnVuY3Rpb24gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSkgewogICAgcmV0dXJuIChzdGF0ZS50b2tlbnNbMF0gfHwgdG9rZW5CYXNlKSAoc3RyZWFtLCBzdGF0ZSk7CiAgfTsKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge3JldHVybiB7dG9rZW5zOltdfX0sCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgfTsKfSk7CiAgCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LXNoJywgJ3NoZWxsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNtYWxsdGFsayBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic21hbGx0YWxrLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlcjogMnB4IHNvbGlkICNkZWU7IGJvcmRlci1yaWdodC13aWR0aDogMTBweDt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7Ym9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiAjZGVlO30KICAgICAgLkNvZGVNaXJyb3ItZ3V0dGVyIHByZSB7Y29sb3I6IHdoaXRlOyBmb250LXdlaWdodDogYm9sZDt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBTbWFsbHRhbGsgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgoiIAogICAgVGhpcyBpcyBhIHRlc3Qgb2YgdGhlIFNtYWxsdGFsayBjb2RlCiIKU2Vhc2lkZS5XQUNvbXBvbmVudCBzdWJjbGFzczogI015Q291bnRlciBbCiAgICB8IGNvdW50IHwKICAgIE15Q291bnRlciBjbGFzcyAmZ3Q7Jmd0OyBjYW5CZVJvb3QgWyBedHJ1ZSBdCgogICAgaW5pdGlhbGl6ZSBbCiAgICAgICAgc3VwZXIgaW5pdGlhbGl6ZS4KICAgICAgICBjb3VudCA6PSAwLgogICAgXQogICAgc3RhdGVzIFsgXnsgc2VsZiB9IF0KICAgIHJlbmRlckNvbnRlbnRPbjogaHRtbCBbCiAgICAgICAgaHRtbCBoZWFkaW5nOiBjb3VudC4KICAgICAgICBodG1sIGFuY2hvciBjYWxsYmFjazogWyBjb3VudCA6PSBjb3VudCArIDEgXTsgd2l0aDogJysrJy4KICAgICAgICBodG1sIHNwYWNlLgogICAgICAgIGh0bWwgYW5jaG9yIGNhbGxiYWNrOiBbIGNvdW50IDo9IGNvdW50IC0gMSBdOyB3aXRoOiAnLS0nLgogICAgXQpdCgpNeUNvdW50ZXIgcmVnaXN0ZXJBc0FwcGxpY2F0aW9uOiAnbXljb3VudGVyJwo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1zdHNyYyIsCiAgICAgICAgaW5kZW50VW5pdDogNAogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlNpbXBsZSBTbWFsbHRhbGsgbW9kZS48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1zdHNyYzwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/smalltalk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdzbWFsbHRhbGsnLCBmdW5jdGlvbihjb25maWcsIG1vZGVDb25maWcpIHsKCgl2YXIgc3BlY2lhbENoYXJzID0gL1srXC0vXFwqfjw+PUAlfCY/IS46O15dLzsKCXZhciBrZXl3b3JkcyA9IC90cnVlfGZhbHNlfG5pbHxzZWxmfHN1cGVyfHRoaXNDb250ZXh0LzsKCgl2YXIgQ29udGV4dCA9IGZ1bmN0aW9uKHRva2VuaXplciwgcGFyZW50KSB7CgkJdGhpcy5uZXh0ID0gdG9rZW5pemVyOwoJCXRoaXMucGFyZW50ID0gcGFyZW50OwoJfTsKCgl2YXIgVG9rZW4gPSBmdW5jdGlvbihuYW1lLCBjb250ZXh0LCBlb3MpIHsKCQl0aGlzLm5hbWUgPSBuYW1lOwoJCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7CgkJdGhpcy5lb3MgPSBlb3M7Cgl9OwoKCXZhciBTdGF0ZSA9IGZ1bmN0aW9uKCkgewoJCXRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KG5leHQsIG51bGwpOwoJCXRoaXMuZXhwZWN0VmFyaWFibGUgPSB0cnVlOwoJCXRoaXMuaW5kZW50YXRpb24gPSAwOwoJCXRoaXMudXNlckluZGVudGF0aW9uRGVsdGEgPSAwOwoJfTsKCglTdGF0ZS5wcm90b3R5cGUudXNlckluZGVudCA9IGZ1bmN0aW9uKGluZGVudGF0aW9uKSB7CgkJdGhpcy51c2VySW5kZW50YXRpb25EZWx0YSA9IGluZGVudGF0aW9uID4gMCA/IChpbmRlbnRhdGlvbiAvIGNvbmZpZy5pbmRlbnRVbml0IC0gdGhpcy5pbmRlbnRhdGlvbikgOiAwOwoJfTsKCgl2YXIgbmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSwgY29udGV4dCwgc3RhdGUpIHsKCQl2YXIgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgY29udGV4dCwgZmFsc2UpOwoJCXZhciBhQ2hhciA9IHN0cmVhbS5uZXh0KCk7CgoJCWlmIChhQ2hhciA9PT0gJyInKSB7CgkJCXRva2VuID0gbmV4dENvbW1lbnQoc3RyZWFtLCBuZXcgQ29udGV4dChuZXh0Q29tbWVudCwgY29udGV4dCkpOwoKCQl9IGVsc2UgaWYgKGFDaGFyID09PSAnXCcnKSB7CgkJCXRva2VuID0gbmV4dFN0cmluZyhzdHJlYW0sIG5ldyBDb250ZXh0KG5leHRTdHJpbmcsIGNvbnRleHQpKTsKCgkJfSBlbHNlIGlmIChhQ2hhciA9PT0gJyMnKSB7CgkJCXN0cmVhbS5lYXRXaGlsZSgvW14gLl0vKTsKCQkJdG9rZW4ubmFtZSA9ICdzdHJpbmctMic7CgoJCX0gZWxzZSBpZiAoYUNoYXIgPT09ICckJykgewoJCQlzdHJlYW0uZWF0V2hpbGUoL1teIF0vKTsKCQkJdG9rZW4ubmFtZSA9ICdzdHJpbmctMic7CgoJCX0gZWxzZSBpZiAoYUNoYXIgPT09ICd8JyAmJiBzdGF0ZS5leHBlY3RWYXJpYWJsZSkgewoJCQl0b2tlbi5jb250ZXh0ID0gbmV3IENvbnRleHQobmV4dFRlbXBvcmFyaWVzLCBjb250ZXh0KTsKCgkJfSBlbHNlIGlmICgvW1xbXF17fSgpXS8udGVzdChhQ2hhcikpIHsKCQkJdG9rZW4ubmFtZSA9ICdicmFja2V0JzsKCQkJdG9rZW4uZW9zID0gL1tcW3soXS8udGVzdChhQ2hhcik7CgoJCQlpZiAoYUNoYXIgPT09ICdbJykgewoJCQkJc3RhdGUuaW5kZW50YXRpb24rKzsKCQkJfSBlbHNlIGlmIChhQ2hhciA9PT0gJ10nKSB7CgkJCQlzdGF0ZS5pbmRlbnRhdGlvbiA9IE1hdGgubWF4KDAsIHN0YXRlLmluZGVudGF0aW9uIC0gMSk7CgkJCX0KCgkJfSBlbHNlIGlmIChzcGVjaWFsQ2hhcnMudGVzdChhQ2hhcikpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKHNwZWNpYWxDaGFycyk7CgkJCXRva2VuLm5hbWUgPSAnb3BlcmF0b3InOwoJCQl0b2tlbi5lb3MgPSBhQ2hhciAhPT0gJzsnOyAvLyA7IGNhc2NhZGVkIG1lc3NhZ2UgZXhwcmVzc2lvbgoKCQl9IGVsc2UgaWYgKC9cZC8udGVzdChhQ2hhcikpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF0vKTsKCQkJdG9rZW4ubmFtZSA9ICdudW1iZXInCgoJCX0gZWxzZSBpZiAoL1tcd19dLy50ZXN0KGFDaGFyKSkgewoJCQlzdHJlYW0uZWF0V2hpbGUoL1tcd1xkX10vKTsKCQkJdG9rZW4ubmFtZSA9IHN0YXRlLmV4cGVjdFZhcmlhYmxlID8gKGtleXdvcmRzLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkgPyAna2V5d29yZCcgOiAndmFyaWFibGUnKSA6IG51bGw7CgoJCX0gZWxzZSB7CgkJCXRva2VuLmVvcyA9IHN0YXRlLmV4cGVjdFZhcmlhYmxlOwoJCX0KCgkJcmV0dXJuIHRva2VuOwoJfTsKCgl2YXIgbmV4dENvbW1lbnQgPSBmdW5jdGlvbihzdHJlYW0sIGNvbnRleHQpIHsKCQlzdHJlYW0uZWF0V2hpbGUoL1teIl0vKTsKCQlyZXR1cm4gbmV3IFRva2VuKCdjb21tZW50Jywgc3RyZWFtLmVhdCgnIicpID8gY29udGV4dC5wYXJlbnQgOiBjb250ZXh0LCB0cnVlKTsKCX07CgoJdmFyIG5leHRTdHJpbmcgPSBmdW5jdGlvbihzdHJlYW0sIGNvbnRleHQpIHsKCQlzdHJlYW0uZWF0V2hpbGUoL1teJ10vKTsKCQlyZXR1cm4gbmV3IFRva2VuKCdzdHJpbmcnLCBzdHJlYW0uZWF0KCdcJycpID8gY29udGV4dC5wYXJlbnQgOiBjb250ZXh0LCBmYWxzZSk7Cgl9OwoKCXZhciBuZXh0VGVtcG9yYXJpZXMgPSBmdW5jdGlvbihzdHJlYW0sIGNvbnRleHQsIHN0YXRlKSB7CgkJdmFyIHRva2VuID0gbmV3IFRva2VuKG51bGwsIGNvbnRleHQsIGZhbHNlKTsKCQl2YXIgYUNoYXIgPSBzdHJlYW0ubmV4dCgpOwoKCQlpZiAoYUNoYXIgPT09ICd8JykgewoJCQl0b2tlbi5jb250ZXh0ID0gY29udGV4dC5wYXJlbnQ7CgkJCXRva2VuLmVvcyA9IHRydWU7CgoJCX0gZWxzZSB7CgkJCXN0cmVhbS5lYXRXaGlsZSgvW158XS8pOwoJCQl0b2tlbi5uYW1lID0gJ3ZhcmlhYmxlJzsKCQl9CgoJCXJldHVybiB0b2tlbjsKCX0KCglyZXR1cm4gewoJCXN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gbmV3IFN0YXRlOwoJCX0sCgoJCXRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CgkJCXN0YXRlLnVzZXJJbmRlbnQoc3RyZWFtLmluZGVudGF0aW9uKCkpOwoKCQkJaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CgkJCQlyZXR1cm4gbnVsbDsKCQkJfQoKCQkJdmFyIHRva2VuID0gc3RhdGUuY29udGV4dC5uZXh0KHN0cmVhbSwgc3RhdGUuY29udGV4dCwgc3RhdGUpOwoJCQlzdGF0ZS5jb250ZXh0ID0gdG9rZW4uY29udGV4dDsKCQkJc3RhdGUuZXhwZWN0VmFyaWFibGUgPSB0b2tlbi5lb3M7CgoJCQlzdGF0ZS5sYXN0VG9rZW4gPSB0b2tlbjsKCQkJcmV0dXJuIHRva2VuLm5hbWU7CgkJfSwKCgkJYmxhbmtMaW5lOiBmdW5jdGlvbihzdGF0ZSkgewoJCQlzdGF0ZS51c2VySW5kZW50KDApOwoJCX0sCgoJCWluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewoJCQl2YXIgaSA9IHN0YXRlLmNvbnRleHQubmV4dCA9PT0gbmV4dCAmJiB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSA9PT0gJ10nID8gLTEgOiBzdGF0ZS51c2VySW5kZW50YXRpb25EZWx0YTsKCQkJcmV0dXJuIChzdGF0ZS5pbmRlbnRhdGlvbiArIGkpICogY29uZmlnLmluZGVudFVuaXQ7CgkJfSwKCgkJZWxlY3RyaWNDaGFyczogJ10nCgl9OwoKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1zdHNyYycsIHtuYW1lOiAnc21hbGx0YWxrJ30pOw==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smarty/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/smarty/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNtYXJ0eSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic21hcnR5LmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBTbWFydHkgbW9kZTwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4Ke2V4dGVuZHMgZmlsZT0icGFyZW50LnRwbCJ9CntpbmNsdWRlIGZpbGU9InRlbXBsYXRlLnRwbCJ9Cgp7KiBzb21lIGV4YW1wbGUgU21hcnR5IGNvbnRlbnQgKn0Ke2lmIGlzc2V0KCRuYW1lKSAmJiAkbmFtZSA9PSAnQmxvZyd9CiAgVGhpcyBpcyBhIHskdmFyfS4KICB7JGludGVnZXIgPSA0NTF9LCB7JGFycmF5W10gPSAiYSJ9LCB7JHN0cmluZ3ZhciA9ICJzdHJpbmcifQogIHthc3NpZ24gdmFyPSdib2InIHZhbHVlPSR2YXIucHJvcH0Ke2Vsc2VpZiAkbmFtZSA9PSAkZm9vfQogIHtmdW5jdGlvbiBuYW1lPW1lbnUgbGV2ZWw9MH0KICAgIHtmb3JlYWNoICRkYXRhIGFzICRlbnRyeX0KICAgICAge2lmIGlzX2FycmF5KCRlbnRyeSl9CiAgICAgICAgLSB7JGVudHJ5QGtleX0KICAgICAgICB7bWVudSBkYXRhPSRlbnRyeSBsZXZlbD0kbGV2ZWwrMX0KICAgICAge2Vsc2V9CiAgICAgICAgeyRlbnRyeX0KICAgICAgey9pZn0KICAgIHsvZm9yZWFjaH0KICB7L2Z1bmN0aW9ufQp7L2lmfTwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbW9kZTogInNtYXJ0eSIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8YnIgLz4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUyIiBuYW1lPSJjb2RlMiI+CnstLWV4dGVuZHMgZmlsZT0icGFyZW50LnRwbCItLX0Key0taW5jbHVkZSBmaWxlPSJ0ZW1wbGF0ZS50cGwiLS19Cgp7LS0qIHNvbWUgZXhhbXBsZSBTbWFydHkgY29udGVudCAqLS19CnstLWlmIGlzc2V0KCRuYW1lKSAmJiAkbmFtZSA9PSAnQmxvZyctLX0KICBUaGlzIGlzIGEgey0tJHZhci0tfS4KICB7LS0kaW50ZWdlciA9IDQ1MS0tfSwgey0tJGFycmF5W10gPSAiYSItLX0sIHstLSRzdHJpbmd2YXIgPSAic3RyaW5nIi0tfQogIHstLWFzc2lnbiB2YXI9J2JvYicgdmFsdWU9JHZhci5wcm9wLS19CnstLWVsc2VpZiAkbmFtZSA9PSAkZm9vLS19CiAgey0tZnVuY3Rpb24gbmFtZT1tZW51IGxldmVsPTAtLX0KICAgIHstLWZvcmVhY2ggJGRhdGEgYXMgJGVudHJ5LS19CiAgICAgIHstLWlmIGlzX2FycmF5KCRlbnRyeSktLX0KICAgICAgICAtIHstLSRlbnRyeUBrZXktLX0KICAgICAgICB7LS1tZW51IGRhdGE9JGVudHJ5IGxldmVsPSRsZXZlbCsxLS19CiAgICAgIHstLWVsc2UtLX0KICAgICAgICB7LS0kZW50cnktLX0KICAgICAgey0tL2lmLS19CiAgICB7LS0vZm9yZWFjaC0tfQogIHstLS9mdW5jdGlvbi0tfQp7LS0vaWYtLX08L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUyIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiB7CiAgICAgICAgICBuYW1lOiAic21hcnR5IiwKICAgICAgICAgIGxlZnREZWxpbWl0ZXI6ICJ7LS0iLAogICAgICAgICAgcmlnaHREZWxpbWl0ZXI6ICItLX0iCiAgICAgICAgfQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPkEgcGxhaW4gdGV4dC9TbWFydHkgbW9kZSB3aGljaCBhbGxvd3MgZm9yIGN1c3RvbSBkZWxpbWl0ZXIgdGFncyAoZGVmYXVsdHMgdG8gPGI+ezwvYj4gYW5kIDxiPn08L2I+KS48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1zbWFydHk8L2NvZGU+PC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smarty/smarty.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzbWFydHkiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBrZXlGdW5jcyA9IFsiZGVidWciLCAiZXh0ZW5kcyIsICJmdW5jdGlvbiIsICJpbmNsdWRlIiwgImxpdGVyYWwiXTsKICB2YXIgbGFzdDsKICB2YXIgcmVncyA9IHsKICAgIG9wZXJhdG9yQ2hhcnM6IC9bK1wtKiYlPTw+IT9dLywKICAgIHZhbGlkSWRlbnRpZmllcjogL1thLXpBLVowLTlcX10vLAogICAgc3RyaW5nQ2hhcjogL1tcJ1wiXS8KICB9CiAgdmFyIGxlZnREZWxpbSA9ICh0eXBlb2YgY29uZmlnLm1vZGUubGVmdERlbGltaXRlciAhPSAndW5kZWZpbmVkJykgPyBjb25maWcubW9kZS5sZWZ0RGVsaW1pdGVyIDogInsiOwogIHZhciByaWdodERlbGltID0gKHR5cGVvZiBjb25maWcubW9kZS5yaWdodERlbGltaXRlciAhPSAndW5kZWZpbmVkJykgPyBjb25maWcubW9kZS5yaWdodERlbGltaXRlciA6ICJ9IjsKICBmdW5jdGlvbiByZXQoc3R5bGUsIGxzdCkgeyBsYXN0ID0gbHN0OyByZXR1cm4gc3R5bGU7IH0KCgogIGZ1bmN0aW9uIHRva2VuaXplcihzdHJlYW0sIHN0YXRlKSB7CiAgICBmdW5jdGlvbiBjaGFpbihwYXJzZXIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CgogICAgaWYgKHN0cmVhbS5tYXRjaChsZWZ0RGVsaW0sIHRydWUpKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICByZXR1cm4gY2hhaW4oaW5CbG9jaygiY29tbWVudCIsICIqIiArIHJpZ2h0RGVsaW0pKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluU21hcnR5OwogICAgICAgIHJldHVybiAidGFnIjsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIEknZCBsaWtlIHRvIGRvIGFuIGVhdFdoaWxlKCkgaGVyZSwgYnV0IEkgY2FuJ3QgZ2V0IGl0IHRvIGVhdCBvbmx5IHVwIHRvIHRoZSByaWdodERlbGltIHN0cmluZy9jaGFyCiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5TbWFydHkoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5tYXRjaChyaWdodERlbGltLCB0cnVlKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuaXplcjsKICAgICAgcmV0dXJuIHJldCgidGFnIiwgbnVsbCk7CiAgICB9CgogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiJCIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKHJlZ3MudmFsaWRJZGVudGlmaWVyKTsKICAgICAgcmV0dXJuIHJldCgidmFyaWFibGUtMiIsICJ2YXJpYWJsZSIpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIi4iKSB7CiAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgInByb3BlcnR5Iik7CiAgICB9CiAgICBlbHNlIGlmIChyZWdzLnN0cmluZ0NoYXIudGVzdChjaCkpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgIH0KICAgIGVsc2UgaWYgKHJlZ3Mub3BlcmF0b3JDaGFycy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy5vcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICJbIiB8fCBjaCA9PSAiXSIpIHsKICAgICAgcmV0dXJuIHJldCgiYnJhY2tldCIsICJicmFja2V0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsKICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGlmIChzdGF0ZS5sYXN0ID09ICJ2YXJpYWJsZSIpIHsKICAgICAgICBpZiAoY2ggPT0gIkAiKSB7CiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpOwogICAgICAgICAgcmV0dXJuIHJldCgicHJvcGVydHkiLCAicHJvcGVydHkiKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gInwiKSB7CiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpOwogICAgICAgICAgcmV0dXJuIHJldCgicXVhbGlmaWVyIiwgIm1vZGlmaWVyIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLmxhc3QgPT0gIndoaXRlc3BhY2UiKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHJlZ3MudmFsaWRJZGVudGlmaWVyKTsKICAgICAgICByZXR1cm4gcmV0KCJhdHRyaWJ1dGUiLCAibW9kaWZpZXIiKTsKICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZS5sYXN0ID09ICJwcm9wZXJ0eSIpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpOwogICAgICAgIHJldHVybiByZXQoInByb3BlcnR5IiwgbnVsbCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoL1xzLy50ZXN0KGNoKSkgewogICAgICAgIGxhc3QgPSAid2hpdGVzcGFjZSI7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIHZhciBzdHIgPSAiIjsKICAgICAgaWYgKGNoICE9ICIvIikgewogICAgCXN0ciArPSBjaDsKICAgICAgfQogICAgICB2YXIgYyA9ICIiOwogICAgICB3aGlsZSAoKGMgPSBzdHJlYW0uZWF0KHJlZ3MudmFsaWRJZGVudGlmaWVyKSkpIHsKICAgICAgICBzdHIgKz0gYzsKICAgICAgfQogICAgICB2YXIgaSwgajsKICAgICAgZm9yIChpPTAsIGo9a2V5RnVuY3MubGVuZ3RoOyBpPGo7IGkrKykgewogICAgICAgIGlmIChrZXlGdW5jc1tpXSA9PSBzdHIpIHsKICAgICAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAia2V5d29yZCIpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoL1xzLy50ZXN0KGNoKSkgewogICAgCXJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiByZXQoInRhZyIsICJ0YWciKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGluQXR0cmlidXRlKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubmV4dCgpID09IHF1b3RlKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluU21hcnR5OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBpbkJsb2NrKHN0eWxlLCB0ZXJtaW5hdG9yKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2godGVybWluYXRvcikpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5pemVyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsgdG9rZW5pemU6IHRva2VuaXplciwgbW9kZTogInNtYXJ0eSIsIGxhc3Q6IG51bGwgfTsKICAgIH0sCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RhdGUubGFzdCA9IGxhc3Q7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCiAgICBlbGVjdHJpY0NoYXJzOiAiIgogIH0KfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zbWFydHkiLCAic21hcnR5Iik7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNQQVJRTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic3BhcnFsLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFNQQVJRTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClBSRUZJWCBhOiAmbHQ7aHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9hbm5vdGF0aW9uLW5zIz4KUFJFRklYIGRjOiAmbHQ7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8+ClBSRUZJWCBmb2FmOiAmbHQ7aHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS8+CgojIENvbW1lbnQhCgpTRUxFQ1QgP2dpdmVuID9mYW1pbHkKV0hFUkUgewogID9hbm5vdCBhOmFubm90YXRlcyAmbHQ7aHR0cDovL3d3dy53My5vcmcvVFIvcmRmLXNwYXJxbC1xdWVyeS8+IC4KICA/YW5ub3QgZGM6Y3JlYXRvciA/YyAuCiAgT1BUSU9OQUwgez9jIGZvYWY6Z2l2ZW4gP2dpdmVuIDsKICAgICAgICAgICAgICAgZm9hZjpmYW1pbHkgP2ZhbWlseSB9IC4KICBGSUxURVIgaXNCbGFuayg/YykKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtc3BhcnFsLXF1ZXJ5IiwKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtc3BhcnFsLXF1ZXJ5PC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/sparql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcGFycWwiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBjdXJQdW5jOwoKICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7CiAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIgKyB3b3Jkcy5qb2luKCJ8IikgKyAiKSQiLCAiaSIpOwogIH0KICB2YXIgb3BzID0gd29yZFJlZ2V4cChbInN0ciIsICJsYW5nIiwgImxhbmdtYXRjaGVzIiwgImRhdGF0eXBlIiwgImJvdW5kIiwgInNhbWV0ZXJtIiwgImlzaXJpIiwgImlzdXJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgImlzYmxhbmsiLCAiaXNsaXRlcmFsIiwgInVuaW9uIiwgImEiXSk7CiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChbImJhc2UiLCAicHJlZml4IiwgInNlbGVjdCIsICJkaXN0aW5jdCIsICJyZWR1Y2VkIiwgImNvbnN0cnVjdCIsICJkZXNjcmliZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzayIsICJmcm9tIiwgIm5hbWVkIiwgIndoZXJlIiwgIm9yZGVyIiwgImxpbWl0IiwgIm9mZnNldCIsICJmaWx0ZXIiLCAib3B0aW9uYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFwaCIsICJieSIsICJhc2MiLCAiZGVzYyJdKTsKICB2YXIgb3BlcmF0b3JDaGFycyA9IC9bKitcLTw+PSZ8XS87CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgY3VyUHVuYyA9IG51bGw7CiAgICBpZiAoY2ggPT0gIiQiIHx8IGNoID09ICI/IikgewogICAgICBzdHJlYW0ubWF0Y2goL15bXHdcZF0qLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiPCIgJiYgIXN0cmVhbS5tYXRjaCgvXltcc1x1MDBhMD1dLywgZmFsc2UpKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXlteXHNcdTAwYTA+XSo+Py8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIlwiIiB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkxpdGVyYWwoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBlbHNlIGlmICgvW3t9XChcKSxcLjtcW1xdXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZFwuX1wtXS8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW19cd1xkXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9cLV0vKTsKICAgICAgICByZXR1cm4gImF0b20iOwogICAgICB9CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwgdHlwZTsKICAgICAgaWYgKG9wcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBlbHNlIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuTGl0ZXJhbChxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHR5cGUsIGNvbCkgewogICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCBpbmRlbnQ6IHN0YXRlLmluZGVudCwgY29sOiBjb2wsIHR5cGU6IHR5cGV9OwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDsKICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgICBpbmRlbnQ6IDAsCiAgICAgICAgICAgICAgY29sOiAwfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCkgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgaWYgKHN0eWxlICE9ICJjb21tZW50IiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gInBhdHRlcm4iKSB7CiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsICIpIiwgc3RyZWFtLmNvbHVtbigpKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCAiXSIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgIn0iLCBzdHJlYW0uY29sdW1uKCkpOwogICAgICBlbHNlIGlmICgvW1xdXH1cKV0vLnRlc3QoY3VyUHVuYykpIHsKICAgICAgICB3aGlsZSAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBjdXJQdW5jID09IHN0YXRlLmNvbnRleHQudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiLiIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoL2F0b218c3RyaW5nfHZhcmlhYmxlLy50ZXN0KHN0eWxlKSAmJiBzdGF0ZS5jb250ZXh0KSB7CiAgICAgICAgaWYgKC9bXH1cXV0vLnRlc3Qoc3RhdGUuY29udGV4dC50eXBlKSkKICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCAicGF0dGVybiIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09ICJwYXR0ZXJuIiAmJiAhc3RhdGUuY29udGV4dC5hbGlnbikgewogICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoL1tcXVx9XS8udGVzdChmaXJzdENoYXIpKQogICAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQudHlwZSA9PSAicGF0dGVybiIpIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CgogICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTsKICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKQogICAgICAgIHJldHVybiBjb250ZXh0LmNvbDsKICAgICAgZWxzZSBpZiAoY29udGV4dC5hbGlnbikKICAgICAgICByZXR1cm4gY29udGV4dC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb250ZXh0LmluZGVudCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LXNwYXJxbC1xdWVyeSIsICJzcGFycWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHNUZVggbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InN0ZXguanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4O308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBzVGVYIG1vZGU8L2gxPgogICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClxiZWdpbnttb2R1bGV9W2lkPWJidC1zaXplXQpcaW1wb3J0bW9kdWxlW2JhbGFuY2VkLWJpbmFyeS10cmVlc117YmFsYW5jZWQtYmluYXJ5LXRyZWVzfQpcaW1wb3J0bW9kdWxlW1xLV0FSQ3NsaWRlc3tkbWF0aC9lbi9jYXJkaW5hbGl0eX1de2NhcmRpbmFsaXR5fQoKXGJlZ2lue2ZyYW1lfQogIFxmcmFtZXRpdGxle1NpemUgTGVtbWEgZm9yIEJhbGFuY2VkIFRyZWVzfQogIFxiZWdpbntpdGVtaXplfQogIFxpdGVtCiAgICBcYmVnaW57YXNzZXJ0aW9ufVtpZD1zaXplLWxlbW1hLHR5cGU9bGVtbWFdIAogICAgTGV0ICRHPVx0dXB7VixFfSQgYmUgYSBcdGVybXJlZltjZD1iaW5hcnktdHJlZXNde2JhbGFuY2VkIGJpbmFyeSB0cmVlfSAKICAgIG9mIFx0ZXJtcmVmW2NkPWdyYXBoLWRlcHRoLG5hbWU9dmVydGV4LWRlcHRoXXtkZXB0aH0kbj5pJCwgdGhlbiB0aGUgc2V0CiAgICAgJFxkZWZlcXtcbGl2YXJ7Vn1pfXtcc2V0c3R7XGluc2V0e3Z9e1Z9fXtcZ2RlcHRoe3Z9ID0gaX19JCBvZgogICAgXHRlcm1yZWZbY2Q9Z3JhcGhzLWludHJvLG5hbWU9bm9kZV17bm9kZXN9IGF0IAogICAgXHRlcm1yZWZbY2Q9Z3JhcGgtZGVwdGgsbmFtZT12ZXJ0ZXgtZGVwdGhde2RlcHRofSAkaSQgaGFzCiAgICBcdGVybXJlZltjZD1jYXJkaW5hbGl0eSxuYW1lPWNhcmRpbmFsaXR5XXtjYXJkaW5hbGl0eX0gJFxwb3dlcjJpJC4KICAgXGVuZHthc3NlcnRpb259CiAgXGl0ZW0KICAgIFxiZWdpbntzcHJvb2Z9W2lkPXNpemUtbGVtbWEtcGYscHJvb2ZlbmQ9LGZvcj1zaXplLWxlbW1hXXt2aWEgaW5kdWN0aW9uIG92ZXIgdGhlIGRlcHRoICRpJC59CiAgICAgIFxiZWdpbntzcGZjYXNlc317V2UgaGF2ZSB0byBjb25zaWRlciB0d28gY2FzZXN9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPTAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICAgdGhlbiAkXGxpdmFye1Z9aT1cc2V0e1xsaXZhcnt2fXJ9JCwgd2hlcmUgJFxsaXZhcnt2fXIkIGlzIHRoZSByb290LCBzbwogICAgICAgICAgICAkXGVxe1xjYXJke1xsaXZhcntWfTB9LFxjYXJke1xzZXR7XGxpdmFye3Z9cn19LDEsXHBvd2VyMjB9JC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICBcZW5ke3NwZmNhc2V9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPjAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICB0aGVuICRcbGl2YXJ7Vn17aS0xfSQgY29udGFpbnMgJFxwb3dlcjJ7aS0xfSQgdmVydGV4ZXMgCiAgICAgICAgICAgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieUlIXShJSClcZW5ke2p1c3RpZmljYXRpb259CiAgICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgICBcYmVnaW57c3Bmc3RlcH0KICAgICAgICAgICBCeSB0aGUgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieURlZl1kZWZpbml0aW9uIG9mIGEgYmluYXJ5CiAgICAgICAgICAgICAgdHJlZVxlbmR7anVzdGlmaWNhdGlvbn0sIGVhY2ggJFxpbnNldHt2fXtcbGl2YXJ7Vn17aS0xfX0kIGlzIGEgbGVhZiBvciBoYXMKICAgICAgICAgICAgdHdvIGNoaWxkcmVuIHRoYXQgYXJlIGF0IGRlcHRoICRpJC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfQogICAgICAgICAgIEFzICRHJCBpcyBcdGVybXJlZltjZD1iYWxhbmNlZC1iaW5hcnktdHJlZXMsbmFtZT1iYWxhbmNlZC1iaW5hcnktdHJlZV17YmFsYW5jZWR9IGFuZCAkXGdkZXB0aHtHfT1uPmkkLCAkXGxpdmFye1Z9e2ktMX0kIGNhbm5vdCBjb250YWluCiAgICAgICAgICAgIGxlYXZlcy4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfVt0eXBlPWNvbmNsdXNpb25dCiAgICAgICAgICAgVGh1cyAkXGVxe1xjYXJke1xsaXZhcntWfWl9LHtcYXRpbWVzW2Nkb3RdezIsXGNhcmR7XGxpdmFye1Z9e2ktMX19fX0se1xhdGltZXNbY2RvdF17MixccG93ZXIye2ktMX19fSxccG93ZXIyaX0kLgogICAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICAgIFxlbmR7c3BmY2FzZX0KICAgICAgXGVuZHtzcGZjYXNlc30KICAgIFxlbmR7c3Byb29mfQogIFxpdGVtIAogICAgXGJlZ2lue2Fzc2VydGlvbn1baWQ9ZmJidCx0eXBlPWNvcm9sbGFyeV0JCiAgICAgIEEgZnVsbHkgYmFsYW5jZWQgdHJlZSBvZiBkZXB0aCAkZCQgaGFzICRccG93ZXIye2QrMX0tMSQgbm9kZXMuCiAgICBcZW5ke2Fzc2VydGlvbn0KICBcaXRlbQogICAgICBcYmVnaW57c3Byb29mfVtmb3I9ZmJidCxpZD1mYmJ0LXBmXXt9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBMZXQgJFxkZWZlcXtHfXtcdHVwe1YsRX19JCBiZSBhIGZ1bGx5IGJhbGFuY2VkIHRyZWUKICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBUaGVuICRcY2FyZHtWfT1cU3VtZnJvbXRve2l9MWR7XHBvd2VyMml9PSBccG93ZXIye2QrMX0tMSQuCiAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICBcZW5ke3Nwcm9vZn0KICAgIFxlbmR7aXRlbWl6ZX0KICBcZW5ke2ZyYW1lfQpcYmVnaW57bm90ZX0KICBcYmVnaW57b210ZXh0fVt0eXBlPWNvbmNsdXNpb24sZm9yPWJpbmFyeS10cmVlXQogICAgVGhpcyBzaG93cyB0aGF0IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyBncm93IGluIGJyZWFkdGggdmVyeSBxdWlja2x5LCBhIGNvbnNlcXVlbmNlIG9mCiAgICB0aGlzIGlzIHRoYXQgdGhleSBhcmUgdmVyeSBzaGFsbG93IChhbmQgdGhpcyBjb21wdXRlIHZlcnkgZmFzdCksIHdoaWNoIGlzIHRoZSBlc3NlbmNlIG9mCiAgICB0aGUgbmV4dCByZXN1bHQuCiAgXGVuZHtvbXRleHR9ClxlbmR7bm90ZX0KXGVuZHttb2R1bGV9CgolJSUgTG9jYWwgVmFyaWFibGVzOiAKJSUlIG1vZGU6IExhVGVYCiUlJSBUZVgtbWFzdGVyOiAiYWxsIgolJSUgRW5kOiBcZW5ke2RvY3VtZW50fQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXN0ZXg8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/stex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogQXV0aG9yOiBDb25zdGFudGluIEp1Y292c2NoaSAoYy5qdWNvdnNjaGlAamFjb2JzLXVuaXZlcnNpdHkuZGUpCiAqIExpY2VuY2U6IE1JVAogKi8KCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3RleCIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSAKeyAgICAKICAgIGZ1bmN0aW9uIHB1c2hDb21tYW5kKHN0YXRlLCBjb21tYW5kKSB7CglzdGF0ZS5jbWRTdGF0ZS5wdXNoKGNvbW1hbmQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBlZWtDb21tYW5kKHN0YXRlKSB7IAoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKQoJICAgIHJldHVybiBzdGF0ZS5jbWRTdGF0ZVtzdGF0ZS5jbWRTdGF0ZS5sZW5ndGgtMV07CgllbHNlCgkgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gcG9wQ29tbWFuZChzdGF0ZSkgewoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKSB7CgkgICAgdmFyIHBsdWcgPSBzdGF0ZS5jbWRTdGF0ZS5wb3AoKTsKCSAgICBwbHVnLmNsb3NlQnJhY2tldCgpOwoJfQkgICAgCiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlNb3N0UG93ZXJmdWwoc3RhdGUpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jbWRTdGF0ZTsKICAgICAgZm9yICh2YXIgaSA9IGNvbnRleHQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCSAgdmFyIHBsdWcgPSBjb250ZXh0W2ldOwoJICBpZiAocGx1Zy5uYW1lPT0iREVGQVVMVCIpCgkgICAgICBjb250aW51ZTsKCSAgcmV0dXJuIHBsdWcuc3R5bGVJZGVudGlmaWVyKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkUGx1Z2luUGF0dGVybihwbHVnaW5OYW1lLCBjbWRTdHlsZSwgYnJhY2tldHMsIHN0eWxlcykgewoJcmV0dXJuIGZ1bmN0aW9uICgpIHsKCSAgICB0aGlzLm5hbWU9cGx1Z2luTmFtZTsKCSAgICB0aGlzLmJyYWNrZXRObyA9IDA7CgkgICAgdGhpcy5zdHlsZT1jbWRTdHlsZTsKCSAgICB0aGlzLnN0eWxlcyA9IHN0eWxlczsKCSAgICB0aGlzLmJyYWNrZXRzID0gYnJhY2tldHM7CgoJICAgIHRoaXMuc3R5bGVJZGVudGlmaWVyID0gZnVuY3Rpb24oY29udGVudCkgewoJCWlmICh0aGlzLmJyYWNrZXRObzw9dGhpcy5zdHlsZXMubGVuZ3RoKQoJCSAgICByZXR1cm4gdGhpcy5zdHlsZXNbdGhpcy5icmFja2V0Tm8tMV07CgkJZWxzZQoJCSAgICByZXR1cm4gbnVsbDsKCSAgICB9OwoJICAgIHRoaXMub3BlbkJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkJdGhpcy5icmFja2V0Tm8rKzsKCQlyZXR1cm4gImJyYWNrZXQiOwoJICAgIH07CgkgICAgdGhpcy5jbG9zZUJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkgICAgfTsKCX0KICAgIH0KCiAgICB2YXIgcGx1Z2lucyA9IG5ldyBBcnJheSgpOwogICAKICAgIHBsdWdpbnNbImltcG9ydG1vZHVsZSJdID0gYWRkUGx1Z2luUGF0dGVybigiaW1wb3J0bW9kdWxlIiwgInRhZyIsICJ7WyIsIFsic3RyaW5nIiwgImJ1aWx0aW4iXSk7CiAgICBwbHVnaW5zWyJkb2N1bWVudGNsYXNzIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKCJkb2N1bWVudGNsYXNzIiwgInRhZyIsICJ7WyIsIFsiIiwgImF0b20iXSk7CiAgICBwbHVnaW5zWyJ1c2VwYWNrYWdlIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKCJkb2N1bWVudGNsYXNzIiwgInRhZyIsICJbIiwgWyJhdG9tIl0pOwogICAgcGx1Z2luc1siYmVnaW4iXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAidGFnIiwgIlsiLCBbImF0b20iXSk7CiAgICBwbHVnaW5zWyJlbmQiXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAidGFnIiwgIlsiLCBbImF0b20iXSk7CgogICAgcGx1Z2luc1siREVGQVVMVCJdID0gZnVuY3Rpb24gKCkgewoJdGhpcy5uYW1lPSJERUZBVUxUIjsKCXRoaXMuc3R5bGU9InRhZyI7CgoJdGhpcy5zdHlsZUlkZW50aWZpZXIgPSBmdW5jdGlvbihjb250ZW50KSB7Cgl9OwoJdGhpcy5vcGVuQnJhY2tldCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCX07Cgl0aGlzLmNsb3NlQnJhY2tldCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCX07CiAgICB9OwoKICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmKSB7CglzdGF0ZS5mID0gZjsKICAgIH0KCiAgICBmdW5jdGlvbiBub3JtYWwoc291cmNlLCBzdGF0ZSkgewoJaWYgKHNvdXJjZS5tYXRjaCgvXlxcW2EtekEtWkBdKy8pKSB7CgkgICAgdmFyIGNtZE5hbWUgPSBzb3VyY2UuY3VycmVudCgpOwoJICAgIGNtZE5hbWUgPSBjbWROYW1lLnN1YnN0cigxLCBjbWROYW1lLmxlbmd0aC0xKTsKICAgICAgICAgICAgdmFyIHBsdWc7CiAgICAgICAgICAgIGlmIChwbHVnaW5zLmhhc093blByb3BlcnR5KGNtZE5hbWUpKSB7CgkgICAgICBwbHVnID0gcGx1Z2luc1tjbWROYW1lXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwbHVnID0gcGx1Z2luc1siREVGQVVMVCJdOwogICAgICAgICAgICB9CgkgICAgcGx1ZyA9IG5ldyBwbHVnKCk7CgkgICAgcHVzaENvbW1hbmQoc3RhdGUsIHBsdWcpOwoJICAgIHNldFN0YXRlKHN0YXRlLCBiZWdpblBhcmFtcyk7CgkgICAgcmV0dXJuIHBsdWcuc3R5bGU7Cgl9CgogICAgICAgIC8vIGVzY2FwZSBjaGFyYWN0ZXJzIAogICAgICAgIGlmIChzb3VyY2UubWF0Y2goL15cXFskJiUje31fXS8pKSB7CiAgICAgICAgICByZXR1cm4gInRhZyI7CiAgICAgICAgfQoKICAgICAgICAvLyB3aGl0ZSBzcGFjZSBjb250cm9sIGNoYXJhY3RlcnMKICAgICAgICBpZiAoc291cmNlLm1hdGNoKC9eXFxbLDshXC9dLykpIHsKICAgICAgICAgIHJldHVybiAidGFnIjsKICAgICAgICB9CgoJdmFyIGNoID0gc291cmNlLm5leHQoKTsKCWlmIChjaCA9PSAiJSIpIHsKICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiAlIGF0IGVuZCBvZiBpdHMgb3duIGxpbmU7IHN0YXkgaW4gc2FtZSBzdGF0ZQogICAgICAgICAgICBpZiAoIXNvdXJjZS5lb2woKSkgewogICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCBpbkNDb21tZW50KTsKICAgICAgICAgICAgfQoJICAgIHJldHVybiAiY29tbWVudCI7Cgl9IAoJZWxzZSBpZiAoY2g9PSd9JyB8fCBjaD09J10nKSB7CgkgICAgcGx1ZyA9IHBlZWtDb21tYW5kKHN0YXRlKTsKCSAgICBpZiAocGx1ZykgewoJCXBsdWcuY2xvc2VCcmFja2V0KGNoKTsKCQlzZXRTdGF0ZShzdGF0ZSwgYmVnaW5QYXJhbXMpOwoJICAgIH0gZWxzZQoJCXJldHVybiAiZXJyb3IiOwoJICAgIHJldHVybiAiYnJhY2tldCI7Cgl9IGVsc2UgaWYgKGNoPT0neycgfHwgY2g9PSdbJykgewoJICAgIHBsdWcgPSBwbHVnaW5zWyJERUZBVUxUIl07CSAgICAKCSAgICBwbHVnID0gbmV3IHBsdWcoKTsKCSAgICBwdXNoQ29tbWFuZChzdGF0ZSwgcGx1Zyk7CgkgICAgcmV0dXJuICJicmFja2V0IjsJICAgIAoJfQoJZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewoJICAgIHNvdXJjZS5lYXRXaGlsZSgvW1x3LiVdLyk7CgkgICAgcmV0dXJuICJhdG9tIjsKCX0KCWVsc2UgewoJICAgIHNvdXJjZS5lYXRXaGlsZSgvW1x3LV9dLyk7CgkgICAgcmV0dXJuIGFwcGx5TW9zdFBvd2VyZnVsKHN0YXRlKTsKCX0KICAgIH0KCiAgICBmdW5jdGlvbiBpbkNDb21tZW50KHNvdXJjZSwgc3RhdGUpIHsKCXNvdXJjZS5za2lwVG9FbmQoKTsKCXNldFN0YXRlKHN0YXRlLCBub3JtYWwpOwoJcmV0dXJuICJjb21tZW50IjsKICAgIH0KCiAgICBmdW5jdGlvbiBiZWdpblBhcmFtcyhzb3VyY2UsIHN0YXRlKSB7Cgl2YXIgY2ggPSBzb3VyY2UucGVlaygpOwoJaWYgKGNoID09ICd7JyB8fCBjaCA9PSAnWycpIHsKCSAgIHZhciBsYXN0UGx1ZyA9IHBlZWtDb21tYW5kKHN0YXRlKTsKCSAgIHZhciBzdHlsZSA9IGxhc3RQbHVnLm9wZW5CcmFja2V0KGNoKTsKCSAgIHNvdXJjZS5lYXQoY2gpOwoJICAgc2V0U3RhdGUoc3RhdGUsIG5vcm1hbCk7CgkgICByZXR1cm4gImJyYWNrZXQiOwoJfQoJaWYgKC9bIFx0XHJdLy50ZXN0KGNoKSkgewoJICAgIHNvdXJjZS5lYXQoY2gpOwoJICAgIHJldHVybiBudWxsOwoJfQoJc2V0U3RhdGUoc3RhdGUsIG5vcm1hbCk7CglsYXN0UGx1ZyA9IHBlZWtDb21tYW5kKHN0YXRlKTsKCWlmIChsYXN0UGx1ZykgewoJICAgIHBvcENvbW1hbmQoc3RhdGUpOwoJfQogICAgICAgIHJldHVybiBub3JtYWwoc291cmNlLCBzdGF0ZSk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHsgZjpub3JtYWwsIGNtZFN0YXRlOltdIH07IH0sCgkgY29weVN0YXRlOiBmdW5jdGlvbihzKSB7IHJldHVybiB7IGY6IHMuZiwgY21kU3RhdGU6IHMuY21kU3RhdGUuc2xpY2UoMCwgcy5jbWRTdGF0ZS5sZW5ndGgpIH07IH0sCgkgCgkgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKCSB2YXIgdCA9IHN0YXRlLmYoc3RyZWFtLCBzdGF0ZSk7CgkgdmFyIHcgPSBzdHJlYW0uY3VycmVudCgpOwoJIHJldHVybiB0OwogICAgIH0KIH07Cn0pOwoKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXN0ZXgiLCAic3RleCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/test.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHNUZVggbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InN0ZXguanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90ZXN0L21vZGVfdGVzdC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Rlc3QvbW9kZV90ZXN0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+VGVzdHMgZm9yIHRoZSBzVGVYIE1vZGU8L2gxPgogICAgPGgyPkJhc2ljczwvaDI+CiAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KICAgICAgTVQgPSBNb2RlVGVzdDsKCiAgICAgIE1ULnRlc3QoJ2ZvbycsCiAgICAgICAgbnVsbCwgJ2ZvbycpOwoKICAgICAgTVQudGVzdCgnZm9vIGJhcicsCiAgICAgICAgbnVsbCwgJ2ZvbycsCiAgICAgICAgbnVsbCwgJyBiYXInKTsKICAgIDwvc2NyaXB0PgoKICAgIDxoMj5UYWdzPC9oMj4KICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgogICAgICBNVC50ZXN0KCdcXGJlZ2lue2RvY3VtZW50fVxuXFxlbmR7ZG9jdW1lbnR9JywKICAgICAgICAndGFnJywgICAgICdcXGJlZ2luJywKICAgICAgICAnYnJhY2tldCcsICd7JywKICAgICAgICAnYXRvbScsICAgICdkb2N1bWVudCcsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScsCiAgICAgICAgJ3RhZycsICAgICAnXFxlbmQnLAogICAgICAgICdicmFja2V0JywgJ3snLAogICAgICAgICdhdG9tJywgICAgJ2RvY3VtZW50JywKICAgICAgICAnYnJhY2tldCcsICd9Jyk7CgogICAgICBNVC50ZXN0KCdcXGJlZ2lue2VxdWF0aW9ufVxuICBFPW1jXjJcblxcZW5ke2VxdWF0aW9ufScsCiAgICAgICAgJ3RhZycsICAgICAnXFxiZWdpbicsCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ2F0b20nLCAgICAnZXF1YXRpb24nLAogICAgICAgICdicmFja2V0JywgJ30nLAogICAgICAgIG51bGwsICAgICAgJyAnLAogICAgICAgIG51bGwsICAgICAgJyAnLAogICAgICAgIG51bGwsICAgICAgJ0UnLAogICAgICAgIG51bGwsICAgICAgJz1tYycsCiAgICAgICAgbnVsbCwgICAgICAnXjInLAogICAgICAgICd0YWcnLCAgICAgJ1xcZW5kJywKICAgICAgICAnYnJhY2tldCcsICd7JywKICAgICAgICAnYXRvbScsICAgICdlcXVhdGlvbicsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScpOwoKICAgICAgTVQudGVzdCgnXFxiZWdpbnttb2R1bGV9W10nLAogICAgICAgICd0YWcnLCAgICAgJ1xcYmVnaW4nLAogICAgICAgICdicmFja2V0JywgJ3snLAogICAgICAgICdhdG9tJywgICAgJ21vZHVsZScsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScsCiAgICAgICAgJ2JyYWNrZXQnLCAnWycsCiAgICAgICAgJ2JyYWNrZXQnLCAnXScpOwoKICAgICAgTVQudGVzdCgnXFxiZWdpbnttb2R1bGV9W2lkPWJidC1zaXplXScsCiAgICAgICAgJ3RhZycsICAgICAnXFxiZWdpbicsCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ2F0b20nLCAgICAnbW9kdWxlJywKICAgICAgICAnYnJhY2tldCcsICd9JywKICAgICAgICAnYnJhY2tldCcsICdbJywKICAgICAgICBudWxsLCAgICAgICdpZCcsCiAgICAgICAgbnVsbCwgICAgICAnPWJidC1zaXplJywKICAgICAgICAnYnJhY2tldCcsICddJyk7CgogICAgICBNVC50ZXN0KCdcXGltcG9ydG1vZHVsZVtiLWItdF17Yi1iLXR9JywKICAgICAgICAndGFnJywgICAgICdcXGltcG9ydG1vZHVsZScsCiAgICAgICAgJ2JyYWNrZXQnLCAnWycsCiAgICAgICAgJ3N0cmluZycsICAgJ2ItYi10JywKICAgICAgICAnYnJhY2tldCcsICddJywKICAgICAgICAnYnJhY2tldCcsICd7JywKICAgICAgICAnYnVpbHRpbicsICdiLWItdCcsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScpOwoKICAgICAgTVQudGVzdCgnXFxpbXBvcnRtb2R1bGVbXFxLV0FSQ3NsaWRlc3tkbWF0aC9lbi9jYXJkaW5hbGl0eX1de2NhcmR9JywKICAgICAgICAndGFnJywgICAgICdcXGltcG9ydG1vZHVsZScsCiAgICAgICAgJ2JyYWNrZXQnLCAnWycsCiAgICAgICAgJ3RhZycsICAgICAnXFxLV0FSQ3NsaWRlcycsCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ3N0cmluZycsICAgJ2RtYXRoJywKICAgICAgICAnc3RyaW5nJywgICAnL2VuJywKICAgICAgICAnc3RyaW5nJywgICAnL2NhcmRpbmFsaXR5JywKICAgICAgICAnYnJhY2tldCcsICd9JywKICAgICAgICAnYnJhY2tldCcsICddJywKICAgICAgICAnYnJhY2tldCcsICd7JywKICAgICAgICAnYnVpbHRpbicsICdjYXJkJywKICAgICAgICAnYnJhY2tldCcsICd9Jyk7CgogICAgICBNVC50ZXN0KCdcXFBTZm9yUERGWzFdeyMxfScsIC8vIGNvdWxkIHRyZWF0ICMxIHNwZWNpYWxseQogICAgICAgICd0YWcnLCAgICAgJ1xcUFNmb3JQREYnLAogICAgICAgICdicmFja2V0JywgJ1snLAogICAgICAgICdhdG9tJywgICAgJzEnLAogICAgICAgICdicmFja2V0JywgJ10nLAogICAgICAgICdicmFja2V0JywgJ3snLAogICAgICAgIG51bGwsICAgICAgJyMxJywKICAgICAgICAnYnJhY2tldCcsICd9Jyk7CiAgICA8L3NjcmlwdD4KCiAgICA8aDI+Q29tbWVudHM8L2gyPgogICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CiAgICAgIE1ULnRlc3QoJyUgZm9vJywKICAgICAgICAnY29tbWVudCcsICclJywKICAgICAgICAnY29tbWVudCcsICcgZm9vJyk7CgogICAgICBNVC50ZXN0KCdcXGl0ZW0lIGJhcicsCiAgICAgICAgJ3RhZycsICAgICAnXFxpdGVtJywKICAgICAgICAnY29tbWVudCcsICclJywKICAgICAgICAnY29tbWVudCcsICcgYmFyJyk7CgogICAgICBNVC50ZXN0KCcgJSBcXGl0ZW0nLAogICAgICAgIG51bGwsICAgICAgJyAnLAogICAgICAgICdjb21tZW50JywgJyUnLAogICAgICAgICdjb21tZW50JywgJyBcXGl0ZW0nKTsKCiAgICAgIE1ULnRlc3QoJyVcbmZvbycsCiAgICAgICAgJ2NvbW1lbnQnLCAnJScsCiAgICAgICAgbnVsbCwgJ2ZvbycpOwogICAgPC9zY3JpcHQ+CgogICAgPGgyPkVycm9yczwvaDI+CiAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KICAgICAgTVQudGVzdCgnXFxiZWdpbn17JywKICAgICAgICAndGFnJywgICAgICdcXGJlZ2luJywKICAgICAgICAnZXJyb3InLCAgICd9JywKICAgICAgICAnYnJhY2tldCcsICd7Jyk7CgogICAgICBNVC50ZXN0KCdcXGl0ZW1deycsCiAgICAgICAgJ3RhZycsICAgICAnXFxpdGVtJywKICAgICAgICAnZXJyb3InLCAgICddJywKICAgICAgICAnYnJhY2tldCcsICd7Jyk7CgogICAgICBNVC50ZXN0KCclIH0nLAogICAgICAgICdjb21tZW50JywgJyUnLAogICAgICAgICdjb21tZW50JywgJyB9Jyk7CiAgICA8L3NjcmlwdD4KCiAgICA8aDI+Q2hhcmFjdGVyIEVzY2FwZXM8L2gyPgogICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CiAgICAgIE1ULnRlc3QoJ3RoZSBcXCMga2V5JywKICAgICAgICBudWxsLCAgJ3RoZScsCiAgICAgICAgbnVsbCwgICcgJywKICAgICAgICAndGFnJywgJ1xcIycsCiAgICAgICAgbnVsbCwgICcga2V5Jyk7CgogICAgICBNVC50ZXN0KCdhIFxcJDUgc3RldHNvbicsCiAgICAgICAgbnVsbCwgJ2EnLAogICAgICAgIG51bGwsICcgJywKICAgICAgICAndGFnJywgJ1xcJCcsCiAgICAgICAgJ2F0b20nLCA1LAogICAgICAgIG51bGwsICcgc3RldHNvbicpOwoKICAgICAgTVQudGVzdCgnMTAwXFwlIGJlZWYnLAogICAgICAgICdhdG9tJywgJzEwMCcsCiAgICAgICAgJ3RhZycsICdcXCUnLAogICAgICAgIG51bGwsICcgYmVlZicpOwoKICAgICAgTVQudGVzdCgnTCBcXCYgTicsCiAgICAgICAgbnVsbCwgJ0wnLAogICAgICAgIG51bGwsICcgJywKICAgICAgICAndGFnJywgJ1xcJicsCiAgICAgICAgbnVsbCwgJyBOJyk7CgogICAgICBNVC50ZXN0KCdmb29cXF9iYXInLAogICAgICAgIG51bGwsICdmb28nLAogICAgICAgICd0YWcnLCAnXFxfJywKICAgICAgICBudWxsLCAnYmFyJyk7CgogICAgICBNVC50ZXN0KCdcXGVtcGh7XFx7fScsCiAgICAgICAgJ3RhZycsICAgICdcXGVtcGgnLAogICAgICAgICdicmFja2V0JywneycsCiAgICAgICAgJ3RhZycsICAgICdcXHsnLAogICAgICAgICdicmFja2V0JywnfScpOwoKICAgICAgTVQudGVzdCgnXFxlbXBoe1xcfX0nLAogICAgICAgICd0YWcnLCAgICAnXFxlbXBoJywKICAgICAgICAnYnJhY2tldCcsJ3snLAogICAgICAgICd0YWcnLCAgICAnXFx9JywKICAgICAgICAnYnJhY2tldCcsJ30nKTsKCiAgICAgIE1ULnRlc3QoJ3NlY3Rpb24gXFxTMScsCiAgICAgICAgbnVsbCwgICdzZWN0aW9uJywKICAgICAgICBudWxsLCAgJyAnLAogICAgICAgICd0YWcnLCAnXFxTJywKICAgICAgICAnYXRvbScsICAnMScpOwoKICAgICAgTVQudGVzdCgncGFyYSBcXFAyJywKICAgICAgICBudWxsLCAgJ3BhcmEnLAogICAgICAgIG51bGwsICAnICcsCiAgICAgICAgJ3RhZycsICdcXFAnLAogICAgICAgICdhdG9tJywgICcyJyk7CgogICAgPC9zY3JpcHQ+CgogICAgPGgyPlNwYWNpbmcgY29udHJvbDwvaDI+CgogICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CiAgICAgIE1ULnRlc3QoJ3hcXCx5JywgLy8gdGhpbnNwYWNlCiAgICAgICAgbnVsbCwgICd4JywKICAgICAgICAndGFnJywgJ1xcLCcsCiAgICAgICAgbnVsbCwgICd5Jyk7CgogICAgICBNVC50ZXN0KCd4XFw7eScsIC8vIHRoaWNrc3BhY2UKICAgICAgICBudWxsLCAgJ3gnLAogICAgICAgICd0YWcnLCAnXFw7JywKICAgICAgICBudWxsLCAgJ3knKTsKCiAgICAgIE1ULnRlc3QoJ3hcXCF5JywgLy8gbmVnYXRpdmUgdGhpbnNwYWNlCiAgICAgICAgbnVsbCwgICd4JywKICAgICAgICAndGFnJywgJ1xcIScsCiAgICAgICAgbnVsbCwgICd5Jyk7CgogICAgICBNVC50ZXN0KCdKLlxcIEwuXFwgaXMnLCAvLyBwZXJpb2Qgbm90IGVuZGluZyBhIHNlbnRlbmNlCiAgICAgICAgbnVsbCwgJ0onLAogICAgICAgIG51bGwsICcuJywKICAgICAgICBudWxsLCAnXFwnLAogICAgICAgIG51bGwsICcgTCcsCiAgICAgICAgbnVsbCwgJy4nLAogICAgICAgIG51bGwsICdcXCcsCiAgICAgICAgbnVsbCwgJyBpcycpOyAvLyBtYXliZSBjb3VsZCBiZSBiZXR0ZXIKCiAgICAgIE1ULnRlc3QoJ1hcXEAuIFRoZScsIC8vIHBlcmlvZCBlbmRpbmcgYSBzZW50ZW5jZQogICAgICAgIG51bGwsICAnWCcsCiAgICAgICAgJ3RhZycsICdcXEAnLAogICAgICAgIG51bGwsICAnLicsCiAgICAgICAgbnVsbCwgICcgVGhlJyk7CgogICAgICBNVC50ZXN0KCd7XFxlbSBJZlxcL30gSScsIC8vIGl0YWxpYyBjb3JyZWN0aW9uCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ3RhZycsICAgICAnXFxlbScsCiAgICAgICAgbnVsbCwgICAgICAnICcsCiAgICAgICAgbnVsbCwgICAgICAnSWYnLAogICAgICAgICd0YWcnLCAgICAgJ1xcLycsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScsCiAgICAgICAgbnVsbCwgICAgICAnICcsCiAgICAgICAgbnVsbCwgICAgICAnSScpOwoKICAgIDwvc2NyaXB0PgoKICAgIDxoMj5OZXcgQ29tbWFuZHM8L2gyPgoKICAgIFNob3VsZCBiZSBhYmxlIHRvIGRlZmluZSBhIG5ldyBjb21tYW5kIHRoYXQgaGFwcGVucyB0byBiZSBhIG1ldGhvZCBvbiBBcnJheQogICAgKGUuZy4gPHR0PnBvcDwvdHQ+KToKICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgogICAgICBNVC50ZXN0KCdcXG5ld2NvbW1hbmR7XFxwb3B9JywKICAgICAgICAndGFnJywgJ1xcbmV3Y29tbWFuZCcsCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ3RhZycsICdcXHBvcCcsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScpOwogICAgPC9zY3JpcHQ+CgogICAgPGgyPlN1bW1hcnk8L2gyPgogICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CiAgICAgIE1ULnByaW50U3VtbWFyeSgpOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRpZGRseVdpa2kgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InRpZGRseXdpa2kuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0aWRkbHl3aWtpLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGlkZGx5V2lraSBtb2RlPC9oMT4KCjxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIVRpZGRseVdpa2kgRm9ybWF0dGluZwoqIFJlbmRlcmVkIHZlcnNpb25zIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy50aWRkbHl3aWtpLmNvbS8jUmVmZXJlbmNlCgp8IU9wdGlvbiAgICAgICAgICAgIHwgIVN5bnRheCAgICAgICAgICAgIHwKfGJvbGQgZm9udCAgICAgICAgICB8ICcnYm9sZCcnICAgICAgICAgICB8CnxpdGFsaWMgdHlwZSAgICAgICAgfCAvL2l0YWxpYy8vICAgICAgICAgfAp8dW5kZXJsaW5lZCB0ZXh0ICAgIHwgX191bmRlcmxpbmVkX18gICAgIHwKfHN0cmlrZXRocm91Z2ggdGV4dCB8IC0tc3RyaWtldGhyb3VnaC0tICB8CnxzdXBlcnNjcmlwdCB0ZXh0ICAgfCBzdXBlcl5ec2NyaXB0Xl4gICAgfAp8c3Vic2NyaXB0IHRleHQgICAgIHwgc3Vifn5zY3JpcHR+fiAgICAgIHwKfGhpZ2hsaWdodGVkIHRleHQgICB8IEBAaGlnaGxpZ2h0ZWRAQCAgICB8CnxwcmVmb3JtYXR0ZWQgdGV4dCAgfCB7e3twcmVmb3JtYXR0ZWR9fX0gfAoKIUJsb2NrIEVsZW1lbnRzCjw8PAohSGVhZGluZyAxCgohIUhlYWRpbmcgMgoKISEhSGVhZGluZyAzCgohISEhSGVhZGluZyA0CgohISEhIUhlYWRpbmcgNQo8PDwKCiEhTGlzdHMKPDw8CiogdW5vcmRlcmVkIGxpc3QsIGxldmVsIDEKKiogdW5vcmRlcmVkIGxpc3QsIGxldmVsIDIKKioqIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAzCgojIG9yZGVyZWQgbGlzdCwgbGV2ZWwgMQojIyBvcmRlcmVkIGxpc3QsIGxldmVsIDIKIyMjIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAzCgo7IGRlZmluaXRpb24gbGlzdCwgdGVybQo6IGRlZmluaXRpb24gbGlzdCwgZGVzY3JpcHRpb24KPDw8CgohIUJsb2NrcXVvdGVzCjw8PAo+IGJsb2NrcXVvdGUsIGxldmVsIDEKPj4gYmxvY2txdW90ZSwgbGV2ZWwgMgo+Pj4gYmxvY2txdW90ZSwgbGV2ZWwgMwoKPiBibG9ja3F1b3RlCjw8PAoKISFQcmVmb3JtYXR0ZWQgVGV4dAo8PDwKe3t7CnByZWZvcm1hdHRlZCAoZS5nLiBjb2RlKQp9fX0KPDw8CgohIUNvZGUgU2VjdGlvbnMKPDw8Cnt7ewpUZXh0IHN0eWxlIGNvZGUKfX19CgovL3t7ewpKUyBzdHlsZWQgY29kZS4gVGlkZGx5V2lraSBtaXhlZCBtb2RlIHNob3VsZCBzdXBwb3J0IGhpZ2hsaWdodGVyIHN3aXRjaGluZyBpbiB0aGUgZnV0dXJlLgovL319fQoKPCEtLXt7ey0tPgpYTUwgc3R5bGVkIGNvZGUuIFRpZGRseVdpa2kgbWl4ZWQgbW9kZSBzaG91bGQgc3VwcG9ydCBoaWdobGlnaHRlciBzd2l0Y2hpbmcgaW4gdGhlIGZ1dHVyZS4KPCEtLX19fS0tPgo8PDwKCiEhVGFibGVzCjw8PAp8Q3NzQ2xhc3N8awp8IWhlYWRpbmcgY29sdW1uIDF8IWhlYWRpbmcgY29sdW1uIDJ8Cnxyb3cgMSwgY29sdW1uIDF8cm93IDEsIGNvbHVtbiAyfAp8cm93IDIsIGNvbHVtbiAxfHJvdyAyLCBjb2x1bW4gMnwKfD58Q09MU1BBTnwKfFJPV1NQQU58IC4uLiB8Cnx+fCAuLi4gfAp8Q3NzUHJvcGVydHk6dmFsdWU7Li4ufCAuLi4gfAp8Y2FwdGlvbnxjCgonJ0Fubm90YXRpb246JycKKiBUaGUge3t7Pn19fSBtYXJrZXIgY3JlYXRlcyBhICJjb2xzcGFuIiwgY2F1c2luZyB0aGUgY3VycmVudCBjZWxsIHRvIG1lcmdlIHdpdGggdGhlIG9uZSB0byB0aGUgcmlnaHQuCiogVGhlIHt7e359fX0gbWFya2VyIGNyZWF0ZXMgYSAicm93c3BhbiIsIGNhdXNpbmcgdGhlIGN1cnJlbnQgY2VsbCB0byBtZXJnZSB3aXRoIHRoZSBvbmUgYWJvdmUuCjw8PAohIUltYWdlcyAvJSBUT0RPICUvCmNmLiBbW1RpZGRseVdpa2kuY29tfGh0dHA6Ly93d3cudGlkZGx5d2lraS5jb20vI0VtYmVkZGVkSW1hZ2VzXV0KCiFIeXBlcmxpbmtzCiogW1tXaWtpV29yZHN8V2lraVdvcmRdXSBhcmUgYXV0b21hdGljYWxseSB0cmFuc2Zvcm1lZCB0byBoeXBlcmxpbmtzIHRvIHRoZSByZXNwZWN0aXZlIHRpZGRsZXIKKiogdGhlIGF1dG9tYXRpYyB0cmFuc2Zvcm1hdGlvbiBjYW4gYmUgc3VwcHJlc3NlZCBieSBwcmVjZWRpbmcgdGhlIHJlc3BlY3RpdmUgV2lraVdvcmQgd2l0aCBhIHRpbGRlICh7e3t+fX19KToge3t7fldpa2lXb3JkfX19CiogW1tQcmV0dHlMaW5rc11dIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgYW5kIGNvbnRhaW4gdGhlIGRlc2lyZWQgdGlkZGxlciBuYW1lOiB7e3tbW3RpZGRsZXIgbmFtZV1dfX19CioqIG9wdGlvbmFsbHksIGEgY3VzdG9tIHRpdGxlIG9yIGRlc2NyaXB0aW9uIGNhbiBiZSBhZGRlZCwgc2VwYXJhdGVkIGJ5IGEgcGlwZSBjaGFyYWN0ZXIgKHt7e3x9fX0pOiB7e3tbW3RpdGxlfHRhcmdldF1dfX19PGJyPicnJ04uQi46JycnIEluIHRoaXMgY2FzZSwgdGhlIHRhcmdldCBjYW4gYWxzbyBiZSBhbnkgd2Vic2l0ZSAoaS5lLiBVUkwpLgoKIUN1c3RvbSBTdHlsaW5nCioge3t7QEBDc3NQcm9wZXJ0eTp2YWx1ZTtDc3NQcm9wZXJ0eTp2YWx1ZTsuLi5AQH19fTxicj4nJ04uQi46JycgQ1NTIGNvbG9yIGRlZmluaXRpb25zIHNob3VsZCB1c2UgbG93ZXJjYXNlIGxldHRlcnMgdG8gcHJldmVudCB0aGUgaW5hZHZlcnRlbnQgY3JlYXRpb24gb2YgV2lraVdvcmRzLgoqIDxodG1sPjxjb2RlPnt7Y3VzdG9tQ3NzQ2xhc3N7Li4ufX19PC9jb2RlPjwvaHRtbD4KKiByYXcgSFRNTCBjYW4gYmUgaW5zZXJ0ZWQgYnkgZW5jbG9zaW5nIHRoZSByZXNwZWN0aXZlIGNvZGUgaW4gSFRNTCB0YWdzOiB7e3s8aHRtbD4gLi4uIDwvaHRtbD59fX0KCiFTcGVjaWFsIE1hcmtlcnMKKiB7e3s8YnI+fX19IGZvcmNlcyBhIG1hbnVhbCBsaW5lIGJyZWFrCioge3t7LS0tLX19fSBjcmVhdGVzIGEgaG9yaXpvbnRhbCBydWxlcgoqIFtbSFRNTCBlbnRpdGllc3xodHRwOi8vd3d3LnRpZGRseXdpa2kuY29tLyNIdG1sRW50aXRpZXNdXQoqIFtbSFRNTCBlbnRpdGllcyBsb2NhbHxIdG1sRW50aXRpZXNdXQoqIHt7ezw8bWFjcm9OYW1lPj59fX0gY2FsbHMgdGhlIHJlc3BlY3RpdmUgW1ttYWNyb3xNYWNyb3NdXQoqIFRvIGhpZGUgdGV4dCB3aXRoaW4gYSB0aWRkbGVyIHNvIHRoYXQgaXQgaXMgbm90IGRpc3BsYXllZCwgaXQgY2FuIGJlIHdyYXBwZWQgaW4ge3t7LyV9fX0gYW5kIHt7eyUvfX19Ljxici8+VGhpcyBjYW4gYmUgYSB1c2VmdWwgdHJpY2sgZm9yIGhpZGluZyBkcmFmdHMgb3IgYW5ub3RhdGluZyBjb21wbGV4IG1hcmt1cC4KKiBUbyBwcmV2ZW50IHdpa2kgbWFya3VwIGZyb20gdGFraW5nIGVmZmVjdCBmb3IgYSBwYXJ0aWN1bGFyIHNlY3Rpb24sIHRoYXQgc2VjdGlvbiBjYW4gYmUgZW5jbG9zZWQgaW4gdGhyZWUgZG91YmxlIHF1b3RlczogZS5nLiB7e3siIiJXaWtpV29yZCIiIn19fS4KPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6ICd0aWRkbHl3aWtpJywgICAgICAKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBlbnRlck1vZGU6ICdrZWVwJywKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+VGlkZGx5V2lraSBtb2RlIHN1cHBvcnRzIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtdGlkZGx5d2lraTwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/tiddlywiki.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5jbS11bmRlcmxpbmVkIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQpzcGFuLmNtLXN0cmlrZXRocm91Z2ggewogIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwp9CnNwYW4uY20tYnJhY2UgewogIGNvbG9yOiAjMTcwOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CnNwYW4uY20tdGFibGUgewogIGNvbG9yOiBibHVlOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/tiddlywiki.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKgp8JydOYW1lJyd8dGlkZGx5d2lraS5qc3wKfCcnRGVzY3JpcHRpb24nJ3xFbmFibGVzIFRpZGRseVdpa2l5IHN5bnRheCBoaWdobGlnaHRpbmcgdXNpbmcgQ29kZU1pcnJvcnwKfCcnQXV0aG9yJyd8UE1hcmlvfAp8JydWZXJzaW9uJyd8MC4xLjd8CnwnJ1N0YXR1cycnfCcnc3RhYmxlJyd8CnwnJ1NvdXJjZScnfFtbR2l0SHVifGh0dHBzOi8vZ2l0aHViLmNvbS9wbWFyaW8vQ29kZU1pcnJvcjIvYmxvYi90dy1zeW50YXgvbW9kZS90aWRkbHl3aWtpXV18CnwnJ0RvY3VtZW50YXRpb24nJ3xodHRwOi8vY29kZW1pcnJvci50aWRkbHlzcGFjZS5jb20vfAp8JydMaWNlbnNlJyd8W1tNSVQgTGljZW5zZXxodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocF1dfAp8JydDb3JlVmVyc2lvbicnfDIuNS4wfAp8JydSZXF1aXJlcycnfGNvZGVtaXJyb3IuanN8CnwnJ0tleXdvcmRzJyd8c3ludGF4IGhpZ2hsaWdodGluZyBjb2xvciBjb2RlIG1pcnJvciBjb2RlbWlycm9yfAohIEluZm8KQ29yZVZlcnNpb24gcGFyYW1ldGVyIGlzIG5lZWRlZCBmb3IgVGlkZGx5V2lraSBvbmx5IQoqKiovCi8ve3t7CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgidGlkZGx5d2lraSIsIGZ1bmN0aW9uIChjb25maWcsIHBhcnNlckNvbmZpZykgewoJdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKCgkvLyBUb2tlbml6ZXIKCXZhciB0ZXh0d29yZHMgPSBmdW5jdGlvbiAoKSB7CgkJZnVuY3Rpb24ga3codHlwZSkgewoJCQlyZXR1cm4gewoJCQkJdHlwZTogdHlwZSwKCQkJCXN0eWxlOiAidGV4dCIKCQkJfTsKCQl9CgkJcmV0dXJuIHt9OwoJfSgpOwoKCXZhciBrZXl3b3JkcyA9IGZ1bmN0aW9uICgpIHsKCQlmdW5jdGlvbiBrdyh0eXBlKSB7CgkJCXJldHVybiB7IHR5cGU6IHR5cGUsIHN0eWxlOiAibWFjcm8ifTsKCQl9CgkJcmV0dXJuIHsKCQkJImFsbFRhZ3MiOiBrdygnYWxsVGFncycpLCAiY2xvc2VBbGwiOiBrdygnY2xvc2VBbGwnKSwgImxpc3QiOiBrdygnbGlzdCcpLAoJCQkibmV3Sm91cm5hbCI6IGt3KCduZXdKb3VybmFsJyksICJuZXdUaWRkbGVyIjoga3coJ25ld1RpZGRsZXInKSwKCQkJInBlcm1hdmlldyI6IGt3KCdwZXJtYXZpZXcnKSwgInNhdmVDaGFuZ2VzIjoga3coJ3NhdmVDaGFuZ2VzJyksCgkJCSJzZWFyY2giOiBrdygnc2VhcmNoJyksICJzbGlkZXIiOiBrdygnc2xpZGVyJyksCSJ0YWJzIjoga3coJ3RhYnMnKSwKCQkJInRhZyI6IGt3KCd0YWcnKSwgInRhZ2dpbmciOiBrdygndGFnZ2luZycpLAkidGFncyI6IGt3KCd0YWdzJyksCgkJCSJ0aWRkbGVyIjoga3coJ3RpZGRsZXInKSwgInRpbWVsaW5lIjoga3coJ3RpbWVsaW5lJyksCgkJCSJ0b2RheSI6IGt3KCd0b2RheScpLCAidmVyc2lvbiI6IGt3KCd2ZXJzaW9uJyksCSJvcHRpb24iOiBrdygnb3B0aW9uJyksCgoJCQkid2l0aCI6IGt3KCd3aXRoJyksCgkJCSJmaWx0ZXIiOiBrdygnZmlsdGVyJykKCQl9OwoJfSgpOwoKCXZhciBpc1NwYWNlTmFtZSA9IC9bXHdfXC1dL2ksCgkJcmVIUiA9IC9eXC1cLVwtXC0rJC8sCQkJCQkvLyA8aHI+CgkJcmVXaWtpQ29tbWVudFN0YXJ0ID0gL15cL1wqXCpcKiQvLAkJLy8gLyoqKgoJCXJlV2lraUNvbW1lbnRTdG9wID0gL15cKlwqXCpcLyQvLAkJLy8gKioqLwoJCXJlQmxvY2tRdW90ZSA9IC9ePDw8JC8sCgoJCXJlSnNDb2RlU3RhcnQgPSAvXlwvXC9ce1x7XHskLywJCQkvLyAvL3t7eyBqcyBibG9jayBzdGFydAoJCXJlSnNDb2RlU3RvcCA9IC9eXC9cL1x9XH1cfSQvLAkJCS8vIC8vfX19IGpzIHN0b3AKCQlyZVhtbENvZGVTdGFydCA9IC9ePCEtLVx7XHtcey0tPiQvLAkJLy8geG1sIGJsb2NrIHN0YXJ0CgkJcmVYbWxDb2RlU3RvcCA9IC9ePCEtLVx9XH1cfS0tPiQvLAkJLy8geG1sIHN0b3AKCgkJcmVDb2RlQmxvY2tTdGFydCA9IC9eXHtce1x7JC8sCQkJLy8ge3t7IFRXIHRleHQgZGl2IGJsb2NrIHN0YXJ0CgkJcmVDb2RlQmxvY2tTdG9wID0gL15cfVx9XH0kLywJCQkvLyB9fX0gVFcgdGV4dCBzdG9wCgoJCXJlQ29kZVN0YXJ0ID0gL1x7XHtcey8sCQkJCQkvLyB7e3sgY29kZSBzcGFuIHN0YXJ0CgkJcmVVbnRpbENvZGVTdG9wID0gLy4qP1x9XH1cfS87CgoJZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgZikgewoJCXN0YXRlLnRva2VuaXplID0gZjsKCQlyZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKCX0KCgkvLyB1c2VkIGZvciBzdHJpbmdzCglmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBlbmQpIHsKCQl2YXIgZXNjYXBlZCA9IGZhbHNlLAoJCQluZXh0OwoJCXdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKCQkJaWYgKG5leHQgPT0gZW5kICYmICFlc2NhcGVkKSByZXR1cm4gZmFsc2U7CgkJCWVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CgkJfQoJCXJldHVybiBlc2NhcGVkOwoJfQoKCS8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXQKCS8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgoJdmFyIHR5cGUsIGNvbnRlbnQ7CgoJZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSwgY29udCkgewoJCXR5cGUgPSB0cDsKCQljb250ZW50ID0gY29udDsKCQlyZXR1cm4gc3R5bGU7Cgl9CgoJZnVuY3Rpb24ganNUb2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBzb2wgPSBzdHJlYW0uc29sKCksIAoJCQljaCwgdGNoOwoJCQkKCQlzdGF0ZS5ibG9jayA9IGZhbHNlOwkvLyBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgY29kZSBibG9jay4KCgkJY2ggPSBzdHJlYW0ucGVlaygpOyAJLy8gZG9uJ3QgZWF0LCB0byBtYWtlIG1hdGNoaW5nIHNpbXBsZXIKCQkKCQkvLyBjaGVjayBzdGFydCBvZiAgYmxvY2tzCgkJaWYgKHNvbCAmJiAvWzxcL1wqe31cLV0vLnRlc3QoY2gpKSB7CgkJCWlmIChzdHJlYW0ubWF0Y2gocmVDb2RlQmxvY2tTdGFydCkpIHsKCQkJCXN0YXRlLmJsb2NrID0gdHJ1ZTsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuQ29kZSk7CgkJCX0KCQkJaWYgKHN0cmVhbS5tYXRjaChyZUJsb2NrUXVvdGUpKSB7CgkJCQlyZXR1cm4gcmV0KCdxdW90ZScsICdxdW90ZScpOwoJCQl9CgkJCWlmIChzdHJlYW0ubWF0Y2gocmVXaWtpQ29tbWVudFN0YXJ0KSB8fCBzdHJlYW0ubWF0Y2gocmVXaWtpQ29tbWVudFN0b3ApKSB7CgkJCQlyZXR1cm4gcmV0KCdjb2RlJywgJ2NvbW1lbnQnKTsKCQkJfQoJCQlpZiAoc3RyZWFtLm1hdGNoKHJlSnNDb2RlU3RhcnQpIHx8IHN0cmVhbS5tYXRjaChyZUpzQ29kZVN0b3ApIHx8IHN0cmVhbS5tYXRjaChyZVhtbENvZGVTdGFydCkgfHwgc3RyZWFtLm1hdGNoKHJlWG1sQ29kZVN0b3ApKSB7CgkJCQlyZXR1cm4gcmV0KCdjb2RlJywgJ2NvbW1lbnQnKTsKCQkJfQoJCQlpZiAoc3RyZWFtLm1hdGNoKHJlSFIpKSB7CgkJCQlyZXR1cm4gcmV0KCdocicsICdocicpOwoJCQl9CgkJfSAvLyBzb2wKCQljaCA9IHN0cmVhbS5uZXh0KCk7CgoJCWlmIChzb2wgJiYgL1tcL1wqISM7Oj58XS8udGVzdChjaCkpIHsKCQkJaWYgKGNoID09ICIhIikgeyAvLyB0dyBoZWFkZXIKCQkJCXN0cmVhbS5za2lwVG9FbmQoKTsKCQkJCXJldHVybiByZXQoImhlYWRlciIsICJoZWFkZXIiKTsKCQkJfQoJCQlpZiAoY2ggPT0gIioiKSB7IC8vIHR3IGxpc3QKCQkJCXN0cmVhbS5lYXRXaGlsZSgnKicpOwoJCQkJcmV0dXJuIHJldCgibGlzdCIsICJjb21tZW50Iik7CgkJCX0KCQkJaWYgKGNoID09ICIjIikgeyAvLyB0dyBudW1iZXJlZCBsaXN0CgkJCQlzdHJlYW0uZWF0V2hpbGUoJyMnKTsKCQkJCXJldHVybiByZXQoImxpc3QiLCAiY29tbWVudCIpOwoJCQl9CgkJCWlmIChjaCA9PSAiOyIpIHsgLy8gZGVmaW5pdGlvbiBsaXN0LCB0ZXJtCgkJCQlzdHJlYW0uZWF0V2hpbGUoJzsnKTsKCQkJCXJldHVybiByZXQoImxpc3QiLCAiY29tbWVudCIpOwoJCQl9CgkJCWlmIChjaCA9PSAiOiIpIHsgLy8gZGVmaW5pdGlvbiBsaXN0LCBkZXNjcmlwdGlvbgoJCQkJc3RyZWFtLmVhdFdoaWxlKCc6Jyk7CgkJCQlyZXR1cm4gcmV0KCJsaXN0IiwgImNvbW1lbnQiKTsKCQkJfQoJCQlpZiAoY2ggPT0gIj4iKSB7IC8vIHNpbmdsZSBsaW5lIHF1b3RlCgkJCQlzdHJlYW0uZWF0V2hpbGUoIj4iKTsKCQkJCXJldHVybiByZXQoInF1b3RlIiwgInF1b3RlIik7CgkJCX0KCQkJaWYgKGNoID09ICd8JykgewoJCQkJcmV0dXJuIHJldCgndGFibGUnLCAnaGVhZGVyJyk7CgkJCX0KCQl9CgoJCWlmIChjaCA9PSAneycgJiYgc3RyZWFtLm1hdGNoKC9ce1x7LykpIHsKCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5Db2RlKTsKCQl9CgoJCS8vIHJ1ZGltZW50YXJ5IGh0bWw6Ly8gZmlsZTovLyBsaW5rIG1hdGNoaW5nLiBUVyBrbm93cyBtdWNoIG1vcmUgLi4uCgkJaWYgKC9baGZdL2kudGVzdChjaCkpIHsKCQkJaWYgKC9bdGldL2kudGVzdChzdHJlYW0ucGVlaygpKSAmJiBzdHJlYW0ubWF0Y2goL1xiKHR0cHM/fHRwfGlsZSk6XC9cL1tcLUEtWjAtOSsmQCNcLyU/PX5ffCQhOiwuO10qW0EtWjAtOSsmQCNcLyU9fl98JF0vaSkpIHsKCQkJCXJldHVybiByZXQoImxpbmsiLCAibGluayIpOwoJCQl9CgkJfQoJCS8vIGp1c3QgYSBsaXR0bGUgc3RyaW5nIGluZGljYXRvciwgZG9uJ3Qgd2FudCB0byBoYXZlIHRoZSB3aG9sZSBzdHJpbmcgY292ZXJlZAoJCWlmIChjaCA9PSAnIicpIHsKCQkJcmV0dXJuIHJldCgnc3RyaW5nJywgJ3N0cmluZycpOwoJCX0KCQlpZiAoY2ggPT0gJ34nKSB7CS8vIF9ub18gQ2FtZWxDYXNlIGluZGljYXRvciBzaG91bGQgYmUgYm9sZAoJCQlyZXR1cm4gcmV0KCd0ZXh0JywgJ2JyYWNlJyk7CgkJfQoJCWlmICgvW1xbXF1dLy50ZXN0KGNoKSkgeyAvLyBjaGVjayBmb3IgW1suLl1dCgkJCWlmIChzdHJlYW0ucGVlaygpID09IGNoKSB7CgkJCQlzdHJlYW0ubmV4dCgpOwoJCQkJcmV0dXJuIHJldCgnYnJhY2UnLCAnYnJhY2UnKTsKCQkJfQoJCX0KCQlpZiAoY2ggPT0gIkAiKSB7CS8vIGNoZWNrIGZvciBzcGFjZSBsaW5rLiBUT0RPIGZpeCBAQC4uLkBAIGhpZ2hsaWdodGluZwoJCQlzdHJlYW0uZWF0V2hpbGUoaXNTcGFjZU5hbWUpOwoJCQlyZXR1cm4gcmV0KCJsaW5rIiwgImxpbmsiKTsKCQl9CgkJaWYgKC9cZC8udGVzdChjaCkpIHsJLy8gbnVtYmVycwoJCQlzdHJlYW0uZWF0V2hpbGUoL1xkLyk7CgkJCXJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKCQl9CgkJaWYgKGNoID09ICIvIikgeyAvLyB0dyBpbnZpc2libGUgY29tbWVudAoJCQlpZiAoc3RyZWFtLmVhdCgiJSIpKSB7CgkJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvbW1lbnQpOwoJCQl9CgkJCWVsc2UgaWYgKHN0cmVhbS5lYXQoIi8iKSkgeyAvLyAKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuRW0pOwoJCQl9CgkJfQoJCWlmIChjaCA9PSAiXyIpIHsgLy8gdHcgdW5kZXJsaW5lCgkJCWlmIChzdHJlYW0uZWF0KCJfIikpIHsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuVW5kZXJsaW5lKTsKCQkJfQoJCX0KCQkvLyBzdHJpa2V0aHJvdWdoIGFuZCBtZGFzaCBoYW5kbGluZwoJCWlmIChjaCA9PSAiLSIpIHsKCQkJaWYgKHN0cmVhbS5lYXQoIi0iKSkgewoJCQkJLy8gaWYgc3RyaWtldGhyb3VnaCBsb29rcyB1Z2x5LCBjaGFuZ2UgQ1NTLgoJCQkJaWYgKHN0cmVhbS5wZWVrKCkgIT0gJyAnKQoJCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuU3RyaWtlKTsKCQkJCS8vIG1kYXNoCgkJCQlpZiAoc3RyZWFtLnBlZWsoKSA9PSAnICcpCgkJCQkJcmV0dXJuIHJldCgndGV4dCcsICdicmFjZScpOwoJCQl9CgkJfQoJCWlmIChjaCA9PSAiJyIpIHsgLy8gdHcgYm9sZAoJCQlpZiAoc3RyZWFtLmVhdCgiJyIpKSB7CgkJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlblN0cm9uZyk7CgkJCX0KCQl9CgkJaWYgKGNoID09ICI8IikgeyAvLyB0dyBtYWNybwoJCQlpZiAoc3RyZWFtLmVhdCgiPCIpKSB7CgkJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbk1hY3JvKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJcmV0dXJuIHJldChjaCk7CgkJfQoKCQkvLyBjb3JlIG1hY3JvIGhhbmRsaW5nCgkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CgkJdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLAoJCQlrbm93biA9IHRleHR3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSAmJiB0ZXh0d29yZHNbd29yZF07CgoJCXJldHVybiBrbm93biA/IHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwgd29yZCkgOiByZXQoInRleHQiLCBudWxsLCB3b3JkKTsKCgl9IC8vIGpzVG9rZW5CYXNlKCkKCglmdW5jdGlvbiB0d1Rva2VuU3RyaW5nKHF1b3RlKSB7CgkJcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CgkJCWlmICghbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgcXVvdGUpKSBzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQlyZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5nIik7CgkJfTsKCX0KCgkvLyB0dyBpbnZpc2libGUgY29tbWVudAoJZnVuY3Rpb24gdHdUb2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBtYXliZUVuZCA9IGZhbHNlLAoJCQljaDsKCQl3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQltYXliZUVuZCA9IChjaCA9PSAiJSIpOwoJCX0KCQlyZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKCX0KCgkvLyB0dyBzdHJvbmcgLyBib2xkCglmdW5jdGlvbiB0d1Rva2VuU3Ryb25nKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgbWF5YmVFbmQgPSBmYWxzZSwKCQkJY2g7CgkJd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewoJCQlpZiAoY2ggPT0gIiciICYmIG1heWJlRW5kKSB7CgkJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJbWF5YmVFbmQgPSAoY2ggPT0gIiciKTsKCQl9CgkJcmV0dXJuIHJldCgidGV4dCIsICJzdHJvbmciKTsKCX0KCgkvLyB0dyBjb2RlCglmdW5jdGlvbiB0d1Rva2VuQ29kZShzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIGNoLCBzYiA9IHN0YXRlLmJsb2NrOwoJCQoJCWlmIChzYiAmJiBzdHJlYW0uY3VycmVudCgpKSB7CgkJCXJldHVybiByZXQoImNvZGUiLCAiY29tbWVudCIpOwoJCX0KCgkJaWYgKCFzYiAmJiBzdHJlYW0ubWF0Y2gocmVVbnRpbENvZGVTdG9wKSkgewoJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQlyZXR1cm4gcmV0KCJjb2RlIiwgImNvbW1lbnQiKTsKCQl9CgoJCWlmIChzYiAmJiBzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKHJlQ29kZUJsb2NrU3RvcCkpIHsKCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJcmV0dXJuIHJldCgiY29kZSIsICJjb21tZW50Iik7CgkJfQoKCQljaCA9IHN0cmVhbS5uZXh0KCk7CgkJcmV0dXJuIChzYikgPyByZXQoImNvZGUiLCAiY29tbWVudCIpIDogcmV0KCJjb2RlIiwgImNvbW1lbnQiKTsKCX0KCgkvLyB0dyBlbSAvIGl0YWxpYwoJZnVuY3Rpb24gdHdUb2tlbkVtKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgbWF5YmVFbmQgPSBmYWxzZSwKCQkJY2g7CgkJd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewoJCQlpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CgkJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJbWF5YmVFbmQgPSAoY2ggPT0gIi8iKTsKCQl9CgkJcmV0dXJuIHJldCgidGV4dCIsICJlbSIpOwoJfQoKCS8vIHR3IHVuZGVybGluZWQgdGV4dAoJZnVuY3Rpb24gdHdUb2tlblVuZGVybGluZShzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIG1heWJlRW5kID0gZmFsc2UsCgkJCWNoOwoJCXdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKCQkJaWYgKGNoID09ICJfIiAmJiBtYXliZUVuZCkgewoJCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJCWJyZWFrOwoJCQl9CgkJCW1heWJlRW5kID0gKGNoID09ICJfIik7CgkJfQoJCXJldHVybiByZXQoInRleHQiLCAidW5kZXJsaW5lZCIpOwoJfQoKCS8vIHR3IHN0cmlrZSB0aHJvdWdoIHRleHQgbG9va3MgdWdseQoJLy8gY2hhbmdlIENTUyBpZiBuZWVkZWQKCWZ1bmN0aW9uIHR3VG9rZW5TdHJpa2Uoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBtYXliZUVuZCA9IGZhbHNlLAoJCQljaCwgbnI7CgkJCQoJCXdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKCQkJaWYgKGNoID09ICItIiAmJiBtYXliZUVuZCkgewoJCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJCWJyZWFrOwoJCQl9CgkJCW1heWJlRW5kID0gKGNoID09ICItIik7CgkJfQoJCXJldHVybiByZXQoInRleHQiLCAic3RyaWtldGhyb3VnaCIpOwoJfQoKCS8vIG1hY3JvCglmdW5jdGlvbiB0d1Rva2VuTWFjcm8oc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBjaCwgdG1wLCB3b3JkLCBrbm93bjsKCgkJaWYgKHN0cmVhbS5jdXJyZW50KCkgPT0gJzw8JykgewoJCQlyZXR1cm4gcmV0KCdicmFjZScsICdtYWNybycpOwoJCX0KCgkJY2ggPSBzdHJlYW0ubmV4dCgpOwoJCWlmICghY2gpIHsKCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJcmV0dXJuIHJldChjaCk7CgkJfQoJCWlmIChjaCA9PSAiPiIpIHsKCQkJaWYgKHN0cmVhbS5wZWVrKCkgPT0gJz4nKSB7CgkJCQlzdHJlYW0ubmV4dCgpOwoJCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJCXJldHVybiByZXQoImJyYWNlIiwgIm1hY3JvIik7CgkJCX0KCQl9CgoJCXN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwoJCXdvcmQgPSBzdHJlYW0uY3VycmVudCgpOwoJCWtub3duID0ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkgJiYga2V5d29yZHNbd29yZF07CgoJCWlmIChrbm93bikgewoJCQlyZXR1cm4gcmV0KGtub3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKTsKCQl9CgkJZWxzZSB7CgkJCXJldHVybiByZXQoIm1hY3JvIiwgbnVsbCwgd29yZCk7CgkJfQoJfQoKCS8vIEludGVyZmFjZQoJcmV0dXJuIHsKCQlzdGFydFN0YXRlOiBmdW5jdGlvbiAoYmFzZWNvbHVtbikgewoJCQlyZXR1cm4gewoJCQkJdG9rZW5pemU6IGpzVG9rZW5CYXNlLAoJCQkJaW5kZW50ZWQ6IDAsCgkJCQlsZXZlbDogMAoJCQl9OwoJCX0sCgoJCXRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkgewoJCQlpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwoJCQl2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKCQkJcmV0dXJuIHN0eWxlOwoJCX0sCgoJCWVsZWN0cmljQ2hhcnM6ICIiCgl9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXRpZGRseXdpa2kiLCAidGlkZGx5d2lraSIpOwovL319fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiki/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiki/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRpa2kgd2lraSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0idGlraS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRpa2kuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keSBzdHlsZT0icGFkZGluZzogMjBweDsiPgogICAgPGgxPkNvZGVNaXJyb3I6IFRpa2kgd2lraSBtb2RlPC9oMT4KCjxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KSGVhZGluZ3MKIUhlYWRlciAxCiEhSGVhZGVyIDIKISEhSGVhZGVyIDMKISEhIUhlYWRlciA0CiEhISEhSGVhZGVyIDUKISEhISEhSGVhZGVyIDYKClN0eWxpbmcKLT10aXRsZWJhcj0tCl5eIEJveCBvbiBtdWx0aQpsaW5lcwpvZiBjb250ZW50Xl4KX19ib2xkX18KJydpdGFsaWMnJwo9PT11bmRlcmxpbmU9PT0KOjpjZW50ZXI6OgotLUxpbmUgVGhyb3VnaC0tCgpPcGVyYXRvcnMKfm5wfk5vIHBhcnNlfi9ucH4KCkxpbmsKW2xpbmt8ZGVzY3xub2NhY2hlXQoKV2lraQooKFdpa2kpKQooKFdpa2l8ZGVzYykpCigoV2lraXxkZXNjfHRpbWVvdXQpKQoKVGFibGUKfHxyb3cxIGNvbDF8cm93MSBjb2wyfHJvdzEgY29sMwpyb3cyIGNvbDF8cm93MiBjb2wyfHJvdzIgY29sMwpyb3czIGNvbDF8cm93MyBjb2wyfHJvdzMgY29sM3x8CgpMaXN0czoKKmJsYQoqKmJsYS0xCisrY29udGludWUtYmxhLTEKKioqYmxhLTIKKytjb250aW51ZS1ibGEtMQoqYmxhCitjb250aW51ZS1ibGEKI2JsYQoqKiB0cmEtbGEtbGEKK2NvbnRpbnVlLWJsYQojYmxhCgpQbHVnaW4gKHN0YW5kYXJkKToKe1BMVUdJTihhdHRyPSJteSBhdHRyIil9ClBsdWdpbiBCb2R5CntQTFVHSU59CgpQbHVnaW4gKGlubGluZSk6CntwbHVnaW4gYXR0cj0ibXkgYXR0ciJ9CjwvdGV4dGFyZWE+PC9kaXY+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cgl2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6ICd0aWtpJywgICAgICAKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBlbnRlck1vZGU6ICdrZWVwJywKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICB9KTsKPC9zY3JpcHQ+Cgo8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiki/tiki.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXR3LXN5bnRheGVycm9yIHsKCWNvbG9yOiAjRkZGRkZGOwoJYmFja2dyb3VuZC1jb2xvcjogIzk5MDAwMDsKfQoKLmNtLXR3LWRlbGV0ZWQgewoJdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cn0KCi5jbS10dy1oZWFkZXI1IHsKCWZvbnQtd2VpZ2h0OiBib2xkOwp9Ci5jbS10dy1saXN0aXRlbTpmaXJzdC1jaGlsZCB7IC8qQWRkZWQgZmlyc3QgY2hpbGQgdG8gZml4IGR1cGxpY2F0ZSBwYWRkaW5nIHdoZW4gaGlnaGxpZ2h0aW5nKi8KCXBhZGRpbmctbGVmdDogMTBweDsKfQoKLmNtLXR3LWJveCB7Cglib3JkZXItdG9wLXdpZHRoOiAwcHggISBpbXBvcnRhbnQ7Cglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLXdpZHRoOiAxcHg7Cglib3JkZXItY29sb3I6IGluaGVyaXQ7Cn0KCi5jbS10dy11bmRlcmxpbmUgewoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiki/tiki.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCd0aWtpJywgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKCWZ1bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IsIHJldHVyblRva2VuaXplcikgewoJCXJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CgkJCXdoaWxlICghc3RyZWFtLmVvbCgpKSB7CgkJCQlpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7CgkJCQkJc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlzdHJlYW0ubmV4dCgpOwoJCQl9CgkJCQoJCQlpZiAocmV0dXJuVG9rZW5pemVyKSBzdGF0ZS50b2tlbml6ZSA9IHJldHVyblRva2VuaXplcjsKCQkJCgkJCXJldHVybiBzdHlsZTsKCQl9OwoJfQoJCglmdW5jdGlvbiBpbkxpbmUoc3R5bGUsIHRlcm1pbmF0b3IpIHsKCQlyZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQl3aGlsZSghc3RyZWFtLmVvbCgpKSB7CgkJCQlzdHJlYW0ubmV4dCgpCgkJCX0KCQkJc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CgkJCXJldHVybiBzdHlsZTsKCQl9OwoJfQoJCglmdW5jdGlvbiBpblRleHQoc3RyZWFtLCBzdGF0ZSkgewoJCWZ1bmN0aW9uIGNoYWluKHBhcnNlcikgewoJCQlzdGF0ZS50b2tlbml6ZSA9IHBhcnNlcjsKCQkJcmV0dXJuIHBhcnNlcihzdHJlYW0sIHN0YXRlKTsKCQl9CgkJCgkJdmFyIHNvbCA9IHN0cmVhbS5zb2woKTsKCQl2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwoJCQoJCS8vbm9uIHN0YXJ0IG9mIGxpbmUKCQlzd2l0Y2ggKGNoKSB7IC8vc3dpdGNoIGlzIGdlbmVyYWxseSBtdWNoIGZhc3RlciB0aGFuIGlmLCBzbyBpdCBpcyB1c2VkIGhlcmUKCQkJY2FzZSAieyI6IC8vcGx1Z2luCgkJCQl0eXBlID0gc3RyZWFtLmVhdCgiLyIpID8gImNsb3NlVGFnIiA6ICJvcGVuVGFnIjsKCQkJCXN0cmVhbS5lYXRTcGFjZSgpOwoJCQkJdGFnTmFtZSA9ICIiOwoJCQkJdmFyIGM7CgkJCQl3aGlsZSAoKGMgPSBzdHJlYW0uZWF0KC9bXlxzXHUwMGEwPVwiXCdcLz8ofV0vKSkpIHRhZ05hbWUgKz0gYzsKCQkJCXN0YXRlLnRva2VuaXplID0gaW5QbHVnaW47CgkJCQlyZXR1cm4gInRhZyI7CgkJCQlicmVhazsKCQkJY2FzZSAiXyI6IC8vYm9sZAoJCQkJaWYgKHN0cmVhbS5lYXQoIl8iKSkgewoJCQkJCXJldHVybiBjaGFpbihpbkJsb2NrKCJzdHJvbmciLCAiX18iLCBpblRleHQpKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICInIjogLy9pdGFsaWNzCgkJCQlpZiAoc3RyZWFtLmVhdCgiJyIpKSB7CgkJCQkJLy8gSXRhbGljIHRleHQKCQkJCQlyZXR1cm4gY2hhaW4oaW5CbG9jaygiZW0iLCAiJyciLCBpblRleHQpKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICIoIjovLyBXaWtpIExpbmsKCQkJCWlmIChzdHJlYW0uZWF0KCIoIikpIHsKCQkJCQlyZXR1cm4gY2hhaW4oaW5CbG9jaygidmFyaWFibGUtMiIsICIpKSIsIGluVGV4dCkpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgIlsiOi8vIFdlYmxpbmsKCQkJCXJldHVybiBjaGFpbihpbkJsb2NrKCJ2YXJpYWJsZS0zIiwgIl0iLCBpblRleHQpKTsKCQkJCWJyZWFrOwoJCQljYXNlICJ8IjogLy90YWJsZQoJCQkJaWYgKHN0cmVhbS5lYXQoInwiKSkgewoJCQkJCXJldHVybiBjaGFpbihpbkJsb2NrKCJjb21tZW50IiwgInx8IikpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgIi0iOiAKCQkJCWlmIChzdHJlYW0uZWF0KCI9IikpIHsvL3RpdGxlQmFyCgkJCQkJcmV0dXJuIGNoYWluKGluQmxvY2soImhlYWRlciBzdHJpbmciLCAiPS0iLCBpblRleHQpKTsKCQkJCX0gZWxzZSBpZiAoc3RyZWFtLmVhdCgiLSIpKSB7Ly9kZWxldGVkCgkJCQkJcmV0dXJuIGNoYWluKGluQmxvY2soImVycm9yIHR3LWRlbGV0ZWQiLCAiLS0iLCBpblRleHQpKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICI9IjogLy91bmRlcmxpbmUKCQkJCWlmIChzdHJlYW0ubWF0Y2goIj09IikpIHsKCQkJCQlyZXR1cm4gY2hhaW4oaW5CbG9jaygidHctdW5kZXJsaW5lIiwgIj09PSIsIGluVGV4dCkpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgIjoiOgoJCQkJaWYgKHN0cmVhbS5lYXQoIjoiKSkgewoJCQkJCXJldHVybiBjaGFpbihpbkJsb2NrKCJjb21tZW50IiwgIjo6IikpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgIl4iOiAvL2JveAoJCQkJcmV0dXJuIGNoYWluKGluQmxvY2soInR3LWJveCIsICJeIikpOwoJCQkJYnJlYWs7CgkJCWNhc2UgIn4iOiAvL25wCgkJCQlpZiAoc3RyZWFtLm1hdGNoKCJucH4iKSkgewoJCQkJCXJldHVybiBjaGFpbihpbkJsb2NrKCJtZXRhIiwgIn4vbnB+IikpOwoJCQkJfQoJCQkJYnJlYWs7CgkJfQoJCQoJCS8vc3RhcnQgb2YgbGluZSB0eXBlcwoJCWlmIChzb2wpIHsKCQkJc3dpdGNoIChjaCkgewoJCQkJY2FzZSAiISI6IC8vaGVhZGVyIGF0IHN0YXJ0IG9mIGxpbmUKCQkJCQlpZiAoc3RyZWFtLm1hdGNoKCchISEhIScpKSB7CgkJCQkJCXJldHVybiBjaGFpbihpbkxpbmUoImhlYWRlciBzdHJpbmciKSk7CgkJCQkJfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goJyEhISEnKSkgewoJCQkJCQlyZXR1cm4gY2hhaW4oaW5MaW5lKCJoZWFkZXIgc3RyaW5nIikpOwoJCQkJCX0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCchISEnKSkgewoJCQkJCQlyZXR1cm4gY2hhaW4oaW5MaW5lKCJoZWFkZXIgc3RyaW5nIikpOwoJCQkJCX0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCchIScpKSB7CgkJCQkJCXJldHVybiBjaGFpbihpbkxpbmUoImhlYWRlciBzdHJpbmciKSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJcmV0dXJuIGNoYWluKGluTGluZSgiaGVhZGVyIHN0cmluZyIpKTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQljYXNlICIqIjogLy91bm9yZGVyZWQgbGlzdCBsaW5lIGl0ZW0sIG9yIDxsaSAvPiBhdCBzdGFydCBvZiBsaW5lCgkJCQljYXNlICIjIjogLy9vcmRlcmVkIGxpc3QgbGluZSBpdGVtLCBvciA8bGkgLz4gYXQgc3RhcnQgb2YgbGluZQoJCQkJY2FzZSAiKyI6IC8vb3JkZXJlZCBsaXN0IGxpbmUgaXRlbSwgb3IgPGxpIC8+IGF0IHN0YXJ0IG9mIGxpbmUKCQkJCQlyZXR1cm4gY2hhaW4oaW5MaW5lKCJ0dy1saXN0aXRlbSBicmFja2V0IikpOwoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJCQoJCS8vc3RyZWFtLmVhdFdoaWxlKC9bJntdLyk7IHdhcyBlYXRpbmcgdXAgcGx1Z2lucywgdHVybmVkIG9mZiB0byBhY3QgbGVzcyBsaWtlIGh0bWwgYW5kIG1vcmUgbGlrZSB0aWtpCgkJcmV0dXJuIG51bGw7Cgl9CgkKCXZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CgoJLy8gUmV0dXJuIHZhcmlhYmxlcyBmb3IgdG9rZW5pemVycwoJdmFyIHBsdWdpbk5hbWUsIHR5cGU7CglmdW5jdGlvbiBpblBsdWdpbihzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCQl2YXIgcGVlayA9IHN0cmVhbS5wZWVrKCk7CgkJCgkJaWYgKGNoID09ICJ9IikgewoJCQlzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKCQkJLy90eXBlID0gY2ggPT0gIikiID8gImVuZFBsdWdpbiIgOiAic2VsZmNsb3NlUGx1Z2luIjsgaW5QbHVnaW4KCQkJcmV0dXJuICJ0YWciOwoJCX0gZWxzZSBpZiAoY2ggPT0gIigiIHx8IGNoID09ICIpIikgewoJCQlyZXR1cm4gImJyYWNrZXQiOwoJCX0gZWxzZSBpZiAoY2ggPT0gIj0iKSB7CgkJCXR5cGUgPSAiZXF1YWxzIjsKCQkJCgkJCWlmIChwZWVrID09ICI+IikgewoJCQkJY2ggPSBzdHJlYW0ubmV4dCgpOwoJCQkJcGVlayA9IHN0cmVhbS5wZWVrKCk7CgkJCX0KCQkJCgkJCS8vaGVyZSB3ZSBkZXRlY3QgdmFsdWVzIGRpcmVjdGx5IGFmdGVyIGVxdWFsIGNoYXJhY3RlciB3aXRoIG5vIHF1b3RlcwoJCQlpZiAoIS9bXCdcIl0vLnRlc3QocGVlaykpIHsKCQkJCXN0YXRlLnRva2VuaXplID0gaW5BdHRyaWJ1dGVOb1F1b3RlKCk7CgkJCX0KCQkJLy9lbmQgZGV0ZWN0IHZhbHVlcwoJCQkKCQkJcmV0dXJuICJvcGVyYXRvciI7CgkJfSBlbHNlIGlmICgvW1wnXCJdLy50ZXN0KGNoKSkgewoJCQlzdGF0ZS50b2tlbml6ZSA9IGluQXR0cmlidXRlKGNoKTsKCQkJcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXN0cmVhbS5lYXRXaGlsZSgvW15cc1x1MDBhMD1cIlwnXC8/XS8pOwoJCQlyZXR1cm4gImtleXdvcmQiOwoJCX0KCX0KCglmdW5jdGlvbiBpbkF0dHJpYnV0ZShxdW90ZSkgewoJCXJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CgkJCXdoaWxlICghc3RyZWFtLmVvbCgpKSB7CgkJCQlpZiAoc3RyZWFtLm5leHQoKSA9PSBxdW90ZSkgewoJCQkJCXN0YXRlLnRva2VuaXplID0gaW5QbHVnaW47CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJcmV0dXJuICJzdHJpbmciOwoJCX07Cgl9CgkKCWZ1bmN0aW9uIGluQXR0cmlidXRlTm9RdW90ZSgpIHsKCQlyZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQl3aGlsZSAoIXN0cmVhbS5lb2woKSkgewoJCQkJdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCQkJCXZhciBwZWVrID0gc3RyZWFtLnBlZWsoKTsKCQkJCWlmIChjaCA9PSAiICIgfHwgY2ggPT0gIiwiIHx8IC9bICl9XS8udGVzdChwZWVrKSkgewoJCQkJCXN0YXRlLnRva2VuaXplID0gaW5QbHVnaW47CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJcmV0dXJuICJzdHJpbmciOwoJCX07Cgl9CgoJdmFyIGN1clN0YXRlLCBzZXRTdHlsZTsKCWZ1bmN0aW9uIHBhc3MoKSB7CgkJZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3VyU3RhdGUuY2MucHVzaChhcmd1bWVudHNbaV0pOwoJfQoJCglmdW5jdGlvbiBjb250KCkgewoJCXBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBwdXNoQ29udGV4dChwbHVnaW5OYW1lLCBzdGFydE9mTGluZSkgewoJCXZhciBub0luZGVudCA9IGN1clN0YXRlLmNvbnRleHQgJiYgY3VyU3RhdGUuY29udGV4dC5ub0luZGVudDsKCQljdXJTdGF0ZS5jb250ZXh0ID0gewoJCQlwcmV2OiBjdXJTdGF0ZS5jb250ZXh0LAoJCQlwbHVnaW5OYW1lOiBwbHVnaW5OYW1lLAoJCQlpbmRlbnQ6IGN1clN0YXRlLmluZGVudGVkLAoJCQlzdGFydE9mTGluZTogc3RhcnRPZkxpbmUsCgkJCW5vSW5kZW50OiBub0luZGVudAoJCX07Cgl9CgkKCWZ1bmN0aW9uIHBvcENvbnRleHQoKSB7CgkJaWYgKGN1clN0YXRlLmNvbnRleHQpIGN1clN0YXRlLmNvbnRleHQgPSBjdXJTdGF0ZS5jb250ZXh0LnByZXY7Cgl9CgoJZnVuY3Rpb24gZWxlbWVudCh0eXBlKSB7CgkJaWYgKHR5cGUgPT0gIm9wZW5QbHVnaW4iKSB7Y3VyU3RhdGUucGx1Z2luTmFtZSA9IHBsdWdpbk5hbWU7IHJldHVybiBjb250KGF0dHJpYnV0ZXMsIGVuZHBsdWdpbihjdXJTdGF0ZS5zdGFydE9mTGluZSkpO30KCQllbHNlIGlmICh0eXBlID09ICJjbG9zZVBsdWdpbiIpIHsKCQkJdmFyIGVyciA9IGZhbHNlOwoJCQlpZiAoY3VyU3RhdGUuY29udGV4dCkgewoJCQkJZXJyID0gY3VyU3RhdGUuY29udGV4dC5wbHVnaW5OYW1lICE9IHBsdWdpbk5hbWU7CgkJCQlwb3BDb250ZXh0KCk7CgkJCX0gZWxzZSB7CgkJCQllcnIgPSB0cnVlOwoJCQl9CgkJCWlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKCQkJcmV0dXJuIGNvbnQoZW5kY2xvc2VwbHVnaW4oZXJyKSk7CgkJfQoJCWVsc2UgaWYgKHR5cGUgPT0gInN0cmluZyIpIHsKCQkJaWYgKCFjdXJTdGF0ZS5jb250ZXh0IHx8IGN1clN0YXRlLmNvbnRleHQubmFtZSAhPSAiIWNkYXRhIikgcHVzaENvbnRleHQoIiFjZGF0YSIpOwoJCQlpZiAoY3VyU3RhdGUudG9rZW5pemUgPT0gaW5UZXh0KSBwb3BDb250ZXh0KCk7CgkJCXJldHVybiBjb250KCk7CgkJfQoJCWVsc2UgcmV0dXJuIGNvbnQoKTsKCX0KCQoJZnVuY3Rpb24gZW5kcGx1Z2luKHN0YXJ0T2ZMaW5lKSB7CgkJcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKCQkJaWYgKAoJCQl0eXBlID09ICJzZWxmY2xvc2VQbHVnaW4iIHx8CgkJCXR5cGUgPT0gImVuZFBsdWdpbiIKCQkpCgkJCQlyZXR1cm4gY29udCgpOwoJCQlpZiAodHlwZSA9PSAiZW5kUGx1Z2luIikge3B1c2hDb250ZXh0KGN1clN0YXRlLnBsdWdpbk5hbWUsIHN0YXJ0T2ZMaW5lKTsgcmV0dXJuIGNvbnQoKTt9CgkJCXJldHVybiBjb250KCk7CgkJfTsKCX0KCQoJZnVuY3Rpb24gZW5kY2xvc2VwbHVnaW4oZXJyKSB7CgkJcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKCQkJaWYgKGVycikgc2V0U3R5bGUgPSAiZXJyb3IiOwoJCQlpZiAodHlwZSA9PSAiZW5kUGx1Z2luIikgcmV0dXJuIGNvbnQoKTsKCQkJcmV0dXJuIHBhc3MoKTsKCQl9Cgl9CgoJZnVuY3Rpb24gYXR0cmlidXRlcyh0eXBlKSB7CgkJaWYgKHR5cGUgPT0gImtleXdvcmQiKSB7c2V0U3R5bGUgPSAiYXR0cmlidXRlIjsgcmV0dXJuIGNvbnQoYXR0cmlidXRlcyk7fQoJCWlmICh0eXBlID09ICJlcXVhbHMiKSByZXR1cm4gY29udChhdHR2YWx1ZSwgYXR0cmlidXRlcyk7CgkJcmV0dXJuIHBhc3MoKTsKCX0KCWZ1bmN0aW9uIGF0dHZhbHVlKHR5cGUpIHsKCQlpZiAodHlwZSA9PSAia2V5d29yZCIpIHtzZXRTdHlsZSA9ICJzdHJpbmciOyByZXR1cm4gY29udCgpO30KCQlpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7CgkJCXJldHVybiBwYXNzKCk7Cgl9CglmdW5jdGlvbiBhdHR2YWx1ZW1heWJlKHR5cGUpIHsKCQlpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7CgkJZWxzZSByZXR1cm4gcGFzcygpOwoJfQoJcmV0dXJuIHsKCQlzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIHt0b2tlbml6ZTogaW5UZXh0LCBjYzogW10sIGluZGVudGVkOiAwLCBzdGFydE9mTGluZTogdHJ1ZSwgcGx1Z2luTmFtZTogbnVsbCwgY29udGV4dDogbnVsbH07CgkJfSwKCQl0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQlpZiAoc3RyZWFtLnNvbCgpKSB7CgkJCQlzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CgkJCQlzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwoJCQl9CgkJCWlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CgoJCQlzZXRTdHlsZSA9IHR5cGUgPSBwbHVnaW5OYW1lID0gbnVsbDsKCQkJdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgkJCQlpZiAoKHN0eWxlIHx8IHR5cGUpICYmIHN0eWxlICE9ICJjb21tZW50IikgewoJCQkJY3VyU3RhdGUgPSBzdGF0ZTsKCQkJCXdoaWxlICh0cnVlKSB7CgkJCQkJdmFyIGNvbWIgPSBzdGF0ZS5jYy5wb3AoKSB8fCBlbGVtZW50OwoJCQkJCWlmIChjb21iKHR5cGUgfHwgc3R5bGUpKSBicmVhazsKCQkJCX0KCQkJfQoJCQlzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlOwoJCQlyZXR1cm4gc2V0U3R5bGUgfHwgc3R5bGU7CgkJCQl9LAoJCWluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewoJCQl2YXIgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7CgkJCWlmIChjb250ZXh0ICYmIGNvbnRleHQubm9JbmRlbnQpIHJldHVybiAwOwoJCQlpZiAoY29udGV4dCAmJiAvXntcLy8udGVzdCh0ZXh0QWZ0ZXIpKQoJCQkJY29udGV4dCA9IGNvbnRleHQucHJldjsKCQkJd2hpbGUgKGNvbnRleHQgJiYgIWNvbnRleHQuc3RhcnRPZkxpbmUpCgkJCQljb250ZXh0ID0gY29udGV4dC5wcmV2OwoJCQlpZiAoY29udGV4dCkgcmV0dXJuIGNvbnRleHQuaW5kZW50ICsgaW5kZW50VW5pdDsKCQkJZWxzZSByZXR1cm4gMDsKCQl9LAoJCWNvbXBhcmVTdGF0ZXM6IGZ1bmN0aW9uKGEsIGIpIHsKCQkJaWYgKGEuaW5kZW50ZWQgIT0gYi5pbmRlbnRlZCB8fCBhLnBsdWdpbk5hbWUgIT0gYi5wbHVnaW5OYW1lKSByZXR1cm4gZmFsc2U7CgkJCWZvciAodmFyIGNhID0gYS5jb250ZXh0LCBjYiA9IGIuY29udGV4dDsgOyBjYSA9IGNhLnByZXYsIGNiID0gY2IucHJldikgewoJCQkJaWYgKCFjYSB8fCAhY2IpIHJldHVybiBjYSA9PSBjYjsKCQkJCWlmIChjYS5wbHVnaW5OYW1lICE9IGNiLnBsdWdpbk5hbWUpIHJldHVybiBmYWxzZTsKCQkJfQoJCX0sCgkJZWxlY3RyaWNDaGFyczogIi8iCgl9Owp9KTsKCi8vSSBmaWd1cmUsIHdoeSBub3QKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3Rpa2kiLCAidGlraSIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/vbscript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/vbscript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZCU2NyaXB0IG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ2YnNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVkJTY3JpcHQgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CicgUGV0ZSBHdWhsCicgMDMtMDQtMjAxMgonCicgQmFzaWMgVkJTY3JpcHQgc3VwcG9ydCBmb3IgY29kZW1pcnJvcjIKCkNvbnN0IEZvclJlYWRpbmcgPSAxLCBGb3JXcml0aW5nID0gMiwgRm9yQXBwZW5kaW5nID0gOAoKQ2FsbCBTdWIwMjBfUG9zdEJyb2FkY2FzdFRvVXJiYW5BaXJzaGlwKHN0clVzZXJOYW1lLCBzdHJQYXNzd29yZCwgaW50VHJhbnNtaXRJRCwgc3RyUmVzcG9uc2UpCgpJZiBOb3QgSXNOdWxsKHN0clJlc3BvbnNlKSBBTkQgTGVuKHN0clJlc3BvbnNlKSA9IDAgVGhlbgoJYm9vbFRyYW5zbWl0T2tZTiA9IEZhbHNlCkVsc2UKCScgV1NjcmlwdC5FY2hvICJPaCBIYXBweSBEYXkhIE9oIEhhcHB5IERBWSEiCglib29sVHJhbnNtaXRPa1lOID0gVHJ1ZQpFbmQgSWYKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC92YnNjcmlwdDwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/vbscript/vbscript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2YnNjcmlwdCIsIGZ1bmN0aW9uKCkgewogIHZhciByZWdleFZCU2NyaXB0S2V5d29yZCA9IC9eKD86Q2FsbHxDYXNlfENEYXRlfENsZWFyfENJbnR8Q0xuZ3xDb25zdHxDU3RyfERlc2NyaXB0aW9ufERpbXxEb3xFYWNofEVsc2V8RWxzZUlmfEVuZHxFcnJ8RXJyb3J8RXhpdHxGYWxzZXxGb3J8RnVuY3Rpb258SWZ8TENhc2V8TG9vcHxMVHJpbXxOZXh0fE5vdGhpbmd8Tm93fE51bWJlcnxPbnxQcmVzZXJ2ZXxRdWl0fFJlRGltfFJlc3VtZXxSVHJpbXxTZWxlY3R8U2V0fFN1YnxUaGVufFRvfFRyaW18VHJ1ZXxVQm91bmR8VUNhc2V8VW50aWx8VmJDcnxWYkNyTGZ8VmJMZnxWYlRhYikkL2ltOwoKICByZXR1cm4gewogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICBpZiAoY2ggPT0gIiciKSB7CiAgICAgIAlzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIAlyZXR1cm4gImNvbW1lbnQiOwogICAgICB9CiAgICAgIGlmIChjaCA9PSAnIicpIHsKICAgICAgCXN0cmVhbS5za2lwVG8oJyInKTsKICAgICAgCXJldHVybiAic3RyaW5nIjsKICAgICAgfQoKICAgICAgaWYgKC9cdy8udGVzdChjaCkpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CiAgICAgICAgaWYgKHJlZ2V4VkJTY3JpcHRLZXl3b3JkLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHJldHVybiAia2V5d29yZCI7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdmJzY3JpcHQiLCAidmJzY3JpcHQiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZlbG9jaXR5IG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ2ZWxvY2l0eS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWZWxvY2l0eSBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMjIFZlbG9jaXR5IENvZGUgRGVtbwojKgogICBiYXNlZCBvbiBQTC9TUUwgbW9kZSBieSBQZXRlciBSYWdhbml0c2NoLCBhZGFwdGVkIHRvIFZlbG9jaXR5IGJ5IFN0ZXZlIE8nSGFyYSAoIGh0dHA6Ly93d3cucGl2b3RhbC1zb2x1dGlvbnMuY28udWsgKQogICBBdWd1c3QgMjAxMQoqIwoKIyoKICAgVGhpcyBpcyBhIG11bHRpbGluZSBjb21tZW50LgogICBUaGlzIGlzIHRoZSBzZWNvbmQgbGluZQoqIwoKI1tbIGhlbGxvIHN0ZXZlCiAgIFRoaXMgaGFzIGludmFsaWQgc3ludGF4IHRoYXQgd291bGQgbm9ybWFsbHkgbmVlZCAicG9vciBtYW4ncyBlc2NhcGluZyIgbGlrZToKCiAgICNkZWZpbmUoKQoKICAgJHtibGFoCl1dIwoKI2luY2x1ZGUoICJkaXNjbGFpbWVyLnR4dCIgIm9waW5pb24udHh0IiApCiNpbmNsdWRlKCAkZm9vICRiYXIgKQoKI3BhcnNlKCAibGVjb3JidXNpZXIudm0iICkKI3BhcnNlKCAkZm9vICkKCiNldmFsdWF0ZSggJ3N0cmluZyB3aXRoIFZUTCAjaWYodHJ1ZSl3aWxsIGJlIGRpc3BsYXllZCNlbmQnICkKCiNkZWZpbmUoICRoZWxsbyApIEhlbGxvICR3aG8gI2VuZCAjc2V0KCAkd2hvID0gIldvcmxkISIpICRoZWxsbyAjIyBkaXNwbGF5cyBIZWxsbyBXb3JsZCEKCiNmb3JlYWNoKCAkY3VzdG9tZXIgaW4gJGN1c3RvbWVyTGlzdCApCgogICAgJGZvcmVhY2guY291bnQgJGN1c3RvbWVyLk5hbWUKCiAgICAjaWYoICRmb28gPT0gJHtiYXJ9KQogICAgICAgIGl0J3MgdHJ1ZSEKICAgICAgICAjYnJlYWsKICAgICN7ZWxzZX0KICAgICAgICBpdCdzIG5vdCEKICAgICAgICAjc3RvcAogICAgI2VuZAoKICAgICNpZiAoJGZvcmVhY2gucGFyZW50Lmhhc05leHQpCiAgICAgICAgJHZlbG9jaXR5Q291bnQKICAgICNlbmQKI2VuZAoKJHNvbWVPYmplY3QuZ2V0VmFsdWVzKCJ0aGlzIGlzIGEgc3RyaW5nIHNwbGl0CiAgICAgICAgYWNyb3NzIGxpbmVzIikKCiNtYWNybyggdGFibGVyb3dzICRjb2xvciAkc29tZWxpc3QgKQogICAgI2ZvcmVhY2goICRzb21ldGhpbmcgaW4gJHNvbWVsaXN0ICkKICAgICAgICA8dHI+PHRkIGJnY29sb3I9JGNvbG9yPiRzb21ldGhpbmc8L3RkPjwvdHI+CiAgICAjZW5kCiNlbmQKCiN0YWJsZXJvd3MoInJlZCIgWyJkYWRzZGYiLCJkc2EiXSkKCiAgIFZhcmlhYmxlIHJlZmVyZW5jZTogI3NldCggJG1vbmtleSA9ICRiaWxsICkKICAgU3RyaW5nIGxpdGVyYWw6ICNzZXQoICRtb25rZXkuRnJpZW5kID0gJ21vbmljYScgKQogICBQcm9wZXJ0eSByZWZlcmVuY2U6ICNzZXQoICRtb25rZXkuQmxhbWUgPSAkd2hpdGVob3VzZS5MZWFrICkKICAgTWV0aG9kIHJlZmVyZW5jZTogI3NldCggJG1vbmtleS5QbGFuID0gJHNwaW5kb2N0b3Iud2VhdmUoJHdlYikgKQogICBOdW1iZXIgbGl0ZXJhbDogI3NldCggJG1vbmtleS5OdW1iZXIgPSAxMjMgKQogICBSYW5nZSBvcGVyYXRvcjogI3NldCggJG1vbmtleS5OdW1iZXJzID0gWzEuLjNdICkKICAgT2JqZWN0IGxpc3Q6ICNzZXQoICRtb25rZXkuU2F5ID0gWyJOb3QiLCAkbXksICJmYXVsdCJdICkKICAgT2JqZWN0IG1hcDogI3NldCggJG1vbmtleS5NYXAgPSB7ImJhbmFuYSIgOiAiZ29vZCIsICJyb2FzdCBiZWVmIiA6ICJiYWQifSkKClRoZSBSSFMgY2FuIGFsc28gYmUgYSBzaW1wbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uLCBzdWNoIGFzOgpBZGRpdGlvbjogI3NldCggJHZhbHVlID0gJGZvbyArIDEgKQogICBTdWJ0cmFjdGlvbjogI3NldCggJHZhbHVlID0gJGJhciAtIDEgKQogICBNdWx0aXBsaWNhdGlvbjogI3NldCggJHZhbHVlID0gJGZvbyAqICRiYXIgKQogICBEaXZpc2lvbjogI3NldCggJHZhbHVlID0gJGZvbyAvICRiYXIgKQogICBSZW1haW5kZXI6ICNzZXQoICR2YWx1ZSA9ICRmb28gJSAkYmFyICkKCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAibmlnaHQiLAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgbW9kZTogInRleHQvdmVsb2NpdHkiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQvdmVsb2NpdHk8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/velocity.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2ZWxvY2l0eSIsIGZ1bmN0aW9uKGNvbmZpZykgewogICAgZnVuY3Rpb24gcGFyc2VXb3JkcyhzdHIpIHsKICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KCiAgICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0CiAgICB2YXIga2V5d29yZHMgPSBwYXJzZVdvcmRzKCIjZW5kICNlbHNlICNicmVhayAjc3RvcCAjW1sgI11dICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3tlbmR9ICN7ZWxzZX0gI3ticmVha30gI3tzdG9wfSIpOwogICAgdmFyIGZ1bmN0aW9ucyA9IHBhcnNlV29yZHMoIiNpZiAjZWxzZWlmICNmb3JlYWNoICNzZXQgI2luY2x1ZGUgI3BhcnNlICNtYWNybyAjZGVmaW5lICNldmFsdWF0ZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIje2lmfSAje2Vsc2VpZn0gI3tmb3JlYWNofSAje3NldH0gI3tpbmNsdWRlfSAje3BhcnNlfSAje21hY3JvfSAje2RlZmluZX0gI3tldmFsdWF0ZX0iKTsKICAgIHZhciBzcGVjaWFscyA9IHBhcnNlV29yZHMoIiRmb3JlYWNoLmNvdW50ICRmb3JlYWNoLmhhc05leHQgJGZvcmVhY2guZmlyc3QgJGZvcmVhY2gubGFzdCAkZm9yZWFjaC50b3Btb3N0ICRmb3JlYWNoLnBhcmVudCAkdmVsb2NpdHlDb3VudCIpOwogICAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICAgIHZhciBtdWx0aUxpbmVTdHJpbmdzID10cnVlOwoKICAgIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICAgICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBiZWZvcmVQYXJhbXMgPSBzdGF0ZS5iZWZvcmVQYXJhbXM7CiAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gZmFsc2U7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAvLyBzdGFydCBvZiBzdHJpbmc/CiAgICAgICAgaWYgKChjaCA9PSAnIicgfHwgY2ggPT0gIiciKSAmJiBzdGF0ZS5pblBhcmFtcykKICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoKSk7CiAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgICAgIGVsc2UgaWYgKC9bXFtcXXt9XChcKSw7XC5dLy50ZXN0KGNoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIigiICYmIGJlZm9yZVBhcmFtcykgc3RhdGUuaW5QYXJhbXMgPSB0cnVlOwogICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAiKSIpIHN0YXRlLmluUGFyYW1zID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAvLyBzdGFydCBvZiBhIG51bWJlciB2YWx1ZT8KICAgICAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLyk7CiAgICAgICAgICAgIHJldHVybiAibnVtYmVyIjsKICAgICAgICB9CiAgICAgICAgLy8gbXVsdGkgbGluZSBjb21tZW50PwogICAgICAgIGVsc2UgaWYgKGNoID09ICIjIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7CiAgICAgICAgfQogICAgICAgIC8vIHVucGFyc2VkIGNvbnRlbnQ/CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIHN0cmVhbS5tYXRjaCgvICpcWyAqXFsvKSkgewogICAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5VbnBhcnNlZCk7CiAgICAgICAgfQogICAgICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQ/CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIHN0cmVhbS5lYXQoIiMiKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgfQogICAgICAgIC8vIHZhcmlhYmxlPwogICAgICAgIGVsc2UgaWYgKGNoID09ICIkIikgewogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xkXCRfXC57fV0vKTsKICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFscz8KICAgICAgICAgICAgaWYgKHNwZWNpYWxzICYmIHNwZWNpYWxzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5iZWZvcmVQYXJhbXMgPSB0cnVlOwogICAgICAgICAgICAgICAgcmV0dXJuICJidWlsdGluIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBpcyBpdCBhIG9wZXJhdG9yPwogICAgICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gZ2V0IHRoZSB3aG9sZSB3b3JkCiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfe31dLyk7CiAgICAgICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAvLyBpcyBpdCBvbmUgb2YgdGhlIGxpc3RlZCBrZXl3b3Jkcz8KICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKQogICAgICAgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICAgICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSB8fAogICAgICAgICAgICAgICAgc3RyZWFtLmN1cnJlbnQoKS5tYXRjaCgvXiNbYS16MC05X10rICokL2kpICYmIHN0cmVhbS5wZWVrKCk9PSIoIikgewogICAgICAgICAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZGVmYXVsdDoganVzdCBhICJ3b3JkIgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHsKICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZW5kKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIiMiICYmIG1heWJlRW5kKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5VbnBhcnNlZChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIG1heWJlRW5kID0gMCwgY2g7CiAgICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIiMiICYmIG1heWJlRW5kID09IDIpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoID09ICJdIikKICAgICAgICAgICAgICAgIG1heWJlRW5kKys7CiAgICAgICAgICAgIGVsc2UgaWYgKGNoICE9ICIgIikKICAgICAgICAgICAgICAgIG1heWJlRW5kID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH0KICAgIC8vIEludGVyZmFjZQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICAgIGJlZm9yZVBhcmFtczogZmFsc2UsCiAgICAgICAgICAgICAgICBpblBhcmFtczogZmFsc2UKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdmVsb2NpdHkiLCAidmVsb2NpdHkiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZlcmlsb2cgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InZlcmlsb2cuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBpbnNldCAjZGVlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWZXJpbG9nIG1vZGU8L2gxPgoKPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogVmVyaWxvZyBkZW1vIGNvZGUgKi8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICB3Yl9tYXN0ZXJfbW9kZWwudiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFNQSSBJUCBjb3JlIHByb2plY3QgICAgICAgICAgICAgICAgLy8vLwovLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvcHJvamVjdHMvc3BpLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgLSBTaW1vbiBTcm90IChzaW1vbnNAb3BlbmNvcmVzLm9yZykgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgQmFzZWQgb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgLSBpMmMvYmVuY2gvdmVyaWxvZy93Yl9tYXN0ZXJfbW9kZWwudiAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgIENvcHlyaWdodCAoQykgMjAwMSBSaWNoYXJkIEhlcnZlaWxsZSAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICBBbGwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBhdmFsaWFibGUgaW4gdGhlIFJlYWRtZS50eHQgICAvLy8vCi8vLy8gIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDIgQXV0aG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLwovLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCi8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCi8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLwovLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCi8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCi8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLwovLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCi8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCi8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmBpbmNsdWRlICJ0aW1lc2NhbGUudiIKCm1vZHVsZSB3Yl9tYXN0ZXJfbW9kZWwoY2xrLCByc3QsIGFkciwgZGluLCBkb3V0LCBjeWMsIHN0Yiwgd2UsIHNlbCwgYWNrLCBlcnIsIHJ0eSk7CgogIHBhcmFtZXRlciBkd2lkdGggPSAzMjsKICBwYXJhbWV0ZXIgYXdpZHRoID0gMzI7CiAgCiAgaW5wdXQgICAgICAgICAgICAgICAgICBjbGssIHJzdDsKICBvdXRwdXQgW2F3aWR0aCAgIC0xOjBdIGFkcjsKICBpbnB1dCAgW2R3aWR0aCAgIC0xOjBdIGRpbjsKICBvdXRwdXQgW2R3aWR0aCAgIC0xOjBdIGRvdXQ7CiAgb3V0cHV0ICAgICAgICAgICAgICAgICBjeWMsIHN0YjsKICBvdXRwdXQgICAgICAgICAgICAgICAgIHdlOwogIG91dHB1dCBbZHdpZHRoLzggLTE6MF0gc2VsOwogIGlucHV0ICAgICAgICAgICAgICAgICAgYWNrLCBlcnIsIHJ0eTsKICAKICAvLyBJbnRlcm5hbCBzaWduYWxzCiAgcmVnICAgIFthd2lkdGggICAtMTowXSBhZHI7CiAgcmVnICAgIFtkd2lkdGggICAtMTowXSBkb3V0OwogIHJlZyAgICAgICAgICAgICAgICAgICAgY3ljLCBzdGI7CiAgcmVnICAgICAgICAgICAgICAgICAgICB3ZTsKICByZWcgICAgW2R3aWR0aC84IC0xOjBdIHNlbDsKICAgICAgICAgCiAgcmVnICAgIFtkd2lkdGggICAtMTowXSBxOwogIAogIC8vIE1lbW9yeSBMb2dpYwogIGluaXRpYWwKICAgIGJlZ2luCiAgICAgIGFkciAgPSB7YXdpZHRoezEnYnh9fTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICBjeWMgID0gMSdiMDsKICAgICAgc3RiICA9IDEnYng7CiAgICAgIHdlICAgPSAxJ2h4OwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYnh9fTsKICAgICAgIzE7CiAgICBlbmQKICAKICAvLyBXaXNoYm9uZSB3cml0ZSBjeWNsZQogIHRhc2sgd2Jfd3JpdGU7CiAgICBpbnB1dCAgIGRlbGF5OwogICAgaW50ZWdlciBkZWxheTsKICAKICAgIGlucHV0IFthd2lkdGggLTE6MF0gYTsKICAgIGlucHV0IFtkd2lkdGggLTE6MF0gZDsKICAKICAgIGJlZ2luCiAgCiAgICAgIC8vIHdhaXQgaW5pdGlhbCBkZWxheQogICAgICByZXBlYXQoZGVsYXkpIEAocG9zZWRnZSBjbGspOwogIAogICAgICAvLyBhc3NlcnQgd2lzaGJvbmUgc2lnbmFsCiAgICAgICMxOwogICAgICBhZHIgID0gYTsKICAgICAgZG91dCA9IGQ7CiAgICAgIGN5YyAgPSAxJ2IxOwogICAgICBzdGIgID0gMSdiMTsKICAgICAgd2UgICA9IDEnYjE7CiAgICAgIHNlbCAgPSB7ZHdpZHRoLzh7MSdiMX19OwogICAgICBAKHBvc2VkZ2UgY2xrKTsKICAKICAgICAgLy8gd2FpdCBmb3IgYWNrbm93bGVkZ2UgZnJvbSBzbGF2ZQogICAgICB3aGlsZSh+YWNrKSBAKHBvc2VkZ2UgY2xrKTsKICAKICAgICAgLy8gbmVnYXRlIHdpc2hib25lIHNpZ25hbHMKICAgICAgIzE7CiAgICAgIGN5YyAgPSAxJ2IwOwogICAgICBzdGIgID0gMSdieDsKICAgICAgYWRyICA9IHthd2lkdGh7MSdieH19OwogICAgICBkb3V0ID0ge2R3aWR0aHsxJ2J4fX07CiAgICAgIHdlICAgPSAxJ2h4OwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYnh9fTsKICAKICAgIGVuZAogIGVuZHRhc2sKICAKICAvLyBXaXNoYm9uZSByZWFkIGN5Y2xlCiAgdGFzayB3Yl9yZWFkOwogICAgaW5wdXQgICBkZWxheTsKICAgIGludGVnZXIgZGVsYXk7CiAgCiAgICBpbnB1dCAgW2F3aWR0aCAtMTowXSAgYTsKICAgIG91dHB1dCAgW2R3aWR0aCAtMTowXSBkOwogIAogICAgYmVnaW4KICAKICAgICAgLy8gd2FpdCBpbml0aWFsIGRlbGF5CiAgICAgIHJlcGVhdChkZWxheSkgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIGFzc2VydCB3aXNoYm9uZSBzaWduYWxzCiAgICAgICMxOwogICAgICBhZHIgID0gYTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICBjeWMgID0gMSdiMTsKICAgICAgc3RiICA9IDEnYjE7CiAgICAgIHdlICAgPSAxJ2IwOwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYjF9fTsKICAgICAgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIHdhaXQgZm9yIGFja25vd2xlZGdlIGZyb20gc2xhdmUKICAgICAgd2hpbGUofmFjaykgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIG5lZ2F0ZSB3aXNoYm9uZSBzaWduYWxzCiAgICAgICMxOwogICAgICBjeWMgID0gMSdiMDsKICAgICAgc3RiICA9IDEnYng7CiAgICAgIGFkciAgPSB7YXdpZHRoezEnYnh9fTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICB3ZSAgID0gMSdoeDsKICAgICAgc2VsICA9IHtkd2lkdGgvOHsxJ2J4fX07CiAgICAgIGQgICAgPSBkaW47CiAgCiAgICBlbmQKICBlbmR0YXNrCiAgCiAgLy8gV2lzaGJvbmUgY29tcGFyZSBjeWNsZSAocmVhZCBkYXRhIGZyb20gbG9jYXRpb24gYW5kIGNvbXBhcmUgd2l0aCBleHBlY3RlZCBkYXRhKQogIHRhc2sgd2JfY21wOwogICAgaW5wdXQgICBkZWxheTsKICAgIGludGVnZXIgZGVsYXk7CiAgCiAgICBpbnB1dCBbYXdpZHRoIC0xOjBdIGE7CiAgICBpbnB1dCBbZHdpZHRoIC0xOjBdIGRfZXhwOwogIAogICAgYmVnaW4KICAgICAgd2JfcmVhZCAoZGVsYXksIGEsIHEpOwoKICAgICAgaWYgKGRfZXhwICE9PSBxKSBiZWdpbgogICAgICAgICRkaXNwbGF5KCJcbi0tLSBFUlJPUjogQXQgYWRkcmVzcyAweCUweCwgZ290IDB4JTB4LCBleHBlY3RlZCAweCUweCBhdCB0aW1lICV0IiwgYSwgcSwgZF9leHAsICR0aW1lKTsKICAgICAgICAkc3RvcDsKICAgICAgZW5kCiAgICBlbmQKICBlbmR0YXNrCiAgCmVuZG1vZHVsZQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC12ZXJpbG9nIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlNpbXBsZSBtb2RlIHRoYXQgdHJpZXMgdG8gaGFuZGxlIFZlcmlsb2ctbGlrZSBsYW5ndWFnZXMgYXMgd2VsbCBhcyBpdAogICAgY2FuLiBUYWtlcyBvbmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOiA8Y29kZT5rZXl3b3JkczwvY29kZT4sIGFuCiAgICBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgYXJlIHRoZSBrZXl3b3JkcyBpbiB0aGUgbGFuZ3VhZ2UuPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtdmVyaWxvZzwvY29kZT4gKFZlcmlsb2cgY29kZSkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/verilog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2ZXJpbG9nIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsNCiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwNCiAgICAgIGtleXdvcmRzID0gcGFyc2VyQ29uZmlnLmtleXdvcmRzIHx8IHt9LA0KICAgICAgYmxvY2tLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5ibG9ja0tleXdvcmRzIHx8IHt9LA0KICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sDQogICAgICBob29rcyA9IHBhcnNlckNvbmZpZy5ob29rcyB8fCB7fSwNCiAgICAgIG11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5nczsNCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1smfH4+PCFcKVwoKiMlQCtcLz0/XDo7fXssXC5cXlwtXFtcXV0vOw0KDQogIHZhciBjdXJQdW5jOw0KDQogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsNCiAgICBpZiAoaG9va3NbY2hdKSB7DQogICAgICB2YXIgcmVzdWx0ID0gaG9va3NbY2hdKHN0cmVhbSwgc3RhdGUpOw0KICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHJldHVybiByZXN1bHQ7DQogICAgfQ0KICAgIGlmIChjaCA9PSAnIicpIHsNCiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOw0KICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOw0KICAgIH0NCiAgICBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpIHsNCiAgICAgIGN1clB1bmMgPSBjaDsNCiAgICAgIHJldHVybiBudWxsDQogICAgfQ0KICAgIGlmICgvW1xkJ10vLnRlc3QoY2gpKSB7DQogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuJ10vKTsNCiAgICAgIHJldHVybiAibnVtYmVyIjsNCiAgICB9DQogICAgaWYgKGNoID09ICIvIikgew0KICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgew0KICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDsNCiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsNCiAgICAgIH0NCiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsNCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOw0KICAgICAgICByZXR1cm4gImNvbW1lbnQiOw0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsNCiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7DQogICAgICByZXR1cm4gIm9wZXJhdG9yIjsNCiAgICB9DQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7DQogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7DQogICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsNCiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsNCiAgICAgIHJldHVybiAia2V5d29yZCI7DQogICAgfQ0KICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImF0b20iOw0KICAgIHJldHVybiAid29yZCI7DQogIH0NCg0KICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgew0KICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7DQogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsNCiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsNCiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9DQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7DQogICAgICB9DQogICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSkNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7DQogICAgICByZXR1cm4gInN0cmluZyI7DQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOw0KICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsNCiAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7DQogICAgICAgIGJyZWFrOw0KICAgICAgfQ0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsNCiAgICB9DQogICAgcmV0dXJuICJjb21tZW50IjsNCiAgfQ0KDQogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsNCiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7DQogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47DQogICAgdGhpcy50eXBlID0gdHlwZTsNCiAgICB0aGlzLmFsaWduID0gYWxpZ247DQogICAgdGhpcy5wcmV2ID0gcHJldjsNCiAgfQ0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7DQogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZS5pbmRlbnRlZCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTsNCiAgfQ0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7DQogICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7DQogICAgaWYgKHQgPT0gIikiIHx8IHQgPT0gIl0iIHx8IHQgPT0gIn0iKQ0KICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkOw0KICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2Ow0KICB9DQoNCiAgLy8gSW50ZXJmYWNlDQoNCiAgcmV0dXJuIHsNCiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7DQogICAgICByZXR1cm4gew0KICAgICAgICB0b2tlbml6ZTogbnVsbCwNCiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLA0KICAgICAgICBpbmRlbnRlZDogMCwNCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUNCiAgICAgIH07DQogICAgfSwNCg0KICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7DQogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsNCiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsNCiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTsNCiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsNCiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOw0KICAgICAgfQ0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsNCiAgICAgIGN1clB1bmMgPSBudWxsOw0KICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSkoc3RyZWFtLCBzdGF0ZSk7DQogICAgICBpZiAoc3R5bGUgPT0gImNvbW1lbnQiIHx8IHN0eWxlID09ICJtZXRhIikgcmV0dXJuIHN0eWxlOw0KICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOw0KDQogICAgICBpZiAoKGN1clB1bmMgPT0gIjsiIHx8IGN1clB1bmMgPT0gIjoiKSAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IikgcG9wQ29udGV4dChzdGF0ZSk7DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsNCiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIlsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiXSIpOw0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiKCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICIpIik7DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9Iikgew0KICAgICAgICB3aGlsZSAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpOw0KICAgICAgICBpZiAoY3R4LnR5cGUgPT0gIn0iKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gY3R4LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpOw0KICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkNCiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgInN0YXRlbWVudCIpOw0KICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsNCiAgICAgIHJldHVybiBzdHlsZTsNCiAgICB9LA0KDQogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7DQogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlICYmIHN0YXRlLnRva2VuaXplICE9IG51bGwpIHJldHVybiAwOw0KICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBjdHggPSBzdGF0ZS5jb250ZXh0LCBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlOw0KICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7DQogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7DQogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsNCiAgICB9LA0KDQogICAgZWxlY3RyaWNDaGFyczogInt9Ig0KICB9Ow0KfSk7DQoNCihmdW5jdGlvbigpIHsNCiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7DQogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOw0KICAgIHJldHVybiBvYmo7DQogIH0NCg0KICB2YXIgdmVyaWxvZ0tleXdvcmRzID0gImFsd2F5cyBhbmQgYXNzaWduIGF1dG9tYXRpYyBiZWdpbiBidWYgYnVmaWYwIGJ1ZmlmMSBjYXNlIGNhc2V4IGNhc2V6IGNlbGwgY21vcyBjb25maWcgIiArDQogICAgImRlYXNzaWduIGRlZmF1bHQgZGVmcGFyYW0gZGVzaWduIGRpc2FibGUgZWRnZSBlbHNlIGVuZCBlbmRjYXNlIGVuZGNvbmZpZyBlbmRmdW5jdGlvbiBlbmRnZW5lcmF0ZSBlbmRtb2R1bGUgIiArDQogICAgImVuZHByaW1pdGl2ZSBlbmRzcGVjaWZ5IGVuZHRhYmxlIGVuZHRhc2sgZXZlbnQgZm9yIGZvcmNlIGZvcmV2ZXIgZm9yayBmdW5jdGlvbiBnZW5lcmF0ZSBnZW52YXIgaGlnaHowICIgKw0KICAgICJoaWdoejEgaWYgaWZub25lIGluY2RpciBpbmNsdWRlIGluaXRpYWwgaW5vdXQgaW5wdXQgaW5zdGFuY2UgaW50ZWdlciBqb2luIGxhcmdlIGxpYmxpc3QgbGlicmFyeSBsb2NhbHBhcmFtICIgKw0KICAgICJtYWNyb21vZHVsZSBtZWRpdW0gbW9kdWxlIG5hbmQgbmVnZWRnZSBubW9zIG5vciBub3Nob3djYW5jZWxsZWQgbm90IG5vdGlmMCBub3RpZjEgb3Igb3V0cHV0IHBhcmFtZXRlciBwbW9zICIgKw0KICAgICJwb3NlZGdlIHByaW1pdGl2ZSBwdWxsMCBwdWxsMSBwdWxsZG93biBwdWxsdXAgcHVsc2VzdHlsZV9vbmV2ZW50IHB1bHNlc3R5bGVfb25kZXRlY3QgcmNtb3MgcmVhbCByZWFsdGltZSAiICsNCiAgICAicmVnIHJlbGVhc2UgcmVwZWF0IHJubW9zIHJwbW9zIHJ0cmFuIHJ0cmFuaWYwIHJ0cmFuaWYxIHNjYWxhcmVkIHNob3djYW5jZWxsZWQgc2lnbmVkIHNtYWxsIHNwZWNpZnkgc3BlY3BhcmFtICIgKw0KICAgICJzdHJvbmcwIHN0cm9uZzEgc3VwcGx5MCBzdXBwbHkxIHRhYmxlIHRhc2sgdGltZSB0cmFuIHRyYW5pZjAgdHJhbmlmMSB0cmkgdHJpMCB0cmkxIHRyaWFuZCB0cmlvciB0cmlyZWcgIiArDQogICAgInVuc2lnbmVkIHVzZSB2ZWN0b3JlZCB3YWl0IHdhbmQgd2VhazAgd2VhazEgd2hpbGUgd2lyZSB3b3IgeG5vciB4b3IiOw0KDQogIHZhciB2ZXJpbG9nQmxvY2tLZXl3b3JkcyA9ICJiZWdpbiBidWZpZjAgYnVmaWYxIGNhc2UgY2FzZXggY2FzZXogY29uZmlnIGVsc2UgZW5kIGVuZGNhc2UgZW5kY29uZmlnIGVuZGZ1bmN0aW9uICIgKw0KICAgICJlbmRnZW5lcmF0ZSBlbmRtb2R1bGUgZW5kcHJpbWl0aXZlIGVuZHNwZWNpZnkgZW5kdGFibGUgZW5kdGFzayBmb3IgZm9yZXZlciBmdW5jdGlvbiBnZW5lcmF0ZSBpZiBpZm5vbmUgIiArDQogICAgIm1hY3JvbW9kdWxlIG1vZHVsZSBwcmltaXRpdmUgcmVwZWF0IHNwZWNpZnkgdGFibGUgdGFzayB3aGlsZSI7DQoNCiAgZnVuY3Rpb24gbWV0YUhvb2soc3RyZWFtLCBzdGF0ZSkgew0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOw0KICAgIHJldHVybiAibWV0YSI7DQogIH0NCg0KICAvLyBDIy1zdHlsZSBzdHJpbmdzIHdoZXJlICIiIGVzY2FwZXMgYSBxdW90ZS4NCiAgZnVuY3Rpb24gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIG5leHQ7DQogICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgew0KICAgICAgaWYgKG5leHQgPT0gJyInICYmICFzdHJlYW0uZWF0KCciJykpIHsNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOw0KICAgICAgICBicmVhazsNCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICJzdHJpbmciOw0KICB9DQoNCiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtdmVyaWxvZyIsIHsNCiAgICBuYW1lOiAidmVyaWxvZyIsDQogICAga2V5d29yZHM6IHdvcmRzKHZlcmlsb2dLZXl3b3JkcyksDQogICAgYmxvY2tLZXl3b3Jkczogd29yZHModmVyaWxvZ0Jsb2NrS2V5d29yZHMpLA0KICAgIGF0b21zOiB3b3JkcygibnVsbCIpLA0KICAgIGhvb2tzOiB7ImAiOiBtZXRhSG9vaywgIiQiOiBtZXRhSG9va30NCiAgfSk7DQp9KCkpOw0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFhNTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ieG1sLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBYTUwgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0hUTUwgRXhhbXBsZSZsdDsvdGl0bGUmZ3Q7CiAgJmx0Oy9oZWFkJmd0OwogICZsdDtib2R5Jmd0OwogICAgVGhlIGluZGVudGF0aW9uIHRyaWVzIHRvIGJlICZsdDtlbSZndDtzb21ld2hhdCAmYW1wO3F1b3Q7ZG8gd2hhdAogICAgSSBtZWFuJmFtcDtxdW90OyZsdDsvZW0mZ3Q7Li4uIGJ1dCBtaWdodCBub3QgbWF0Y2ggeW91ciBzdHlsZS4KICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAieG1sIiwgYWxpZ25DREFUQTogdHJ1ZX0sCiAgICAgICAgbGluZU51bWJlcnM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPlRoZSBYTUwgbW9kZSBzdXBwb3J0cyB0d28gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOjwvcD4KICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPmh0bWxNb2RlIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBzd2l0Y2hlcyB0aGUgbW9kZSB0byBwYXJzZSBIVE1MIGluc3RlYWQgb2YgWE1MLiBUaGlzCiAgICAgIG1lYW5zIGF0dHJpYnV0ZXMgZG8gbm90IGhhdmUgdG8gYmUgcXVvdGVkLCBhbmQgc29tZSBlbGVtZW50cwogICAgICAoc3VjaCBhcyA8Y29kZT5icjwvY29kZT4pIGRvIG5vdCByZXF1aXJlIGEgY2xvc2luZyB0YWcuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmFsaWduQ0RBVEEgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIGZvcmNlIHRoZSBvcGVuaW5nIHRhZyBvZiBDREFUQQogICAgICBibG9ja3MgdG8gbm90IGJlIGluZGVudGVkLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94bWw8L2NvZGU+LCA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CiAgdmFyIEtsdWRnZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7CiAgICBhdXRvU2VsZkNsb3NlcnM6IHsnYXJlYSc6IHRydWUsICdiYXNlJzogdHJ1ZSwgJ2JyJzogdHJ1ZSwgJ2NvbCc6IHRydWUsICdjb21tYW5kJzogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICdlbWJlZCc6IHRydWUsICdmcmFtZSc6IHRydWUsICdocic6IHRydWUsICdpbWcnOiB0cnVlLCAnaW5wdXQnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgJ2tleWdlbic6IHRydWUsICdsaW5rJzogdHJ1ZSwgJ21ldGEnOiB0cnVlLCAncGFyYW0nOiB0cnVlLCAnc291cmNlJzogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICd0cmFjayc6IHRydWUsICd3YnInOiB0cnVlfSwKICAgIGltcGxpY2l0bHlDbG9zZWQ6IHsnZGQnOiB0cnVlLCAnbGknOiB0cnVlLCAnb3B0Z3JvdXAnOiB0cnVlLCAnb3B0aW9uJzogdHJ1ZSwgJ3AnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICdycCc6IHRydWUsICdydCc6IHRydWUsICd0Ym9keSc6IHRydWUsICd0ZCc6IHRydWUsICd0Zm9vdCc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgJ3RoJzogdHJ1ZSwgJ3RyJzogdHJ1ZX0sCiAgICBjb250ZXh0R3JhYmJlcnM6IHsKICAgICAgJ2RkJzogeydkZCc6IHRydWUsICdkdCc6IHRydWV9LAogICAgICAnZHQnOiB7J2RkJzogdHJ1ZSwgJ2R0JzogdHJ1ZX0sCiAgICAgICdsaSc6IHsnbGknOiB0cnVlfSwKICAgICAgJ29wdGlvbic6IHsnb3B0aW9uJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZX0sCiAgICAgICdvcHRncm91cCc6IHsnb3B0Z3JvdXAnOiB0cnVlfSwKICAgICAgJ3AnOiB7J2FkZHJlc3MnOiB0cnVlLCAnYXJ0aWNsZSc6IHRydWUsICdhc2lkZSc6IHRydWUsICdibG9ja3F1b3RlJzogdHJ1ZSwgJ2Rpcic6IHRydWUsCiAgICAgICAgICAgICdkaXYnOiB0cnVlLCAnZGwnOiB0cnVlLCAnZmllbGRzZXQnOiB0cnVlLCAnZm9vdGVyJzogdHJ1ZSwgJ2Zvcm0nOiB0cnVlLAogICAgICAgICAgICAnaDEnOiB0cnVlLCAnaDInOiB0cnVlLCAnaDMnOiB0cnVlLCAnaDQnOiB0cnVlLCAnaDUnOiB0cnVlLCAnaDYnOiB0cnVlLAogICAgICAgICAgICAnaGVhZGVyJzogdHJ1ZSwgJ2hncm91cCc6IHRydWUsICdocic6IHRydWUsICdtZW51JzogdHJ1ZSwgJ25hdic6IHRydWUsICdvbCc6IHRydWUsCiAgICAgICAgICAgICdwJzogdHJ1ZSwgJ3ByZSc6IHRydWUsICdzZWN0aW9uJzogdHJ1ZSwgJ3RhYmxlJzogdHJ1ZSwgJ3VsJzogdHJ1ZX0sCiAgICAgICdycCc6IHsncnAnOiB0cnVlLCAncnQnOiB0cnVlfSwKICAgICAgJ3J0JzogeydycCc6IHRydWUsICdydCc6IHRydWV9LAogICAgICAndGJvZHknOiB7J3Rib2R5JzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZX0sCiAgICAgICd0ZCc6IHsndGQnOiB0cnVlLCAndGgnOiB0cnVlfSwKICAgICAgJ3Rmb290Jzogeyd0Ym9keSc6IHRydWV9LAogICAgICAndGgnOiB7J3RkJzogdHJ1ZSwgJ3RoJzogdHJ1ZX0sCiAgICAgICd0aGVhZCc6IHsndGJvZHknOiB0cnVlLCAndGZvb3QnOiB0cnVlfSwKICAgICAgJ3RyJzogeyd0cic6IHRydWV9CiAgICB9LAogICAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZX0sCiAgICBhbGxvd1VucXVvdGVkOiB0cnVlLAogICAgYWxsb3dNaXNzaW5nOiBmYWxzZQogIH0gOiB7CiAgICBhdXRvU2VsZkNsb3NlcnM6IHt9LAogICAgaW1wbGljaXRseUNsb3NlZDoge30sCiAgICBjb250ZXh0R3JhYmJlcnM6IHt9LAogICAgZG9Ob3RJbmRlbnQ6IHt9LAogICAgYWxsb3dVbnF1b3RlZDogZmFsc2UsCiAgICBhbGxvd01pc3Npbmc6IGZhbHNlCiAgfTsKICB2YXIgYWxpZ25DREFUQSA9IHBhcnNlckNvbmZpZy5hbGlnbkNEQVRBOwoKICAvLyBSZXR1cm4gdmFyaWFibGVzIGZvciB0b2tlbml6ZXJzCiAgdmFyIHRhZ05hbWUsIHR5cGU7CgogIGZ1bmN0aW9uIGluVGV4dChzdHJlYW0sIHN0YXRlKSB7CiAgICBmdW5jdGlvbiBjaGFpbihwYXJzZXIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CgogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPCIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiEiKSkgewogICAgICAgIGlmIChzdHJlYW0uZWF0KCJbIikpIHsKICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1cm4gY2hhaW4oaW5CbG9jaygiYXRvbSIsICJdXT4iKSk7CiAgICAgICAgICBlbHNlIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHJldHVybiBjaGFpbihpbkJsb2NrKCJjb21tZW50IiwgIi0tPiIpKTsKICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIkRPQ1RZUEUiLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKICAgICAgICAgIHJldHVybiBjaGFpbihkb2N0eXBlKDEpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBlbHNlIGlmIChzdHJlYW0uZWF0KCI/IikpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wtXS8pOwogICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5CbG9jaygibWV0YSIsICI/PiIpOwogICAgICAgIHJldHVybiAibWV0YSI7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdHlwZSA9IHN0cmVhbS5lYXQoIi8iKSA/ICJjbG9zZVRhZyIgOiAib3BlblRhZyI7CiAgICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgICAgdGFnTmFtZSA9ICIiOwogICAgICAgIHZhciBjOwogICAgICAgIHdoaWxlICgoYyA9IHN0cmVhbS5lYXQoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pKSkgdGFnTmFtZSArPSBjOwogICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7CiAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiJiIpIHsKICAgICAgdmFyIG9rOwogICAgICBpZiAoc3RyZWFtLmVhdCgiIyIpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5lYXQoIngiKSkgewogICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1thLWZBLUZcZF0vKSAmJiBzdHJlYW0uZWF0KCI7Iik7ICAgICAgICAgIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvayA9IHN0cmVhbS5lYXRXaGlsZSgvW1xkXS8pICYmIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXC06XS8pICYmIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgfQogICAgICByZXR1cm4gb2sgPyAiYXRvbSIgOiAiZXJyb3IiOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14mPF0vKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBpblRhZyhzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICI+IiB8fCAoY2ggPT0gIi8iICYmIHN0cmVhbS5lYXQoIj4iKSkpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CiAgICAgIHR5cGUgPSBjaCA9PSAiPiIgPyAiZW5kVGFnIiA6ICJzZWxmY2xvc2VUYWciOwogICAgICByZXR1cm4gInRhZyI7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiPSIpIHsKICAgICAgdHlwZSA9ICJlcXVhbHMiOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGVsc2UgaWYgKC9bXCdcIl0vLnRlc3QoY2gpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5BdHRyaWJ1dGUoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTsKICAgICAgcmV0dXJuICJ3b3JkIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGluQXR0cmlidXRlKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubmV4dCgpID09IHF1b3RlKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBpbkJsb2NrKHN0eWxlLCB0ZXJtaW5hdG9yKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2godGVybWluYXRvcikpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CiAgZnVuY3Rpb24gZG9jdHlwZShkZXB0aCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGNoOwogICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChjaCA9PSAiPCIpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gZG9jdHlwZShkZXB0aCArIDEpOwogICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIj4iKSB7CiAgICAgICAgICBpZiAoZGVwdGggPT0gMSkgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGRvY3R5cGUoZGVwdGggLSAxKTsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gIm1ldGEiOwogICAgfTsKICB9CgogIHZhciBjdXJTdGF0ZSwgc2V0U3R5bGU7CiAgZnVuY3Rpb24gcGFzcygpIHsKICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN1clN0YXRlLmNjLnB1c2goYXJndW1lbnRzW2ldKTsKICB9CiAgZnVuY3Rpb24gY29udCgpIHsKICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gcHVzaENvbnRleHQodGFnTmFtZSwgc3RhcnRPZkxpbmUpIHsKICAgIHZhciBub0luZGVudCA9IEtsdWRnZXMuZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKGN1clN0YXRlLmNvbnRleHQgJiYgY3VyU3RhdGUuY29udGV4dC5ub0luZGVudCk7CiAgICBjdXJTdGF0ZS5jb250ZXh0ID0gewogICAgICBwcmV2OiBjdXJTdGF0ZS5jb250ZXh0LAogICAgICB0YWdOYW1lOiB0YWdOYW1lLAogICAgICBpbmRlbnQ6IGN1clN0YXRlLmluZGVudGVkLAogICAgICBzdGFydE9mTGluZTogc3RhcnRPZkxpbmUsCiAgICAgIG5vSW5kZW50OiBub0luZGVudAogICAgfTsKICB9CiAgZnVuY3Rpb24gcG9wQ29udGV4dCgpIHsKICAgIGlmIChjdXJTdGF0ZS5jb250ZXh0KSBjdXJTdGF0ZS5jb250ZXh0ID0gY3VyU3RhdGUuY29udGV4dC5wcmV2OwogIH0KCiAgZnVuY3Rpb24gZWxlbWVudCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAib3BlblRhZyIpIHsKICAgICAgY3VyU3RhdGUudGFnTmFtZSA9IHRhZ05hbWU7CiAgICAgIHJldHVybiBjb250KGF0dHJpYnV0ZXMsIGVuZHRhZyhjdXJTdGF0ZS5zdGFydE9mTGluZSkpOwogICAgfSBlbHNlIGlmICh0eXBlID09ICJjbG9zZVRhZyIpIHsKICAgICAgdmFyIGVyciA9IGZhbHNlOwogICAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkgewogICAgICAgIGlmIChjdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZSkgewogICAgICAgICAgaWYgKEtsdWRnZXMuaW1wbGljaXRseUNsb3NlZC5oYXNPd25Qcm9wZXJ0eShjdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgcG9wQ29udGV4dCgpOwogICAgICAgICAgfQogICAgICAgICAgZXJyID0gIWN1clN0YXRlLmNvbnRleHQgfHwgY3VyU3RhdGUuY29udGV4dC50YWdOYW1lICE9IHRhZ05hbWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGVyciA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGVycikgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgICByZXR1cm4gY29udChlbmRjbG9zZXRhZyhlcnIpKTsKICAgIH0KICAgIHJldHVybiBjb250KCk7CiAgfQogIGZ1bmN0aW9uIGVuZHRhZyhzdGFydE9mTGluZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gInNlbGZjbG9zZVRhZyIgfHwKICAgICAgICAgICh0eXBlID09ICJlbmRUYWciICYmIEtsdWRnZXMuYXV0b1NlbGZDbG9zZXJzLmhhc093blByb3BlcnR5KGN1clN0YXRlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpKSB7CiAgICAgICAgbWF5YmVQb3BDb250ZXh0KGN1clN0YXRlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgcmV0dXJuIGNvbnQoKTsKICAgICAgfQogICAgICBpZiAodHlwZSA9PSAiZW5kVGFnIikgewogICAgICAgIG1heWJlUG9wQ29udGV4dChjdXJTdGF0ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpOwogICAgICAgIHB1c2hDb250ZXh0KGN1clN0YXRlLnRhZ05hbWUsIHN0YXJ0T2ZMaW5lKTsKICAgICAgICByZXR1cm4gY29udCgpOwogICAgICB9CiAgICAgIHJldHVybiBjb250KCk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmRjbG9zZXRhZyhlcnIpIHsKICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgaWYgKHR5cGUgPT0gImVuZFRhZyIpIHsgcG9wQ29udGV4dCgpOyByZXR1cm4gY29udCgpOyB9CiAgICAgIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgcmV0dXJuIGNvbnQoYXJndW1lbnRzLmNhbGxlZSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG1heWJlUG9wQ29udGV4dChuZXh0VGFnTmFtZSkgewogICAgdmFyIHBhcmVudFRhZ05hbWU7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoIWN1clN0YXRlLmNvbnRleHQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgcGFyZW50VGFnTmFtZSA9IGN1clN0YXRlLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICBpZiAoIUtsdWRnZXMuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5KHBhcmVudFRhZ05hbWUpIHx8CiAgICAgICAgICAhS2x1ZGdlcy5jb250ZXh0R3JhYmJlcnNbcGFyZW50VGFnTmFtZV0uaGFzT3duUHJvcGVydHkobmV4dFRhZ05hbWUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHBvcENvbnRleHQoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGF0dHJpYnV0ZXModHlwZSkgewogICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7c2V0U3R5bGUgPSAiYXR0cmlidXRlIjsgcmV0dXJuIGNvbnQoYXR0cmlidXRlLCBhdHRyaWJ1dGVzKTt9CiAgICBpZiAodHlwZSA9PSAiZW5kVGFnIiB8fCB0eXBlID09ICJzZWxmY2xvc2VUYWciKSByZXR1cm4gcGFzcygpOwogICAgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgcmV0dXJuIGNvbnQoYXR0cmlidXRlcyk7CiAgfQogIGZ1bmN0aW9uIGF0dHJpYnV0ZSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAiZXF1YWxzIikgcmV0dXJuIGNvbnQoYXR0dmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgaWYgKCFLbHVkZ2VzLmFsbG93TWlzc2luZykgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgcmV0dXJuICh0eXBlID09ICJlbmRUYWciIHx8IHR5cGUgPT0gInNlbGZjbG9zZVRhZyIpID8gcGFzcygpIDogY29udCgpOwogIH0KICBmdW5jdGlvbiBhdHR2YWx1ZSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7CiAgICBpZiAodHlwZSA9PSAid29yZCIgJiYgS2x1ZGdlcy5hbGxvd1VucXVvdGVkKSB7c2V0U3R5bGUgPSAic3RyaW5nIjsgcmV0dXJuIGNvbnQoKTt9CiAgICBzZXRTdHlsZSA9ICJlcnJvciI7CiAgICByZXR1cm4gKHR5cGUgPT0gImVuZFRhZyIgfHwgdHlwZSA9PSAic2VsZkNsb3NlVGFnIikgPyBwYXNzKCkgOiBjb250KCk7CiAgfQogIGZ1bmN0aW9uIGF0dHZhbHVlbWF5YmUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBjb250KGF0dHZhbHVlbWF5YmUpOwogICAgZWxzZSByZXR1cm4gcGFzcygpOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiBpblRleHQsIGNjOiBbXSwgaW5kZW50ZWQ6IDAsIHN0YXJ0T2ZMaW5lOiB0cnVlLCB0YWdOYW1lOiBudWxsLCBjb250ZXh0OiBudWxsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CgogICAgICBzZXRTdHlsZSA9IHR5cGUgPSB0YWdOYW1lID0gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIHN0YXRlLnR5cGUgPSB0eXBlOwogICAgICBpZiAoKHN0eWxlIHx8IHR5cGUpICYmIHN0eWxlICE9ICJjb21tZW50IikgewogICAgICAgIGN1clN0YXRlID0gc3RhdGU7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHZhciBjb21iID0gc3RhdGUuY2MucG9wKCkgfHwgZWxlbWVudDsKICAgICAgICAgIGlmIChjb21iKHR5cGUgfHwgc3R5bGUpKSBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsKICAgICAgcmV0dXJuIHNldFN0eWxlIHx8IHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIsIGZ1bGxMaW5lKSB7CiAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKChzdGF0ZS50b2tlbml6ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQpIHx8CiAgICAgICAgICBjb250ZXh0ICYmIGNvbnRleHQubm9JbmRlbnQpCiAgICAgICAgcmV0dXJuIGZ1bGxMaW5lID8gZnVsbExpbmUubWF0Y2goL14oXHMqKS8pWzBdLmxlbmd0aCA6IDA7CiAgICAgIGlmIChhbGlnbkNEQVRBICYmIC88IVxbQ0RBVEFcWy8udGVzdCh0ZXh0QWZ0ZXIpKSByZXR1cm4gMDsKICAgICAgaWYgKGNvbnRleHQgJiYgL148XC8vLnRlc3QodGV4dEFmdGVyKSkKICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2OwogICAgICB3aGlsZSAoY29udGV4dCAmJiAhY29udGV4dC5zdGFydE9mTGluZSkKICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2OwogICAgICBpZiAoY29udGV4dCkgcmV0dXJuIGNvbnRleHQuaW5kZW50ICsgaW5kZW50VW5pdDsKICAgICAgZWxzZSByZXR1cm4gMDsKICAgIH0sCgogICAgY29tcGFyZVN0YXRlczogZnVuY3Rpb24oYSwgYikgewogICAgICBpZiAoYS5pbmRlbnRlZCAhPSBiLmluZGVudGVkIHx8IGEudG9rZW5pemUgIT0gYi50b2tlbml6ZSkgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKHZhciBjYSA9IGEuY29udGV4dCwgY2IgPSBiLmNvbnRleHQ7IDsgY2EgPSBjYS5wcmV2LCBjYiA9IGNiLnByZXYpIHsKICAgICAgICBpZiAoIWNhIHx8ICFjYikgcmV0dXJuIGNhID09IGNiOwogICAgICAgIGlmIChjYS50YWdOYW1lICE9IGNiLnRhZ05hbWUpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAiLyIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwgInhtbCIpOwppZiAoIUNvZGVNaXJyb3IubWltZU1vZGVzLmhhc093blByb3BlcnR5KCJ0ZXh0L2h0bWwiKSkKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+IAo8aHRtbD4gCjwhLS0KLyoKQ29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmtMb2dpYyBDb3Jwb3JhdGlvbgpBdXRob3I6IE1pa2UgQnJldm9vcnQgPG1pa2VAYnJldm9vcnQuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KKi8KLS0+CiAgPGhlYWQ+IAogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSmF2YVNjcmlwdCBtb2RlPC90aXRsZT4gCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+IAogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+IAogICAgPHNjcmlwdCBzcmM9InhxdWVyeS5qcyI+PC9zY3JpcHQ+IAogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPiAKICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUveHEtZGFyay5jc3MiPiAKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJCS5Db2RlTWlycm9yIHsKCQkJCWJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOwoJCQl9CgkJCS5Db2RlTWlycm9yLXNjcm9sbCB7CgkJCQloZWlnaHQ6NDAwcHg7CgkJCX0KCQk8L3N0eWxlPiAKICA8L2hlYWQ+IAogIDxib2R5PiAKICAgIDxoMT5Db2RlTWlycm9yIDI6IFhRdWVyeSBtb2RlPC9oMT4gCiAKPGRpdiBjbGFzcz0iY20tcy1kZWZhdWx0Ij4gCgk8dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPiAKeHF1ZXJ5IHZlcnNpb24gJnF1b3Q7MS4wLW1sJnF1b3Q7OwooOiB0aGlzIGlzCiA6IGEgCiAgICJjb21tZW50IiA6KQpsZXQgJGxldCA6PSAmbHQ7eCBhdHRyPSZxdW90O3ZhbHVlJnF1b3Q7Jmd0OyZxdW90O3Rlc3QmcXVvdDsmbHQ7ZnVuYyZndDtmdW5jdGlvbigpICR2YXIge2Z1bmN0aW9uKCl9IHskdmFyfSZsdDsvZnVuYyZndDsmbHQ7L3gmZ3Q7CmxldCAkam9lOj0xCnJldHVybiBlbGVtZW50IGVsZW1lbnQgewoJYXR0cmlidXRlIGF0dHJpYnV0ZSB7IDEgfSwKCWVsZW1lbnQgdGVzdCB7ICYjMzk7YSYjMzk7IH0sIAoJYXR0cmlidXRlIGZvbyB7ICZxdW90O2JhciZxdW90OyB9LAoJZm46ZG9jKClbIGZvby9AYmFyIGVxICRsZXQgXSwKCS8veCB9ICAgIAogCig6IGEgbW9yZSAnZXZpbCcgdGVzdCA6KQooOiBNb2RpZmllZCBCbGFrZWxleSBleGFtcGxlICg6IHdpdGggbmVzdGVkIGNvbW1lbnQgOikgLi4uIDopCmRlY2xhcmUgcHJpdmF0ZSBmdW5jdGlvbiBsb2NhbDpkZWNsYXJlKCkgeygpfTsKZGVjbGFyZSBwcml2YXRlIGZ1bmN0aW9uIGxvY2FsOnByaXZhdGUoKSB7KCl9OwpkZWNsYXJlIHByaXZhdGUgZnVuY3Rpb24gbG9jYWw6ZnVuY3Rpb24oKSB7KCl9OwpkZWNsYXJlIHByaXZhdGUgZnVuY3Rpb24gbG9jYWw6bG9jYWwoKSB7KCl9OwpsZXQgJGxldCA6PSAmbHQ7bGV0Jmd0O2xldCAkbGV0IDo9ICZxdW90O2xldCZxdW90OyZsdDsvbGV0Jmd0OwpyZXR1cm4gZWxlbWVudCBlbGVtZW50IHsKCWF0dHJpYnV0ZSBhdHRyaWJ1dGUgeyB0cnkgeyB4ZG1wOnZlcnNpb24oKSB9IGNhdGNoKCRlKSB7IHhkbXA6bG9nKCRlKSB9IH0sCglhdHRyaWJ1dGUgZm46ZG9jIHsgJnF1b3Q7YmFyJnF1b3Q7IGNhc3RhYmxlIGFzIHhzOnN0cmluZyB9LAoJZWxlbWVudCB0ZXh0IHsgdGV4dCB7ICZxdW90O3RleHQmcXVvdDsgfSB9LAoJZm46ZG9jKClbIGNoaWxkOjplcS8oQGJhciB8IGF0dHJpYnV0ZTo6YXR0cmlidXRlKSBlcSAkbGV0IF0sCgkvL2ZuOmRvYwp9CgoKCnhxdWVyeSB2ZXJzaW9uICZxdW90OzEuMC1tbCZxdW90OzsKCig6IENvcHlyaWdodCAyMDA2LTIwMTAgTWFyayBMb2dpYyBDb3Jwb3JhdGlvbi4gOikKCig6CiA6IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAmcXVvdDtMaWNlbnNlJnF1b3Q7KTsKIDogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogOiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIDoKIDogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogOgogOiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiA6IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLAogOiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIDogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogOiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIDopCgptb2R1bGUgbmFtZXNwYWNlIGpzb24gPSAmcXVvdDtodHRwOi8vbWFya2xvZ2ljLmNvbS9qc29uJnF1b3Q7OwpkZWNsYXJlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlICZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zJnF1b3Q7OwoKKDogTmVlZCB0byBiYWNrc2xhc2ggZXNjYXBlIGFueSBkb3VibGUgcXVvdGVzLCBiYWNrc2xhc2hlcywgYW5kIG5ld2xpbmVzIDopCmRlY2xhcmUgZnVuY3Rpb24ganNvbjplc2NhcGUoJHMgYXMgeHM6c3RyaW5nKSBhcyB4czpzdHJpbmcgewogIGxldCAkcyA6PSByZXBsYWNlKCRzLCAmcXVvdDtcXCZxdW90OywgJnF1b3Q7XFxcXCZxdW90OykKICBsZXQgJHMgOj0gcmVwbGFjZSgkcywgJnF1b3Q7JnF1b3Q7JnF1b3Q7JnF1b3Q7LCAmcXVvdDtcXCZxdW90OyZxdW90OyZxdW90OykKICBsZXQgJHMgOj0gcmVwbGFjZSgkcywgY29kZXBvaW50cy10by1zdHJpbmcoKDEzLCAxMCkpLCAmcXVvdDtcXG4mcXVvdDspCiAgbGV0ICRzIDo9IHJlcGxhY2UoJHMsIGNvZGVwb2ludHMtdG8tc3RyaW5nKDEzKSwgJnF1b3Q7XFxuJnF1b3Q7KQogIGxldCAkcyA6PSByZXBsYWNlKCRzLCBjb2RlcG9pbnRzLXRvLXN0cmluZygxMCksICZxdW90O1xcbiZxdW90OykKICByZXR1cm4gJHMKfTsKCmRlY2xhcmUgZnVuY3Rpb24ganNvbjphdG9taXplKCR4IGFzIGVsZW1lbnQoKSkgYXMgeHM6c3RyaW5nIHsKICBpZiAoY291bnQoJHgvbm9kZSgpKSA9IDApIHRoZW4gJ251bGwnCiAgZWxzZSBpZiAoJHgvQHR5cGUgPSAmcXVvdDtudW1iZXImcXVvdDspIHRoZW4KICAgIGxldCAkY2FzdGFibGUgOj0gJHggY2FzdGFibGUgYXMgeHM6ZmxvYXQgb3IKICAgICAgICAgICAgICAgICAgICAgJHggY2FzdGFibGUgYXMgeHM6ZG91YmxlIG9yCiAgICAgICAgICAgICAgICAgICAgICR4IGNhc3RhYmxlIGFzIHhzOmRlY2ltYWwKICAgIHJldHVybgogICAgaWYgKCRjYXN0YWJsZSkgdGhlbiB4czpzdHJpbmcoJHgpCiAgICBlbHNlIGVycm9yKGNvbmNhdCgmcXVvdDtOb3QgYSBudW1iZXI6ICZxdW90OywgeGRtcDpkZXNjcmliZSgkeCkpKQogIGVsc2UgaWYgKCR4L0B0eXBlID0gJnF1b3Q7Ym9vbGVhbiZxdW90OykgdGhlbgogICAgbGV0ICRjYXN0YWJsZSA6PSAkeCBjYXN0YWJsZSBhcyB4czpib29sZWFuCiAgICByZXR1cm4KICAgIGlmICgkY2FzdGFibGUpIHRoZW4geHM6c3RyaW5nKHhzOmJvb2xlYW4oJHgpKQogICAgZWxzZSBlcnJvcihjb25jYXQoJnF1b3Q7Tm90IGEgYm9vbGVhbjogJnF1b3Q7LCB4ZG1wOmRlc2NyaWJlKCR4KSkpCiAgZWxzZSBjb25jYXQoJyZxdW90OycsIGpzb246ZXNjYXBlKCR4KSwgJyZxdW90OycpCn07CgooOiBQcmludCB0aGUgdGhpbmcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29sb24gOikKZGVjbGFyZSBmdW5jdGlvbiBqc29uOnByaW50LXZhbHVlKCR4IGFzIGVsZW1lbnQoKSkgYXMgeHM6c3RyaW5nIHsKICBpZiAoY291bnQoJHgvKikgPSAwKSB0aGVuCiAgICBqc29uOmF0b21pemUoJHgpCiAgZWxzZSBpZiAoJHgvQHF1b3RlID0gJnF1b3Q7dHJ1ZSZxdW90OykgdGhlbgogICAgY29uY2F0KCcmcXVvdDsnLCBqc29uOmVzY2FwZSh4ZG1wOnF1b3RlKCR4L25vZGUoKSkpLCAnJnF1b3Q7JykKICBlbHNlCiAgICBzdHJpbmctam9pbigoJ3snLAogICAgICBzdHJpbmctam9pbihmb3IgJGkgaW4gJHgvKiByZXR1cm4ganNvbjpwcmludC1uYW1lLXZhbHVlKCRpKSwgJnF1b3Q7LCZxdW90OyksCiAgICAnfScpLCAmcXVvdDsmcXVvdDspCn07CgooOiBQcmludCB0aGUgbmFtZSBhbmQgdmFsdWUgYm90aCA6KQpkZWNsYXJlIGZ1bmN0aW9uIGpzb246cHJpbnQtbmFtZS12YWx1ZSgkeCBhcyBlbGVtZW50KCkpIGFzIHhzOnN0cmluZz8gewogIGxldCAkbmFtZSA6PSBuYW1lKCR4KQogIGxldCAkZmlyc3QtaW4tYXJyYXkgOj0KICAgIGNvdW50KCR4L3ByZWNlZGluZy1zaWJsaW5nOjoqW25hbWUoLikgPSAkbmFtZV0pID0gMCBhbmQKICAgIChjb3VudCgkeC9mb2xsb3dpbmctc2libGluZzo6KltuYW1lKC4pID0gJG5hbWVdKSAmZ3Q7IDAgb3IgJHgvQGFycmF5ID0gJnF1b3Q7dHJ1ZSZxdW90OykKICBsZXQgJGxhdGVyLWluLWFycmF5IDo9IGNvdW50KCR4L3ByZWNlZGluZy1zaWJsaW5nOjoqW25hbWUoLikgPSAkbmFtZV0pICZndDsgMAogIHJldHVybgoKICBpZiAoJGxhdGVyLWluLWFycmF5KSB0aGVuCiAgICAoKSAgKDogSSB3YXMgaGFuZGxlZCBwcmV2aW91c2x5IDopCiAgZWxzZSBpZiAoJGZpcnN0LWluLWFycmF5KSB0aGVuCiAgICBzdHJpbmctam9pbigoJyZxdW90OycsIGpzb246ZXNjYXBlKCRuYW1lKSwgJyZxdW90OzpbJywKICAgICAgc3RyaW5nLWpvaW4oKGZvciAkaSBpbiAoJHgsICR4L2ZvbGxvd2luZy1zaWJsaW5nOjoqW25hbWUoLikgPSAkbmFtZV0pIHJldHVybiBqc29uOnByaW50LXZhbHVlKCRpKSksICZxdW90OywmcXVvdDspLAogICAgJ10nKSwgJnF1b3Q7JnF1b3Q7KQogICBlbHNlCiAgICAgc3RyaW5nLWpvaW4oKCcmcXVvdDsnLCBqc29uOmVzY2FwZSgkbmFtZSksICcmcXVvdDs6JywganNvbjpwcmludC12YWx1ZSgkeCkpLCAmcXVvdDsmcXVvdDspCn07CgooOn4KICBUcmFuc2Zvcm1zIGFuIFhNTCBlbGVtZW50IGludG8gYSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbi4gIFNlZSBodHRwOi8vanNvbi5vcmcuCiAgJmx0O3AvJmd0OwogIFNhbXBsZSB1c2FnZToKICAmbHQ7cHJlJmd0OwogICAgeHF1ZXJ5IHZlcnNpb24gJnF1b3Q7MS4wLW1sJnF1b3Q7OwogICAgaW1wb3J0IG1vZHVsZSBuYW1lc3BhY2UganNvbj0mcXVvdDtodHRwOi8vbWFya2xvZ2ljLmNvbS9qc29uJnF1b3Q7IGF0ICZxdW90O2pzb24ueHF5JnF1b3Q7OwogICAganNvbjpzZXJpYWxpemUoJmFtcDtsdDtmb28mYW1wO2d0OyZhbXA7bHQ7YmFyJmFtcDtndDtraWQmYW1wO2x0Oy9iYXImYW1wO2d0OyZhbXA7bHQ7L2ZvbyZhbXA7Z3Q7KQogICZsdDsvcHJlJmd0OwogIFNhbXBsZSB0cmFuc2Zvcm1hdGlvbnM6CiAgJmx0O3ByZSZndDsKICAmYW1wO2x0O2UvJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90OzpudWxsfQogICZhbXA7bHQ7ZSZhbXA7Z3Q7dGV4dCZhbXA7bHQ7L2UmYW1wO2d0OyBiZWNvbWVzIHsmcXVvdDtlJnF1b3Q7OiZxdW90O3RleHQmcXVvdDt9CiAgJmFtcDtsdDtlJmFtcDtndDtxdW90ZSAmcXVvdDsgZXNjYXBpbmcmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90OzomcXVvdDtxdW90ZSBcJnF1b3Q7IGVzY2FwaW5nJnF1b3Q7fQogICZhbXA7bHQ7ZSZhbXA7Z3Q7YmFja3NsYXNoIFwgZXNjYXBpbmcmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90OzomcXVvdDtiYWNrc2xhc2ggXFwgZXNjYXBpbmcmcXVvdDt9CiAgJmFtcDtsdDtlJmFtcDtndDsmYW1wO2x0O2EmYW1wO2d0O3RleHQxJmFtcDtsdDsvYSZhbXA7Z3Q7JmFtcDtsdDtiJmFtcDtndDt0ZXh0MiZhbXA7bHQ7L2ImYW1wO2d0OyZhbXA7bHQ7L2UmYW1wO2d0OyBiZWNvbWVzIHsmcXVvdDtlJnF1b3Q7OnsmcXVvdDthJnF1b3Q7OiZxdW90O3RleHQxJnF1b3Q7LCZxdW90O2ImcXVvdDs6JnF1b3Q7dGV4dDImcXVvdDt9fQogICZhbXA7bHQ7ZSZhbXA7Z3Q7JmFtcDtsdDthJmFtcDtndDt0ZXh0MSZhbXA7bHQ7L2EmYW1wO2d0OyZhbXA7bHQ7YSZhbXA7Z3Q7dGV4dDImYW1wO2x0Oy9hJmFtcDtndDsmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90Ozp7JnF1b3Q7YSZxdW90OzpbJnF1b3Q7dGV4dDEmcXVvdDssJnF1b3Q7dGV4dDImcXVvdDtdfX0KICAmYW1wO2x0O2UmYW1wO2d0OyZhbXA7bHQ7YSBhcnJheT0mcXVvdDt0cnVlJnF1b3Q7JmFtcDtndDt0ZXh0MSZhbXA7bHQ7L2EmYW1wO2d0OyZhbXA7bHQ7L2UmYW1wO2d0OyBiZWNvbWVzIHsmcXVvdDtlJnF1b3Q7OnsmcXVvdDthJnF1b3Q7OlsmcXVvdDt0ZXh0MSZxdW90O119fQogICZhbXA7bHQ7ZSZhbXA7Z3Q7JmFtcDtsdDthIHR5cGU9JnF1b3Q7Ym9vbGVhbiZxdW90OyZhbXA7Z3Q7ZmFsc2UmYW1wO2x0Oy9hJmFtcDtndDsmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90Ozp7JnF1b3Q7YSZxdW90OzpmYWxzZX19CiAgJmFtcDtsdDtlJmFtcDtndDsmYW1wO2x0O2EgdHlwZT0mcXVvdDtudW1iZXImcXVvdDsmYW1wO2d0OzEyMy41JmFtcDtsdDsvYSZhbXA7Z3Q7JmFtcDtsdDsvZSZhbXA7Z3Q7IGJlY29tZXMgeyZxdW90O2UmcXVvdDs6eyZxdW90O2EmcXVvdDs6MTIzLjV9fQogICZhbXA7bHQ7ZSBxdW90ZT0mcXVvdDt0cnVlJnF1b3Q7JmFtcDtndDsmYW1wO2x0O2RpdiBhdHRyaWI9JnF1b3Q7dmFsdWUmcXVvdDsvJmFtcDtndDsmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90OzomcXVvdDsmYW1wO2x0O2RpdiBhdHRyaWI9XCZxdW90O3ZhbHVlXCZxdW90Oy8mYW1wO2d0OyZxdW90O30KICAmbHQ7L3ByZSZndDsKICAmbHQ7cC8mZ3Q7CiAgTmFtZXNwYWNlIFVSSXMgYXJlIGlnbm9yZWQuICBOYW1lc3BhY2UgcHJlZml4ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBKU09OIG5hbWUuCiAgJmx0O3AvJmd0OwogIEF0dHJpYnV0ZXMgYXJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHNwZWNpYWwgYXR0cmlidXRlIEBhcnJheT0mcXVvdDt0cnVlJnF1b3Q7IHRoYXQKICBpbmRpY2F0ZXMgdGhlIEpTT04gc2VyaWFsaXphdGlvbiBzaG91bGQgd3JpdGUgdGhlIG5vZGUsIGV2ZW4gaWYgc2luZ2xlLCBhcyBhbgogIGFycmF5LCBhbmQgdGhlIGF0dHJpYnV0ZSBAdHlwZSB0aGF0IGNhbiBiZSBzZXQgdG8gJnF1b3Q7Ym9vbGVhbiZxdW90OyBvciAmcXVvdDtudW1iZXImcXVvdDsgdG8KICBkaWN0YXRlIHRoZSB2YWx1ZSBzaG91bGQgYmUgd3JpdHRlbiBhcyB0aGF0IHR5cGUgKHVucXVvdGVkKS4gIFRoZXJlJ3MgYWxzbwogIGFuIEBxdW90ZSBhdHRyaWJ1dGUgdGhhdCB3aGVuIHNldCB0byB0cnVlIHdyaXRlcyB0aGUgaW5uZXIgY29udGVudCBhcyB0ZXh0CiAgcmF0aGVyIHRoYW4gYXMgc3RydWN0dXJlZCBKU09OLCB1c2VmdWwgZm9yIHNlbmRpbmcgc29tZSBYSFRNTCBvdmVyIHRoZQogIHdpcmUuCiAgJmx0O3AvJmd0OwogIFRleHQgbm9kZXMgd2l0aGluIG1peGVkIGNvbnRlbnQgYXJlIGlnbm9yZWQuCgogIEBwYXJhbSAkeCBFbGVtZW50IG5vZGUgdG8gY29udmVydAogIEByZXR1cm4gU3RyaW5nIGhvbGRpbmcgSlNPTiBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIG9mICR4CgogIEBhdXRob3IgSmFzb24gSHVudGVyCiAgQHZlcnNpb24gMS4wLjEKICAKICBQb3J0ZWQgdG8geHF1ZXJ5IDEuMC1tbDsgZG91YmxlIGVzY2FwZWQgYmFja3NsYXNoZXMgaW4ganNvbjplc2NhcGUKOikKZGVjbGFyZSBmdW5jdGlvbiBqc29uOnNlcmlhbGl6ZSgkeCBhcyBlbGVtZW50KCkpICBhcyB4czpzdHJpbmcgewogIHN0cmluZy1qb2luKCgneycsIGpzb246cHJpbnQtbmFtZS12YWx1ZSgkeCksICd9JyksICZxdW90OyZxdW90OykKfTsKICA8L3RleHRhcmVhPiAKPC9kaXY+IAogCiAgICA8c2NyaXB0PiAKICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAieHEtZGFyayIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4gCiAKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94cXVlcnk8L2NvZGU+LjwvcD4gCiAKICAgIDxwPkRldmVsb3BtZW50IG9mIHRoZSBDb2RlTWlycm9yIFhRdWVyeSBtb2RlIHdhcyBzcG9uc29yZWQgYnkgCiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXJrbG9naWMuY29tIj5NYXJrTG9naWM8L2E+IGFuZCBkZXZlbG9wZWQgYnkgCiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vbWJyZXZvb3J0Ij5NaWtlIEJyZXZvb3J0PC9hPi4KICAgIDwvcD4KIAogIDwvYm9keT4gCjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmtMb2dpYyBDb3Jwb3JhdGlvbgpBdXRob3I6IE1pa2UgQnJldm9vcnQgPG1pa2VAYnJldm9vcnQuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPgogIDxoZWFkPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vY29kZS5qcXVlcnkuY29tL3F1bml0L3F1bml0LWdpdC5jc3MiIHR5cGU9InRleHQvY3NzIi8+CiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktbGF0ZXN0LmpzIj4gPC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vY29kZS5qcXVlcnkuY29tL3F1bml0L3F1bml0LWdpdC5qcyI+PC9zY3JpcHQ+CgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4gCiAgICA8c2NyaXB0IHNyYz0iLi4veHF1ZXJ5LmpzIj48L3NjcmlwdD4KCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZXN0QmFzZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZXN0TXVsdGlBdHRyLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlc3RRdW90ZXMuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVzdEVtcHR5U2VxdWVuY2VLZXl3b3JkLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlc3ROYW1lc3BhY2VzLmpzIj48L3NjcmlwdD4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDEgaWQ9InF1bml0LWhlYWRlciI+WFF1ZXJ5IENvZGVNaXJyb3IgTW9kZTwvaDE+CiAgICA8aDIgaWQ9InF1bml0LWJhbm5lciI+PC9oMj4KICAgIDxoMiBpZD0icXVuaXQtdXNlckFnZW50Ij48L2gyPgogICAgPG9sIGlkPSJxdW5pdC10ZXN0cyI+CiAgICA8L29sPgogICAgPGRpdiBpZD0ic2FuZGJveCIgc3R5bGU9InJpZ2h0OjUwMDBweDsgcG9zaXRpb246YWJzb2x1dGU7ICI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testBase.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgbW9kdWxlKCJ0ZXN0QmFzZSIpOwogICAgdGVzdCgiZXZpbHRlc3QiLCBmdW5jdGlvbigpIHsKICAgICAgZXhwZWN0KDEpOwoKICAgICAgdmFyIGlucHV0ID0gJ3hxdWVyeSB2ZXJzaW9uICZxdW90OzEuMC1tbCZxdW90OztcCiAgICAgICg6IHRoaXMgaXNcCiAgICAgICA6IGEgXAogICAgICAgICAiY29tbWVudCIgOilcCiAgICAgIGxldCAkbGV0IDo9ICZsdDt4IGF0dHI9JnF1b3Q7dmFsdWUmcXVvdDsmZ3Q7JnF1b3Q7dGVzdCZxdW90OyZsdDtmdW5jJmd0O2Z1bmN0aW9uKCkgJHZhciB7ZnVuY3Rpb24oKX0geyR2YXJ9Jmx0Oy9mdW5jJmd0OyZsdDsveCZndDtcCiAgICAgIGxldCAkam9lOj0xXAogICAgICByZXR1cm4gZWxlbWVudCBlbGVtZW50IHtcCiAgICAgICAgICBhdHRyaWJ1dGUgYXR0cmlidXRlIHsgMSB9LFwKICAgICAgICAgIGVsZW1lbnQgdGVzdCB7ICYjMzk7YSYjMzk7IH0sIFwKICAgICAgICAgIGF0dHJpYnV0ZSBmb28geyAmcXVvdDtiYXImcXVvdDsgfSxcCiAgICAgICAgICBmbjpkb2MoKVsgZm9vL0BiYXIgZXEgJGxldCBdLFwKICAgICAgICAgIC8veCB9ICAgIFwKICAgICAgIFwKICAgICAgKDogYSBtb3JlIFwnZXZpbFwnIHRlc3QgOilcCiAgICAgICg6IE1vZGlmaWVkIEJsYWtlbGV5IGV4YW1wbGUgKDogd2l0aCBuZXN0ZWQgY29tbWVudCA6KSAuLi4gOilcCiAgICAgIGRlY2xhcmUgcHJpdmF0ZSBmdW5jdGlvbiBsb2NhbDpkZWNsYXJlKCkgeygpfTtcCiAgICAgIGRlY2xhcmUgcHJpdmF0ZSBmdW5jdGlvbiBsb2NhbDpwcml2YXRlKCkgeygpfTtcCiAgICAgIGRlY2xhcmUgcHJpdmF0ZSBmdW5jdGlvbiBsb2NhbDpmdW5jdGlvbigpIHsoKX07XAogICAgICBkZWNsYXJlIHByaXZhdGUgZnVuY3Rpb24gbG9jYWw6bG9jYWwoKSB7KCl9O1wKICAgICAgbGV0ICRsZXQgOj0gJmx0O2xldCZndDtsZXQgJGxldCA6PSAmcXVvdDtsZXQmcXVvdDsmbHQ7L2xldCZndDtcCiAgICAgIHJldHVybiBlbGVtZW50IGVsZW1lbnQge1wKICAgICAgICAgIGF0dHJpYnV0ZSBhdHRyaWJ1dGUgeyB0cnkgeyB4ZG1wOnZlcnNpb24oKSB9IGNhdGNoKCRlKSB7IHhkbXA6bG9nKCRlKSB9IH0sXAogICAgICAgICAgYXR0cmlidXRlIGZuOmRvYyB7ICZxdW90O2JhciZxdW90OyBjYXN0YWJsZSBhcyB4czpzdHJpbmcgfSxcCiAgICAgICAgICBlbGVtZW50IHRleHQgeyB0ZXh0IHsgJnF1b3Q7dGV4dCZxdW90OyB9IH0sXAogICAgICAgICAgZm46ZG9jKClbIGNoaWxkOjplcS8oQGJhciB8IGF0dHJpYnV0ZTo6YXR0cmlidXRlKSBlcSAkbGV0IF0sXAogICAgICAgICAgLy9mbjpkb2NcCiAgICAgIH0nOwogICAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnhxdWVyeTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnZlcnNpb248L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1zdHJpbmciPiIxLjAtbWwiPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSBjbS1kZWYiPjs8L3NwYW4+ICAgICAgPHNwYW4gY2xhc3M9ImNtLWNvbW1lbnQiPig6IHRoaXMgaXMgICAgICAgOiBhICAgICAgICAgICJjb21tZW50IiA6KTwvc3Bhbj4gICAgICA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+bGV0PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRsZXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj46PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0O3ggPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS1hdHRyaWJ1dGUiPmF0dHI8L3NwYW4+PTxzcGFuIGNsYXNzPSJjbS1zdHJpbmciPiJ2YWx1ZSI8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+InRlc3QiPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDtmdW5jJmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+ZnVuY3Rpb24oKTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPiR2YXI8L3NwYW4+IHs8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZnVuY3Rpb248L3NwYW4+KCl9IHs8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiR2YXI8L3NwYW4+fTxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDsvZnVuYyZndDsmbHQ7L3gmZ3Q7PC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5sZXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JGpvZTwvc3Bhbj48c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Oj08L3NwYW4+PHNwYW4gY2xhc3M9ImNtLWF0b20iPjE8L3NwYW4+ICAgICAgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmVsZW1lbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS13b3JkIj5lbGVtZW50PC9zcGFuPiB7ICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5hdHRyaWJ1dGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS13b3JkIj5hdHRyaWJ1dGU8L3NwYW4+IHsgPHNwYW4gY2xhc3M9ImNtLWF0b20iPjE8L3NwYW4+IH0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbGVtZW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+dGVzdDwvc3Bhbj4geyA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj5cJ2FcJzwvc3Bhbj4gfSwgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5hdHRyaWJ1dGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS13b3JkIj5mb288L3NwYW4+IHsgPHNwYW4gY2xhc3M9ImNtLXN0cmluZyI+ImJhciI8L3NwYW4+IH0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSBjbS1kZWYiPmZuOmRvYzwvc3Bhbj4oKVsgPHNwYW4gY2xhc3M9ImNtLXdvcmQiPmZvbzwvc3Bhbj48c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+QGJhcjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmVxPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRsZXQ8L3NwYW4+IF0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj4vLzwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+eDwvc3Bhbj4gfSAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNtLWNvbW1lbnQiPig6IGEgbW9yZSBcJ2V2aWxcJyB0ZXN0IDopPC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1jb21tZW50Ij4oOiBNb2RpZmllZCBCbGFrZWxleSBleGFtcGxlICg6IHdpdGggbmVzdGVkIGNvbW1lbnQgOikgLi4uIDopPC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5kZWNsYXJlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+cHJpdmF0ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmZ1bmN0aW9uPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj5sb2NhbDpkZWNsYXJlPC9zcGFuPigpIHsoKX08c3BhbiBjbGFzcz0iY20td29yZCI+Ozwvc3Bhbj4gICAgICA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnByaXZhdGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5mdW5jdGlvbjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+bG9jYWw6cHJpdmF0ZTwvc3Bhbj4oKSB7KCl9PHNwYW4gY2xhc3M9ImNtLXdvcmQiPjs8L3NwYW4+ICAgICAgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmRlY2xhcmU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5wcml2YXRlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZnVuY3Rpb248L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSBjbS1kZWYiPmxvY2FsOmZ1bmN0aW9uPC9zcGFuPigpIHsoKX08c3BhbiBjbGFzcz0iY20td29yZCI+Ozwvc3Bhbj4gICAgICA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnByaXZhdGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5mdW5jdGlvbjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+bG9jYWw6bG9jYWw8L3NwYW4+KCkgeygpfTxzcGFuIGNsYXNzPSJjbS13b3JkIj47PC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5sZXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JGxldDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPjo9PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdGFnIj4mbHQ7bGV0Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+bGV0PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+JGxldDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPjo9PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+ImxldCI8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0Oy9sZXQmZ3Q7PC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbGVtZW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+ZWxlbWVudDwvc3Bhbj4geyAgICAgICAgICA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+YXR0cmlidXRlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+YXR0cmlidXRlPC9zcGFuPiB7IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj50cnk8L3NwYW4+IHsgPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+eGRtcDp2ZXJzaW9uPC9zcGFuPigpIH0gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmNhdGNoPC9zcGFuPig8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRlPC9zcGFuPikgeyA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj54ZG1wOmxvZzwvc3Bhbj4oPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4kZTwvc3Bhbj4pIH0gfSwgICAgICAgICAgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmF0dHJpYnV0ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPmZuOmRvYzwvc3Bhbj4geyA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4iYmFyIjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPmNhc3RhYmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+YXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1hdG9tIj54czpzdHJpbmc8L3NwYW4+IH0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbGVtZW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+dGV4dDwvc3Bhbj4geyA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+dGV4dDwvc3Bhbj4geyA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4idGV4dCI8L3NwYW4+IH0gfSwgICAgICAgICAgPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+Zm46ZG9jPC9zcGFuPigpWyA8c3BhbiBjbGFzcz0iY20tcXVhbGlmaWVyIj5jaGlsZDo6PC9zcGFuPjxzcGFuIGNsYXNzPSJjbS13b3JkIj5lcTwvc3Bhbj48c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Lzwvc3Bhbj4oPHNwYW4gY2xhc3M9ImNtLXdvcmQiPkBiYXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj58PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tcXVhbGlmaWVyIj5hdHRyaWJ1dGU6Ojwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+YXR0cmlidXRlPC9zcGFuPikgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmVxPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRsZXQ8L3NwYW4+IF0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj4vLzwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+Zm46ZG9jPC9zcGFuPiAgICAgIH0nOwoKICAgICAgJCgiI3NhbmRib3giKS5odG1sKCc8dGV4dGFyZWEgaWQ9ImVkaXRvciI+JyArIGlucHV0ICsgJzwvdGV4dGFyZWE+Jyk7CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSgkKCIjZWRpdG9yIilbMF0pOwogICAgICB2YXIgcmVzdWx0ID0gJCgiLkNvZGVNaXJyb3ItbGluZXMgZGl2IGRpdiBwcmUiKVswXS5pbm5lckhUTUw7CgogICAgICAgZXF1YWwocmVzdWx0LCBleHBlY3RlZCk7CiAgICAgICAkKCIjZWRpdG9yIikuaHRtbCgiIik7CiAgICB9KTsKICB9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testEmptySequenceKeyword.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICBtb2R1bGUoInRlc3RFbXB0eVNlcXVlbmNlS2V5d29yZCIpOwogIHRlc3QoInRlc3RFbXB0eVNlcXVlbmNlS2V5d29yZCIsIGZ1bmN0aW9uKCkgewogICAgZXhwZWN0KDEpOwoKICAgIHZhciBpbnB1dCA9ICciZm9vIiBpbnN0YW5jZSBvZiBlbXB0eS1zZXF1ZW5jZSgpJzsKICAgIHZhciBleHBlY3RlZCA9ICc8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4iZm9vIjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmluc3RhbmNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+b2Y8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbXB0eS1zZXF1ZW5jZTwvc3Bhbj4oKSc7CgogICAgJCgiI3NhbmRib3giKS5odG1sKCc8dGV4dGFyZWEgaWQ9ImVkaXRvciI+JyArIGlucHV0ICsgJzwvdGV4dGFyZWE+Jyk7CiAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoJCgiI2VkaXRvciIpWzBdKTsKICAgIHZhciByZXN1bHQgPSAkKCIuQ29kZU1pcnJvci1saW5lcyBkaXYgZGl2IHByZSIpWzBdLmlubmVySFRNTDsKCiAgICAgZXF1YWwocmVzdWx0LCBleHBlY3RlZCk7CiAgICAgJCgiI2VkaXRvciIpLmh0bWwoIiIpOwogIH0pOwp9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testMultiAttr.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgbW9kdWxlKCJ0ZXN0TXVsdGlBdHRyIik7CiAgICB0ZXN0KCJ0ZXN0MSIsIGZ1bmN0aW9uKCkgewogICAgICBleHBlY3QoMSk7CgogICAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0O3AgPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS1hdHRyaWJ1dGUiPmExPC9zcGFuPj08c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4iZm9vIjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWF0dHJpYnV0ZSI+YTI8L3NwYW4+PTxzcGFuIGNsYXNzPSJjbS1zdHJpbmciPiJiYXIiPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS10YWciPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXdvcmQiPmhlbGxvPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+d29ybGQ8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0Oy9wJmd0Ozwvc3Bhbj4nOwoKICAgICAgJCgiI3NhbmRib3giKS5odG1sKCc8dGV4dGFyZWEgaWQ9ImVkaXRvciI+PC90ZXh0YXJlYT4nKTsKICAgICAgJCgiI2VkaXRvciIpLmh0bWwoJzxwIGExPSJmb28iIGEyPSJiYXIiPmhlbGxvIHdvcmxkPC9wPicpOwogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoJCgiI2VkaXRvciIpWzBdKTsKICAgICAgdmFyIHJlc3VsdCA9ICQoIi5Db2RlTWlycm9yLWxpbmVzIGRpdiBkaXYgcHJlIilbMF0uaW5uZXJIVE1MOwoKICAgICAgIGVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOwogICAgICAgJCgiI2VkaXRvciIpLmh0bWwoIiIpOwogICAgfSk7CiAgfSk7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testNamespaces.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICBtb2R1bGUoInRlc3QgbmFtZXNwYWNlcyIpOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gdGhpcyB0ZXN0IGlzIGJhc2VkIG9uIHRoaXM6Ci8vaHR0cDovL21icmV2b29ydC5naXRodWIuY29tL0NvZGVNaXJyb3IyLyMhZXhwclNlcVR5cGVzL1Byb2xvZ0V4cHIvVmFyaWFibGVQcm9sb2cvRXh0ZXJuYWxWYXJpYWJsZXNXaXRoL0syLUV4dGVybmFsVmFyaWFibGVzV2l0aC0xMC54cQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHRlc3QoInRlc3QgbmFtZXNwYWNlZCB2YXJpYWJsZSIsIGZ1bmN0aW9uKCkgewogICAgZXhwZWN0KDEpOwoKICAgIHZhciBpbnB1dCA9ICdkZWNsYXJlIG5hbWVzcGFjZSBlID0gImh0dHA6Ly9leGFtcGxlLmNvbS9BTmFtZXNwYWNlIjtcCmRlY2xhcmUgdmFyaWFibGUgJGU6ZXhhbXBsZUNvbVRoaXNWYXJJc05vdFJlY29nbml6ZWQgYXMgZWxlbWVudCgqKSBleHRlcm5hbDsnOwoKICAgIHZhciBleHBlY3RlZCA9ICc8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPmU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4iaHR0cDovL2V4YW1wbGUuY29tL0FOYW1lc3BhY2UiPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS13b3JkIj47ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnZhcmlhYmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRlOmV4YW1wbGVDb21UaGlzVmFySXNOb3RSZWNvZ25pemVkPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+YXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbGVtZW50PC9zcGFuPig8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Kjwvc3Bhbj4pIDxzcGFuIGNsYXNzPSJjbS13b3JkIj5leHRlcm5hbDs8L3NwYW4+JzsKCiAgICAkKCIjc2FuZGJveCIpLmh0bWwoJzx0ZXh0YXJlYSBpZD0iZWRpdG9yIj4nICsgaW5wdXQgKyAnPC90ZXh0YXJlYT4nKTsKICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSgkKCIjZWRpdG9yIilbMF0pOwogICAgdmFyIHJlc3VsdCA9ICQoIi5Db2RlTWlycm9yLWxpbmVzIGRpdiBkaXYgcHJlIilbMF0uaW5uZXJIVE1MOwoKICAgICBlcXVhbChyZXN1bHQsIGV4cGVjdGVkKTsKICAgICAkKCIjZWRpdG9yIikuaHRtbCgiIik7CiAgfSk7CgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gdGhpcyB0ZXN0IGlzIGJhc2VkIG9uOgovLyBodHRwOi8vbWJyZXZvb3J0LmdpdGh1Yi5jb20vQ29kZU1pcnJvcjIvIyFCYXNpY3MvRVFOYW1lcy9lcW5hbWUtMDAyLnhxICAKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICB0ZXN0KCJ0ZXN0IEVRTmFtZSB2YXJpYWJsZSIsIGZ1bmN0aW9uKCkgewogICAgZXhwZWN0KDEpOwoKICAgIHZhciBpbnB1dCA9ICdkZWNsYXJlIHZhcmlhYmxlICQiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ucy9teSI6dmFyIDo9IDEyO1wKPG91dD57JCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL25zL215Ijp2YXJ9PC9vdXQ+JzsKCiAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmRlY2xhcmU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj52YXJpYWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4kImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vbnMvbXkiOnZhcjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPjo9PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tYXRvbSI+MTI8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXdvcmQiPjs8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0O291dCZndDs8L3NwYW4+ezxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL25zL215Ijp2YXI8L3NwYW4+fTxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDsvb3V0Jmd0Ozwvc3Bhbj4nOwoKICAgICQoIiNzYW5kYm94IikuaHRtbCgnPHRleHRhcmVhIGlkPSJlZGl0b3IiPicgKyBpbnB1dCArICc8L3RleHRhcmVhPicpOwogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKCQoIiNlZGl0b3IiKVswXSk7CiAgICB2YXIgcmVzdWx0ID0gJCgiLkNvZGVNaXJyb3ItbGluZXMgZGl2IGRpdiBwcmUiKVswXS5pbm5lckhUTUw7CgogICAgIGVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOwogICAgICQoIiNlZGl0b3IiKS5odG1sKCIiKTsKICB9KTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHRoaXMgdGVzdCBpcyBiYXNlZCBvbjoKLy8gaHR0cDovL21icmV2b29ydC5naXRodWIuY29tL0NvZGVNaXJyb3IyLyMhQmFzaWNzL0VRTmFtZXMvZXFuYW1lLTAwMy54cQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHRlc3QoInRlc3QgRVFOYW1lIGZ1bmN0aW9uIiwgZnVuY3Rpb24oKSB7CiAgICBleHBlY3QoMSk7CgogICAgdmFyIGlucHV0ID0gJ2RlY2xhcmUgZnVuY3Rpb24gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vbnMvbXkiOmZuICgkYSBhcyB4czppbnRlZ2VyKSBhcyB4czppbnRlZ2VyIHtcCiAgICRhICsgMlwKfTtcCjxvdXQ+eyJodHRwOi8vd3d3LmV4YW1wbGUuY29tL25zL215IjpmbigxMil9PC9vdXQ+JzsKCiAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmRlY2xhcmU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5mdW5jdGlvbjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vbnMvbXkiOmZuPC9zcGFuPiAoPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4kYTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmFzPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tYXRvbSI+eHM6aW50ZWdlcjwvc3Bhbj4pIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5hczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWF0b20iPnhzOmludGVnZXI8L3NwYW4+IHsgICA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRhPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Kzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWF0b20iPjI8L3NwYW4+fTxzcGFuIGNsYXNzPSJjbS13b3JkIj47PC9zcGFuPjxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDtvdXQmZ3Q7PC9zcGFuPns8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj4iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ucy9teSI6Zm48L3NwYW4+KDxzcGFuIGNsYXNzPSJjbS1hdG9tIj4xMjwvc3Bhbj4pfTxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDsvb3V0Jmd0Ozwvc3Bhbj4nOwoKICAgICQoIiNzYW5kYm94IikuaHRtbCgnPHRleHRhcmVhIGlkPSJlZGl0b3IiPicgKyBpbnB1dCArICc8L3RleHRhcmVhPicpOwogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKCQoIiNlZGl0b3IiKVswXSk7CiAgICB2YXIgcmVzdWx0ID0gJCgiLkNvZGVNaXJyb3ItbGluZXMgZGl2IGRpdiBwcmUiKVswXS5pbm5lckhUTUw7CgogICAgIGVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOwogICAgICQoIiNlZGl0b3IiKS5odG1sKCIiKTsKICB9KTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHRoaXMgdGVzdCBpcyBiYXNlZCBvbjoKLy8gaHR0cDovL21icmV2b29ydC5naXRodWIuY29tL0NvZGVNaXJyb3IyLyMhQmFzaWNzL0VRTmFtZXMvZXFuYW1lLTAwMy54cQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHRlc3QoInRlc3QgRVFOYW1lIGZ1bmN0aW9uIHdpdGggc2luZ2xlIHF1b3RlcyIsIGZ1bmN0aW9uKCkgewogICAgZXhwZWN0KDEpOwoKICAgIHZhciBpbnB1dCA9ICdkZWNsYXJlIGZ1bmN0aW9uIFwnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ucy9teVwnOmZuICgkYSBhcyB4czppbnRlZ2VyKSBhcyB4czppbnRlZ2VyIHtcCiAgICRhICsgMlwKfTtcCjxvdXQ+e1wnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ucy9teVwnOmZuKDEyKX08L291dD4nOwoKICAgIHZhciBleHBlY3RlZCA9ICc8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmZ1bmN0aW9uPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj5cJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vbnMvbXlcJzpmbjwvc3Bhbj4gKDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JGE8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5hczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWF0b20iPnhzOmludGVnZXI8L3NwYW4+KSA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+YXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1hdG9tIj54czppbnRlZ2VyPC9zcGFuPiB7ICAgPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4kYTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPis8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1hdG9tIj4yPC9zcGFuPn08c3BhbiBjbGFzcz0iY20td29yZCI+Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY20tdGFnIj4mbHQ7b3V0Jmd0Ozwvc3Bhbj57PHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+XCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL25zL215XCc6Zm48L3NwYW4+KDxzcGFuIGNsYXNzPSJjbS1hdG9tIj4xMjwvc3Bhbj4pfTxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDsvb3V0Jmd0Ozwvc3Bhbj4nOwoKICAgICQoIiNzYW5kYm94IikuaHRtbCgnPHRleHRhcmVhIGlkPSJlZGl0b3IiPicgKyBpbnB1dCArICc8L3RleHRhcmVhPicpOwogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKCQoIiNlZGl0b3IiKVswXSk7CiAgICB2YXIgcmVzdWx0ID0gJCgiLkNvZGVNaXJyb3ItbGluZXMgZGl2IGRpdiBwcmUiKVswXS5pbm5lckhUTUw7CgogICAgIGVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOwogICAgICQoIiNlZGl0b3IiKS5odG1sKCIiKTsKICB9KTsKCn0pOwoKCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testProcessingInstructions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICBtb2R1bGUoInRlc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zIik7CiAgdGVzdCgidGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvbnMiLCBmdW5jdGlvbigpIHsKICAgIGV4cGVjdCgxKTsKCiAgICB2YXIgaW5wdXQgPSAnZGF0YSg8P3RhcmdldCBjb250ZW50Pz4pIGluc3RhbmNlIG9mIHhzOnN0cmluZyc7CiAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+ZGF0YTwvc3Bhbj4oPHNwYW4gY2xhc3M9ImNtLWNvbW1lbnQgY20tbWV0YSI+Jmx0Oz90YXJnZXQgY29udGVudD8mZ3Q7PC9zcGFuPikgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmluc3RhbmNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+b2Y8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1hdG9tIj54czpzdHJpbmc8L3NwYW4+JzsKCiAgICAkKCIjc2FuZGJveCIpLmh0bWwoJzx0ZXh0YXJlYSBpZD0iZWRpdG9yIj4nICsgaW5wdXQgKyAnPC90ZXh0YXJlYT4nKTsKICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSgkKCIjZWRpdG9yIilbMF0pOwogICAgdmFyIHJlc3VsdCA9ICQoIi5Db2RlTWlycm9yLWxpbmVzIGRpdiBkaXYgcHJlIilbMF0uaW5uZXJIVE1MOwoKICAgICBlcXVhbChyZXN1bHQsIGV4cGVjdGVkKTsKICAgICAkKCIjZWRpdG9yIikuaHRtbCgiIik7CiAgfSk7Cn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testQuotes.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgbW9kdWxlKCJ0ZXN0UXVvdGVFc2NhcGUiKTsKICAgIHRlc3QoInRlc3RRdW90ZUVzY2FwZURvdWJsZSIsIGZ1bmN0aW9uKCkgewogICAgICBleHBlY3QoMSk7CgogICAgICB2YXIgaW5wdXQgPSAnbGV0ICRyb290Zm9sZGVyIDo9ICJjOlxcYnVpbGRzXFx3aW5udFxcSEVBRFxccWFcXHNjcmlwdHNcXCJcCmxldCAka2V5c2ZvbGRlciA6PSBjb25jYXQoJHJvb3Rmb2xkZXIsICJrZXlzXFwiKVwKcmV0dXJuXAoka2V5c2ZvbGRlcic7CiAgICAgIHZhciBleHBlY3RlZCA9ICc8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+bGV0PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRyb290Zm9sZGVyPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Oj08L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1zdHJpbmciPiJjOlxcYnVpbGRzXFx3aW5udFxcSEVBRFxccWFcXHNjcmlwdHNcXCI8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmxldDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4ka2V5c2ZvbGRlcjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPjo9PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj5jb25jYXQ8L3NwYW4+KDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JHJvb3Rmb2xkZXI8L3NwYW4+LCA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4ia2V5c1xcIjwvc3Bhbj4pPHNwYW4gY2xhc3M9ImNtLXdvcmQiPnJldHVybiRrZXlzZm9sZGVyPC9zcGFuPic7CgogICAgICAkKCIjc2FuZGJveCIpLmh0bWwoJzx0ZXh0YXJlYSBpZD0iZWRpdG9yIj4nICsgaW5wdXQgKyAnPC90ZXh0YXJlYT4nKTsKICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKCQoIiNlZGl0b3IiKVswXSk7CiAgICAgIHZhciByZXN1bHQgPSAkKCIuQ29kZU1pcnJvci1saW5lcyBkaXYgZGl2IHByZSIpWzBdLmlubmVySFRNTDsKCiAgICAgICBlcXVhbChyZXN1bHQsIGV4cGVjdGVkKTsKICAgICAgICQoIiNlZGl0b3IiKS5odG1sKCIiKTsKICAgIH0pOwogIH0pOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/xquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKQ29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmtMb2dpYyBDb3Jwb3JhdGlvbgpBdXRob3I6IE1pa2UgQnJldm9vcnQgPG1pa2VAYnJldm9vcnQuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KKi8KQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4cXVlcnkiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewoKICAvLyBUaGUga2V5d29yZHMgb2JqZWN0IGlzIHNldCB0byB0aGUgcmVzdWx0IG9mIHRoaXMgc2VsZiBleGVjdXRpbmcKICAvLyBmdW5jdGlvbi4gRWFjaCBrZXl3b3JkIGlzIGEgcHJvcGVydHkgb2YgdGhlIGtleXdvcmRzIG9iamVjdCB3aG9zZQogIC8vIHZhbHVlIGlzIHt0eXBlOiBhdHlwZSwgc3R5bGU6IGFzdHlsZX0KICB2YXIga2V5d29yZHMgPSBmdW5jdGlvbigpewogICAgLy8gY29udmVpbmVuY2UgZnVuY3Rpb25zIHVzZWQgdG8gYnVpbGQga2V5d29yZHMgb2JqZWN0CiAgICBmdW5jdGlvbiBrdyh0eXBlKSB7cmV0dXJuIHt0eXBlOiB0eXBlLCBzdHlsZTogImtleXdvcmQifTt9CiAgICB2YXIgQSA9IGt3KCJrZXl3b3JkIGEiKQogICAgICAsIEIgPSBrdygia2V5d29yZCBiIikKICAgICAgLCBDID0ga3coImtleXdvcmQgYyIpCiAgICAgICwgb3BlcmF0b3IgPSBrdygib3BlcmF0b3IiKQogICAgICAsIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifQogICAgICAsIHB1bmN0dWF0aW9uID0ge3R5cGU6ICJwdW5jdHVhdGlvbiIsIHN0eWxlOiAiIn0KICAgICAgLCBxdWFsaWZpZXIgPSB7dHlwZTogImF4aXNfc3BlY2lmaWVyIiwgc3R5bGU6ICJxdWFsaWZpZXIifTsKICAgIAogICAgLy8ga3dPYmogaXMgd2hhdCBpcyByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBlbmQKICAgIHZhciBrd09iaiA9IHsKICAgICAgJ2lmJzogQSwgJ3N3aXRjaCc6IEEsICd3aGlsZSc6IEEsICdmb3InOiBBLAogICAgICAnZWxzZSc6IEIsICd0aGVuJzogQiwgJ3RyeSc6IEIsICdmaW5hbGx5JzogQiwgJ2NhdGNoJzogQiwKICAgICAgJ2VsZW1lbnQnOiBDLCAnYXR0cmlidXRlJzogQywgJ2xldCc6IEMsICdpbXBsZW1lbnRzJzogQywgJ2ltcG9ydCc6IEMsICdtb2R1bGUnOiBDLCAnbmFtZXNwYWNlJzogQywgCiAgICAgICdyZXR1cm4nOiBDLCAnc3VwZXInOiBDLCAndGhpcyc6IEMsICd0aHJvd3MnOiBDLCAnd2hlcmUnOiBDLCAncHJpdmF0ZSc6IEMsICAgICAgCiAgICAgICcsJzogcHVuY3R1YXRpb24sCiAgICAgICdudWxsJzogYXRvbSwgJ2ZuOmZhbHNlKCknOiBhdG9tLCAnZm46dHJ1ZSgpJzogYXRvbQogICAgfTsKICAgIAogICAgLy8gYSBsaXN0IG9mICdiYXNpYycga2V5d29yZHMuIEZvciBlYWNoIGFkZCBhIHByb3BlcnR5IHRvIGt3T2JqIHdpdGggdGhlIHZhbHVlIG9mIAogICAgLy8ge3R5cGU6IGJhc2ljW2ldLCBzdHlsZTogImtleXdvcmQifSBlLmcuICdhZnRlcicgLS0+IHt0eXBlOiAiYWZ0ZXIiLCBzdHlsZTogImtleXdvcmQifQogICAgdmFyIGJhc2ljID0gWydhZnRlcicsJ2FuY2VzdG9yJywnYW5jZXN0b3Itb3Itc2VsZicsJ2FuZCcsJ2FzJywnYXNjZW5kaW5nJywnYXNzZXJ0JywnYXR0cmlidXRlJywnYmVmb3JlJywKICAgICdieScsJ2Nhc2UnLCdjYXN0JywnY2hpbGQnLCdjb21tZW50JywnZGVjbGFyZScsJ2RlZmF1bHQnLCdkZWZpbmUnLCdkZXNjZW5kYW50JywnZGVzY2VuZGFudC1vci1zZWxmJywKICAgICdkZXNjZW5kaW5nJywnZG9jdW1lbnQnLCdkb2N1bWVudC1ub2RlJywnZWxlbWVudCcsJ2Vsc2UnLCdlcScsJ2V2ZXJ5JywnZXhjZXB0JywnZXh0ZXJuYWwnLCdmb2xsb3dpbmcnLAogICAgJ2ZvbGxvd2luZy1zaWJsaW5nJywnZm9sbG93cycsJ2ZvcicsJ2Z1bmN0aW9uJywnaWYnLCdpbXBvcnQnLCdpbicsJ2luc3RhbmNlJywnaW50ZXJzZWN0JywnaXRlbScsCiAgICAnbGV0JywnbW9kdWxlJywnbmFtZXNwYWNlJywnbm9kZScsJ25vZGUnLCdvZicsJ29ubHknLCdvcicsJ29yZGVyJywncGFyZW50JywncHJlY2VkZXMnLCdwcmVjZWRpbmcnLAogICAgJ3ByZWNlZGluZy1zaWJsaW5nJywncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicsJ3JlZicsJ3JldHVybicsJ3JldHVybnMnLCdzYXRpc2ZpZXMnLCdzY2hlbWEnLCdzY2hlbWEtZWxlbWVudCcsCiAgICAnc2VsZicsJ3NvbWUnLCdzb3J0YnknLCdzdGFibGUnLCd0ZXh0JywndGhlbicsJ3RvJywndHJlYXQnLCd0eXBlc3dpdGNoJywndW5pb24nLCd2YXJpYWJsZScsJ3ZlcnNpb24nLCd3aGVyZScsCiAgICAneHF1ZXJ5JywgJ2VtcHR5LXNlcXVlbmNlJ107CiAgICBmb3IodmFyIGk9MCwgbD1iYXNpYy5sZW5ndGg7IGkgPCBsOyBpKyspIHsga3dPYmpbYmFzaWNbaV1dID0ga3coYmFzaWNbaV0pfTsKICAgIAogICAgLy8gYSBsaXN0IG9mIHR5cGVzLiBGb3IgZWFjaCBhZGQgYSBwcm9wZXJ0eSB0byBrd09iaiB3aXRoIHRoZSB2YWx1ZSBvZiAKICAgIC8vIHt0eXBlOiAiYXRvbSIsIHN0eWxlOiAiYXRvbSJ9CiAgICB2YXIgdHlwZXMgPSBbJ3hzOnN0cmluZycsICd4czpmbG9hdCcsICd4czpkZWNpbWFsJywgJ3hzOmRvdWJsZScsICd4czppbnRlZ2VyJywgJ3hzOmJvb2xlYW4nLCAneHM6ZGF0ZScsICd4czpkYXRlVGltZScsIAogICAgJ3hzOnRpbWUnLCAneHM6ZHVyYXRpb24nLCAneHM6ZGF5VGltZUR1cmF0aW9uJywgJ3hzOnRpbWUnLCAneHM6eWVhck1vbnRoRHVyYXRpb24nLCAnbnVtZXJpYycsICd4czpoZXhCaW5hcnknLCAKICAgICd4czpiYXNlNjRCaW5hcnknLCAneHM6YW55VVJJJywgJ3hzOlFOYW1lJywgJ3hzOmJ5dGUnLCd4czpib29sZWFuJywneHM6YW55VVJJJywneGY6eWVhck1vbnRoRHVyYXRpb24nXTsKICAgIGZvcih2YXIgaT0wLCBsPXR5cGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeyBrd09ialt0eXBlc1tpXV0gPSBhdG9tO307CiAgICAKICAgIC8vIGVhY2ggb3BlcmF0b3Igd2lsbCBhZGQgYSBwcm9wZXJ0eSB0byBrd09iaiB3aXRoIHZhbHVlIG9mIHt0eXBlOiAib3BlcmF0b3IiLCBzdHlsZTogImtleXdvcmQifQogICAgdmFyIG9wZXJhdG9ycyA9IFsnZXEnLCAnbmUnLCAnbHQnLCAnbGUnLCAnZ3QnLCAnZ2UnLCAnOj0nLCAnPScsICc+JywgJz49JywgJzwnLCAnPD0nLCAnLicsICd8JywgJz8nLCAnYW5kJywgJ29yJywgJ2RpdicsICdpZGl2JywgJ21vZCcsICcqJywgJy8nLCAnKycsICctJ107CiAgICBmb3IodmFyIGk9MCwgbD1vcGVyYXRvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7IGt3T2JqW29wZXJhdG9yc1tpXV0gPSBvcGVyYXRvcjt9OwogICAgCiAgICAvLyBlYWNoIGF4aXNfc3BlY2lmaWVycyB3aWxsIGFkZCBhIHByb3BlcnR5IHRvIGt3T2JqIHdpdGggdmFsdWUgb2Yge3R5cGU6ICJheGlzX3NwZWNpZmllciIsIHN0eWxlOiAicXVhbGlmaWVyIn0KICAgIHZhciBheGlzX3NwZWNpZmllcnMgPSBbInNlbGY6OiIsICJhdHRyaWJ1dGU6OiIsICJjaGlsZDo6IiwgImRlc2NlbmRhbnQ6OiIsICJkZXNjZW5kYW50LW9yLXNlbGY6OiIsICJwYXJlbnQ6OiIsIAogICAgImFuY2VzdG9yOjoiLCAiYW5jZXN0b3Itb3Itc2VsZjo6IiwgImZvbGxvd2luZzo6IiwgInByZWNlZGluZzo6IiwgImZvbGxvd2luZy1zaWJsaW5nOjoiLCAicHJlY2VkaW5nLXNpYmxpbmc6OiJdOwogICAgZm9yKHZhciBpPTAsIGw9YXhpc19zcGVjaWZpZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgeyBrd09ialtheGlzX3NwZWNpZmllcnNbaV1dID0gcXVhbGlmaWVyOyB9OwoKICAgIHJldHVybiBrd09iajsKICB9KCk7CgogIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXQKICAvLyBjb25zaW5nIHVwIHRvbnMgb2Ygb2JqZWN0cy4KICB2YXIgdHlwZSwgY29udGVudDsKICAKICBmdW5jdGlvbiByZXQodHAsIHN0eWxlLCBjb250KSB7CiAgICB0eXBlID0gdHA7IGNvbnRlbnQgPSBjb250OwogICAgcmV0dXJuIHN0eWxlOwogIH0KICAKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CiAgCiAgLy8gdGhlIHByaW1hcnkgbW9kZSB0b2tlbml6ZXIKICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKSwgCiAgICAgICAgbWlnaHRCZUZ1bmN0aW9uID0gZmFsc2UsCiAgICAgICAgaXNFUU5hbWUgPSBpc0VRTmFtZUFoZWFkKHN0cmVhbSk7CiAgICAKICAgIC8vIGFuIFhNTCB0YWcgKGlmIG5vdCBpbiBzb21lIHN1YiwgY2hhaW5lZCB0b2tlbml6ZXIpCiAgICBpZiAoY2ggPT0gIjwiKSB7CiAgICAgIGlmKHN0cmVhbS5tYXRjaCgiIS0tIiwgdHJ1ZSkpCiAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuWE1MQ29tbWVudCk7CiAgICAgICAgCiAgICAgIGlmKHN0cmVhbS5tYXRjaCgiIVtDREFUQSIsIGZhbHNlKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DREFUQTsKICAgICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICAgIH0KICAgICAgCiAgICAgIGlmKHN0cmVhbS5tYXRjaCgiPyIsIGZhbHNlKSkgewogICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblByZVByb2Nlc3NpbmcpOwogICAgICB9CiAgICAgIAogICAgICB2YXIgaXNjbG9zZSA9IHN0cmVhbS5lYXQoIi8iKTsKICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgIHZhciB0YWdOYW1lID0gIiIsIGM7CiAgICAgIHdoaWxlICgoYyA9IHN0cmVhbS5lYXQoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pKSkgdGFnTmFtZSArPSBjOwogICAgICAKICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuVGFnKHRhZ05hbWUsIGlzY2xvc2UpKTsKICAgIH0KICAgIC8vIHN0YXJ0IGNvZGUgYmxvY2sKICAgIGVsc2UgaWYoY2ggPT0gInsiKSB7CiAgICAgIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLHsgdHlwZTogImNvZGVibG9jayJ9KTsKICAgICAgcmV0dXJuIHJldCgiIiwgIiIpOwogICAgfQogICAgLy8gZW5kIGNvZGUgYmxvY2sKICAgIGVsc2UgaWYoY2ggPT0gIn0iKSB7CiAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICByZXR1cm4gcmV0KCIiLCAiIik7CiAgICB9CiAgICAvLyBpZiB3ZSdyZSBpbiBhbiBYTUwgYmxvY2sKICAgIGVsc2UgaWYoaXNJblhtbEJsb2NrKHN0YXRlKSkgewogICAgICBpZihjaCA9PSAiPiIpCiAgICAgICAgcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwogICAgICBlbHNlIGlmKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCI+IikpIHsKICAgICAgICBwb3BTdGF0ZVN0YWNrKHN0YXRlKTsKICAgICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICAgIH0KICAgICAgZWxzZSAgCiAgICAgICAgcmV0dXJuIHJldCgid29yZCIsICJ3b3JkIik7CiAgICB9CiAgICAvLyBpZiBhIG51bWJlcgogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0ubWF0Y2goL15cZCooPzpcLlxkKik/KD86RVsrXC1dP1xkKyk/Lyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJhdG9tIik7CiAgICB9CiAgICAvLyBjb21tZW50IHN0YXJ0CiAgICBlbHNlIGlmIChjaCA9PT0gIigiICYmIHN0cmVhbS5lYXQoIjoiKSkgewogICAgICBwdXNoU3RhdGVTdGFjayhzdGF0ZSwgeyB0eXBlOiAiY29tbWVudCJ9KTsKICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7CiAgICB9CiAgICAvLyBxdW90ZWQgc3RyaW5nCiAgICBlbHNlIGlmICggICFpc0VRTmFtZSAmJiAoY2ggPT09ICciJyB8fCBjaCA9PT0gIiciKSkKICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoKSk7CiAgICAvLyB2YXJpYWJsZQogICAgZWxzZSBpZihjaCA9PT0gIiQiKSB7CiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblZhcmlhYmxlKTsKICAgIH0KICAgIC8vIGFzc2lnbm1lbnQKICAgIGVsc2UgaWYoY2ggPT09IjoiICYmIHN0cmVhbS5lYXQoIj0iKSkgewogICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJrZXl3b3JkIik7CiAgICB9CiAgICAvLyBvcGVuIHBhcmVuCiAgICBlbHNlIGlmKGNoID09PSAiKCIpIHsKICAgICAgcHVzaFN0YXRlU3RhY2soc3RhdGUsIHsgdHlwZTogInBhcmVuIn0pOwogICAgICByZXR1cm4gcmV0KCIiLCAiIik7CiAgICB9CiAgICAvLyBjbG9zZSBwYXJlbgogICAgZWxzZSBpZihjaCA9PT0gIikiKSB7CiAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICByZXR1cm4gcmV0KCIiLCAiIik7CiAgICB9CiAgICAvLyBvcGVuIHBhcmVuCiAgICBlbHNlIGlmKGNoID09PSAiWyIpIHsKICAgICAgcHVzaFN0YXRlU3RhY2soc3RhdGUsIHsgdHlwZTogImJyYWNrZXQifSk7CiAgICAgIHJldHVybiByZXQoIiIsICIiKTsKICAgIH0KICAgIC8vIGNsb3NlIHBhcmVuCiAgICBlbHNlIGlmKGNoID09PSAiXSIpIHsKICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgIHJldHVybiByZXQoIiIsICIiKTsKICAgIH0KICAgIGVsc2UgewogICAgICB2YXIga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjaCkgJiYga2V5d29yZHNbY2hdOwoKICAgICAgLy8gaWYgdGhlcmUncyBhIEVRTmFtZSBhaGVhZCwgY29uc3VtZSB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHBvcnRpb24sIGl0J3MgbGlrZWx5IGEgZnVuY3Rpb24KICAgICAgaWYoaXNFUU5hbWUgJiYgY2ggPT09ICdcIicpIHdoaWxlKHN0cmVhbS5uZXh0KCkgIT09ICciJyl7fQogICAgICBpZihpc0VRTmFtZSAmJiBjaCA9PT0gJ1wnJykgd2hpbGUoc3RyZWFtLm5leHQoKSAhPT0gJ1wnJyl7fQogICAgICAKICAgICAgLy8gZ29iYmxlIHVwIGEgd29yZCBpZiB0aGUgY2hhcmFjdGVyIGlzIG5vdCBrbm93bgogICAgICBpZigha25vd24pIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfLV0vKTsKICAgICAgCiAgICAgIC8vIGdvYmJsZSBhIGNvbG9uIGluIHRoZSBjYXNlIHRoYXQgaXMgYSBsaWIgZnVuYyB0eXBlIGNhbGwgZm46ZG9jCiAgICAgIHZhciBmb3VuZENvbG9uID0gc3RyZWFtLmVhdCgiOiIpCiAgICAgIAogICAgICAvLyBpZiB0aGVyZSdzIG5vdCBhIHNlY29uZCBjb2xvbiwgZ29iYmxlIGFub3RoZXIgd29yZC4gT3RoZXJ3aXNlLCBpdCdzIHByb2JhYmx5IGFuIGF4aXMgc3BlY2lmaWVyCiAgICAgIC8vIHdoaWNoIHNob3VsZCBnZXQgbWF0Y2hlZCBhcyBhIGtleXdvcmQKICAgICAgaWYoIXN0cmVhbS5lYXQoIjoiKSAmJiBmb3VuZENvbG9uKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF8tXS8pOwogICAgICB9CiAgICAgIC8vIGlmIHRoZSBuZXh0IG5vbiB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBhbiBvcGVuIHBhcmVuLCB0aGlzIGlzIHByb2JhYmx5IGEgZnVuY3Rpb24gKGlmIG5vdCBhIGtleXdvcmQgb2Ygb3RoZXIgc29ydCkKICAgICAgaWYoc3RyZWFtLm1hdGNoKC9eWyBcdF0qXCgvLCBmYWxzZSkpIHsKICAgICAgICBtaWdodEJlRnVuY3Rpb24gPSB0cnVlOwogICAgICB9CiAgICAgIC8vIGlzIHRoZSB3b3JkIGEga2V5d29yZD8KICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICBrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtleXdvcmRzW3dvcmRdOwogICAgICAKICAgICAgLy8gaWYgd2UgdGhpbmsgaXQncyBhIGZ1bmN0aW9uIGNhbGwgYnV0IG5vdCB5ZXQga25vd24sIAogICAgICAvLyBzZXQgc3R5bGUgdG8gdmFyaWFibGUgZm9yIG5vdyBmb3IgbGFjayBvZiBzb21ldGhpbmcgYmV0dGVyCiAgICAgIGlmKG1pZ2h0QmVGdW5jdGlvbiAmJiAha25vd24pIGtub3duID0ge3R5cGU6ICJmdW5jdGlvbl9jYWxsIiwgc3R5bGU6ICJ2YXJpYWJsZSBkZWYifTsKICAgICAgCiAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyB3b3JkIHdhcyBlbGVtZW50LCBhdHRyaWJ1dGUsIGF4aXMgc3BlY2lmaWVyLCB0aGlzIHdvcmQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoYXQKICAgICAgaWYoaXNJblhtbENvbnN0cnVjdG9yKHN0YXRlKSkgewogICAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICAgIHJldHVybiByZXQoIndvcmQiLCAid29yZCIsIHdvcmQpOwogICAgICB9CiAgICAgIC8vIGFzIHByZXZpb3VzbHkgY2hlY2tlZCwgaWYgdGhlIHdvcmQgaXMgZWxlbWVudCxhdHRyaWJ1dGUsIGF4aXMgc3BlY2lmaWVyLCBjYWxsIGl0IGFuICJ4bWxjb25zdHJ1Y3RvciIgYW5kIAogICAgICAvLyBwdXNoIHRoZSBzdGFjayBzbyB3ZSBrbm93IHRvIGxvb2sgZm9yIGl0IG9uIHRoZSBuZXh0IHdvcmQKICAgICAgaWYod29yZCA9PSAiZWxlbWVudCIgfHwgd29yZCA9PSAiYXR0cmlidXRlIiB8fCBrbm93bi50eXBlID09ICJheGlzX3NwZWNpZmllciIpIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCB7dHlwZTogInhtbGNvbnN0cnVjdG9yIn0pOwogICAgICAKICAgICAgLy8gaWYgdGhlIHdvcmQgaXMga25vd24sIHJldHVybiB0aGUgZGV0YWlscyBvZiB0aGF0IGVsc2UganVzdCBjYWxsIHRoaXMgYSBnZW5lcmljICd3b3JkJwogICAgICByZXR1cm4ga25vd24gPyByZXQoa25vd24udHlwZSwga25vd24uc3R5bGUsIHdvcmQpIDoKICAgICAgICAgICAgICAgICAgICAgcmV0KCJ3b3JkIiwgIndvcmQiLCB3b3JkKTsKICAgIH0KICB9CgogIC8vIGhhbmRsZSBjb21tZW50cywgaW5jbHVkaW5nIG5lc3RlZCAKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIG1heWJlTmVzdGVkID0gZmFsc2UsIG5lc3RlZENvdW50ID0gMCwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiKSIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBpZihuZXN0ZWRDb3VudCA+IDApCiAgICAgICAgICBuZXN0ZWRDb3VudC0tOwogICAgICAgIGVsc2UgewogICAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZihjaCA9PSAiOiIgJiYgbWF5YmVOZXN0ZWQpIHsKICAgICAgICBuZXN0ZWRDb3VudCsrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICI6Iik7CiAgICAgIG1heWJlTmVzdGVkID0gKGNoID09ICIoIik7CiAgICB9CiAgICAKICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogIH0KCiAgLy8gdG9rZW5pemVyIGZvciBzdHJpbmcgbGl0ZXJhbHMKICAvLyBvcHRpb25hbGx5IHBhc3MgYSB0b2tlbml6ZXIgZnVuY3Rpb24gdG8gc2V0IHN0YXRlLnRva2VuaXplIGJhY2sgdG8gd2hlbiBmaW5pc2hlZAogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlLCBmKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY2g7CgogICAgICBpZihpc0luU3RyaW5nKHN0YXRlKSAmJiBzdHJlYW0uY3VycmVudCgpID09IHF1b3RlKSB7CiAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgICAgaWYoZikgc3RhdGUudG9rZW5pemUgPSBmOwogICAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgICAgfQoKICAgICAgcHVzaFN0YXRlU3RhY2soc3RhdGUsIHsgdHlwZTogInN0cmluZyIsIG5hbWU6IHF1b3RlLCB0b2tlbml6ZTogdG9rZW5TdHJpbmcocXVvdGUsIGYpIH0pOwoKICAgICAgLy8gaWYgd2UncmUgaW4gYSBzdHJpbmcgYW5kIGluIGFuIFhNTCBibG9jaywgYWxsb3cgYW4gZW1iZWRkZWQgY29kZSBibG9jawogICAgICBpZihzdHJlYW0ubWF0Y2goInsiLCBmYWxzZSkgJiYgaXNJblhtbEF0dHJpYnV0ZUJsb2NrKHN0YXRlKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsgCiAgICAgIH0KCiAgICAgIAogICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgICAgaWYgKGNoID09ICBxdW90ZSkgewogICAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgICAgICBpZihmKSBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBhIHN0cmluZyBhbmQgaW4gYW4gWE1MIGJsb2NrLCBhbGxvdyBhbiBlbWJlZGRlZCBjb2RlIGJsb2NrIGluIGFuIGF0dHJpYnV0ZQogICAgICAgICAgaWYoc3RyZWFtLm1hdGNoKCJ7IiwgZmFsc2UpICYmIGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsgCiAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CiAgCiAgLy8gdG9rZW5pemVyIGZvciB2YXJpYWJsZXMKICBmdW5jdGlvbiB0b2tlblZhcmlhYmxlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBpc1ZhcmlhYmxlQ2hhciA9IC9bXHdcJF8tXS87CgogICAgLy8gYSB2YXJpYWJsZSBtYXkgc3RhcnQgd2l0aCBhIHF1b3RlZCBFUU5hbWUgc28gaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIHF1b3RlLCBjb25zdW1lIHRvIHRoZSBuZXh0IHF1b3RlCiAgICBpZihzdHJlYW0uZWF0KCJcIiIpKSB7CiAgICAgIHdoaWxlKHN0cmVhbS5uZXh0KCkgIT09ICdcIicpe307CiAgICAgIHN0cmVhbS5lYXQoIjoiKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc1ZhcmlhYmxlQ2hhcik7CiAgICAgIGlmKCFzdHJlYW0ubWF0Y2goIjo9IiwgZmFsc2UpKSBzdHJlYW0uZWF0KCI6Iik7CiAgICB9CiAgICBzdHJlYW0uZWF0V2hpbGUoaXNWYXJpYWJsZUNoYXIpOwogICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICByZXR1cm4gcmV0KCJ2YXJpYWJsZSIsICJ2YXJpYWJsZSIpOwogIH0KICAKICAvLyB0b2tlbml6ZXIgZm9yIFhNTCB0YWdzCiAgZnVuY3Rpb24gdG9rZW5UYWcobmFtZSwgaXNjbG9zZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgIGlmKGlzY2xvc2UgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwogICAgICB9CiAgICAgIC8vIHNlbGYgY2xvc2luZyB0YWcgd2l0aG91dCBhdHRyaWJ1dGVzPwogICAgICBpZighc3RyZWFtLmVhdCgiLyIpKQogICAgICAgIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCB7IHR5cGU6ICJ0YWciLCBuYW1lOiBuYW1lLCB0b2tlbml6ZTogdG9rZW5CYXNlfSk7CiAgICAgIGlmKCFzdHJlYW0uZWF0KCI+IikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQXR0cmlidXRlOwogICAgICAgIHJldHVybiByZXQoInRhZyIsICJ0YWciKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsgICAgICAgIAogICAgICB9CiAgICAgIHJldHVybiByZXQoInRhZyIsICJ0YWciKTsKICAgIH0KICB9CgogIC8vIHRva2VuaXplciBmb3IgWE1MIGF0dHJpYnV0ZXMKICBmdW5jdGlvbiB0b2tlbkF0dHJpYnV0ZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgCiAgICBpZihjaCA9PSAiLyIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgIGlmKGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICBpZihpc0luWG1sQmxvY2soc3RhdGUpKSBwb3BTdGF0ZVN0YWNrKHN0YXRlKTsKICAgICAgcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwogICAgfQogICAgaWYoY2ggPT0gIj4iKSB7CiAgICAgIGlmKGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICB9CiAgICBpZihjaCA9PSAiPSIpCiAgICAgIHJldHVybiByZXQoIiIsICIiKTsKICAgIC8vIHF1b3RlZCBzdHJpbmcKICAgIGlmIChjaCA9PSAnIicgfHwgY2ggPT0gIiciKQogICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5TdHJpbmcoY2gsIHRva2VuQXR0cmlidXRlKSk7CgogICAgaWYoIWlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIAogICAgICBwdXNoU3RhdGVTdGFjayhzdGF0ZSwgeyB0eXBlOiAiYXR0cmlidXRlIiwgbmFtZTogbmFtZSwgdG9rZW5pemU6IHRva2VuQXR0cmlidXRlfSk7CgogICAgc3RyZWFtLmVhdCgvW2EtekEtWl86XS8pOwogICAgc3RyZWFtLmVhdFdoaWxlKC9bLWEtekEtWjAtOV86Ll0vKTsKICAgIHN0cmVhbS5lYXRTcGFjZSgpOwoKICAgIC8vIHRoZSBjYXNlIHdoZXJlIHRoZSBhdHRyaWJ1dGUgaGFzIG5vdCB2YWx1ZSBhbmQgdGhlIHRhZyB3YXMgY2xvc2VkCiAgICBpZihzdHJlYW0ubWF0Y2goIj4iLCBmYWxzZSkgfHwgc3RyZWFtLm1hdGNoKCIvIiwgZmFsc2UpKSB7CiAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsgICAgICAKICAgIH0KCiAgICByZXR1cm4gcmV0KCJhdHRyaWJ1dGUiLCAiYXR0cmlidXRlIik7CiAgfQogIAogIC8vIGhhbmRsZSBjb21tZW50cywgaW5jbHVkaW5nIG5lc3RlZCAKICBmdW5jdGlvbiB0b2tlblhNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi0iICYmIHN0cmVhbS5tYXRjaCgiLT4iLCB0cnVlKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyAgICAgICAgCiAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgIH0KICAgIH0KICB9CgoKICAvLyBoYW5kbGUgQ0RBVEEKICBmdW5jdGlvbiB0b2tlbkNEQVRBKHN0cmVhbSwgc3RhdGUpIHsKICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgaWYgKGNoID09ICJdIiAmJiBzdHJlYW0ubWF0Y2goIl0iLCB0cnVlKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyAgICAgICAgCiAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIGhhbmRsZSBwcmVwcm9jZXNzaW5nIGluc3RydWN0aW9ucwogIGZ1bmN0aW9uIHRva2VuUHJlUHJvY2Vzc2luZyhzdHJlYW0sIHN0YXRlKSB7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiPyIgJiYgc3RyZWFtLm1hdGNoKCI+IiwgdHJ1ZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsgICAgICAgIAogICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCBtZXRhIik7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgCiAgLy8gZnVuY3Rpb25zIHRvIHRlc3QgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgc3RhdGUKICBmdW5jdGlvbiBpc0luWG1sQmxvY2soc3RhdGUpIHsgcmV0dXJuIGlzSW4oc3RhdGUsICJ0YWciKTsgfQogIGZ1bmN0aW9uIGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkgeyByZXR1cm4gaXNJbihzdGF0ZSwgImF0dHJpYnV0ZSIpOyB9CiAgZnVuY3Rpb24gaXNJbkNvZGVCbG9jayhzdGF0ZSkgeyByZXR1cm4gaXNJbihzdGF0ZSwgImNvZGVibG9jayIpOyB9CiAgZnVuY3Rpb24gaXNJblhtbENvbnN0cnVjdG9yKHN0YXRlKSB7IHJldHVybiBpc0luKHN0YXRlLCAieG1sY29uc3RydWN0b3IiKTsgfQogIGZ1bmN0aW9uIGlzSW5TdHJpbmcoc3RhdGUpIHsgcmV0dXJuIGlzSW4oc3RhdGUsICJzdHJpbmciKTsgfQoKICBmdW5jdGlvbiBpc0VRTmFtZUFoZWFkKHN0cmVhbSkgeyAKICAgIC8vIGFzc3VtZSB3ZSd2ZSBhbHJlYWR5IGVhdGVuIGEgcXVvdGUgKCIpCiAgICBpZihzdHJlYW0uY3VycmVudCgpID09PSAnIicpCiAgICAgIHJldHVybiBzdHJlYW0ubWF0Y2goL15bXlwiXStcIlw6LywgZmFsc2UpOwogICAgZWxzZSBpZihzdHJlYW0uY3VycmVudCgpID09PSAnXCcnKQogICAgICByZXR1cm4gc3RyZWFtLm1hdGNoKC9eW15cIl0rXCdcOi8sIGZhbHNlKTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICAKICBmdW5jdGlvbiBpc0luKHN0YXRlLCB0eXBlKSB7CiAgICByZXR1cm4gKHN0YXRlLnN0YWNrLmxlbmd0aCAmJiBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGggLSAxXS50eXBlID09IHR5cGUpOyAgICAKICB9CiAgCiAgZnVuY3Rpb24gcHVzaFN0YXRlU3RhY2soc3RhdGUsIG5ld1N0YXRlKSB7CiAgICBzdGF0ZS5zdGFjay5wdXNoKG5ld1N0YXRlKTsKICB9CiAgCiAgZnVuY3Rpb24gcG9wU3RhdGVTdGFjayhzdGF0ZSkgewogICAgdmFyIHBvcHBlZCA9IHN0YXRlLnN0YWNrLnBvcCgpOwogICAgdmFyIHJlaW5zdGF0ZVRva2VuaXplID0gc3RhdGUuc3RhY2subGVuZ3RoICYmIHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXS50b2tlbml6ZQogICAgc3RhdGUudG9rZW5pemUgPSByZWluc3RhdGVUb2tlbml6ZSB8fCB0b2tlbkJhc2U7CiAgfQogIAogIC8vIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtb2RlIEFQSQogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICBjYzogW10sCiAgICAgICAgc3RhY2s6IFtdCiAgICAgIH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9CiAgfTsKCn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94cXVlcnkiLCAieHF1ZXJ5Iik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFlBTUwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InlhbWwuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOyB9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogWUFNTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tLSAjIEZhdm9yaXRlIG1vdmllcwotIENhc2FibGFuY2EKLSBOb3J0aCBieSBOb3J0aHdlc3QKLSBUaGUgTWFuIFdobyBXYXNuJ3QgVGhlcmUKLS0tICMgU2hvcHBpbmcgbGlzdApbbWlsaywgcHVtcGtpbiBwaWUsIGVnZ3MsIGp1aWNlXQotLS0gIyBJbmRlbnRlZCBCbG9ja3MsIGNvbW1vbiBpbiBZQU1MIGRhdGEgZmlsZXMsIHVzZSBpbmRlbnRhdGlvbiBhbmQgbmV3IGxpbmVzIHRvIHNlcGFyYXRlIHRoZSBrZXk6IHZhbHVlIHBhaXJzCiAgbmFtZTogSm9obiBTbWl0aAogIGFnZTogMzMKLS0tICMgSW5saW5lIEJsb2NrcywgY29tbW9uIGluIFlBTUwgZGF0YSBzdHJlYW1zLCB1c2UgY29tbWFzIHRvIHNlcGFyYXRlIHRoZSBrZXk6IHZhbHVlIHBhaXJzIGJldHdlZW4gYnJhY2VzCntuYW1lOiBKb2huIFNtaXRoLCBhZ2U6IDMzfQotLS0KcmVjZWlwdDogICAgIE96LVdhcmUgUHVyY2hhc2UgSW52b2ljZQpkYXRlOiAgICAgICAgMjAwNy0wOC0wNgpjdXN0b21lcjoKICAgIGdpdmVuOiAgIERvcm90aHkKICAgIGZhbWlseTogIEdhbGUKCml0ZW1zOgogICAgLSBwYXJ0X25vOiAgIEE0Nzg2CiAgICAgIGRlc2NyaXA6ICAgV2F0ZXIgQnVja2V0IChGaWxsZWQpCiAgICAgIHByaWNlOiAgICAgMS40NwogICAgICBxdWFudGl0eTogIDQKCiAgICAtIHBhcnRfbm86ICAgRTE2MjgKICAgICAgZGVzY3JpcDogICBIaWdoIEhlZWxlZCAiUnVieSIgU2xpcHBlcnMKICAgICAgc2l6ZTogICAgICAgOAogICAgICBwcmljZTogICAgIDEwMC4yNwogICAgICBxdWFudGl0eTogIDEKCmJpbGwtdG86ICAmaWQwMDEKICAgIHN0cmVldDogfAogICAgICAgICAgICAxMjMgVG9ybmFkbyBBbGxleQogICAgICAgICAgICBTdWl0ZSAxNgogICAgY2l0eTogICBFYXN0IENlbnRlcnZpbGxlCiAgICBzdGF0ZTogIEtTCgpzaGlwLXRvOiAgKmlkMDAxCgpzcGVjaWFsRGVsaXZlcnk6ICA+CiAgICBGb2xsb3cgdGhlIFllbGxvdyBCcmljawogICAgUm9hZCB0byB0aGUgRW1lcmFsZCBDaXR5LgogICAgUGF5IG5vIGF0dGVudGlvbiB0byB0aGUKICAgIG1hbiBiZWhpbmQgdGhlIGN1cnRhaW4uCi4uLgo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXlhbWw8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/yaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ5YW1sIiwgZnVuY3Rpb24oKSB7CgkKCXZhciBjb25zID0gWyd0cnVlJywgJ2ZhbHNlJywgJ29uJywgJ29mZicsICd5ZXMnLCAnbm8nXTsKCXZhciBrZXl3b3JkUmVnZXggPSBuZXcgUmVnRXhwKCJcXGIoKCIrY29ucy5qb2luKCIpfCgiKSsiKSkkIiwgJ2knKTsKCQoJcmV0dXJuIHsKCQl0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQl2YXIgY2ggPSBzdHJlYW0ucGVlaygpOwoJCQl2YXIgZXNjID0gc3RhdGUuZXNjYXBlZDsKCQkJc3RhdGUuZXNjYXBlZCA9IGZhbHNlOwoJCQkvKiBjb21tZW50cyAqLwoJCQlpZiAoY2ggPT0gIiMiKSB7IHN0cmVhbS5za2lwVG9FbmQoKTsgcmV0dXJuICJjb21tZW50IjsgfQoJCQlpZiAoc3RhdGUubGl0ZXJhbCAmJiBzdHJlYW0uaW5kZW50YXRpb24oKSA+IHN0YXRlLmtleUNvbCkgewoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOyByZXR1cm4gInN0cmluZyI7CgkJCX0gZWxzZSBpZiAoc3RhdGUubGl0ZXJhbCkgeyBzdGF0ZS5saXRlcmFsID0gZmFsc2U7IH0KCQkJaWYgKHN0cmVhbS5zb2woKSkgewoJCQkJc3RhdGUua2V5Q29sID0gMDsKCQkJCXN0YXRlLnBhaXIgPSBmYWxzZTsKCQkJCXN0YXRlLnBhaXJTdGFydCA9IGZhbHNlOwoJCQkJLyogZG9jdW1lbnQgc3RhcnQgKi8KCQkJCWlmKHN0cmVhbS5tYXRjaCgvLS0tLykpIHsgcmV0dXJuICJkZWYiOyB9CgkJCQkvKiBkb2N1bWVudCBlbmQgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goL1wuXC5cLi8pKSB7IHJldHVybiAiZGVmIjsgfQoJCQkJLyogYXJyYXkgbGlzdCBpdGVtICovCgkJCQlpZiAoc3RyZWFtLm1hdGNoKC9ccyotXHMrLykpIHsgcmV0dXJuICdtZXRhJzsgfQoJCQl9CgkJCS8qIHBhaXJzIChhc3NvY2lhdGl2ZSBhcnJheXMpIC0+IGtleSAqLwoJCQlpZiAoIXN0YXRlLnBhaXIgJiYgc3RyZWFtLm1hdGNoKC9eXHMqKFthLXowLTlcLl8tXSkrKD89XHMqOikvaSkpIHsKCQkJCXN0YXRlLnBhaXIgPSB0cnVlOwoJCQkJc3RhdGUua2V5Q29sID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CgkJCQlyZXR1cm4gImF0b20iOwoJCQl9CgkJCWlmIChzdGF0ZS5wYWlyICYmIHN0cmVhbS5tYXRjaCgvXjpccyovKSkgeyBzdGF0ZS5wYWlyU3RhcnQgPSB0cnVlOyByZXR1cm4gJ21ldGEnOyB9CgkJCQoJCQkvKiBpbmxpbmUgcGFpcnMvbGlzdHMgKi8KCQkJaWYgKHN0cmVhbS5tYXRjaCgvXihce3xcfXxcW3xcXSkvKSkgewoJCQkJaWYgKGNoID09ICd7JykKCQkJCQlzdGF0ZS5pbmxpbmVQYWlycysrOwoJCQkJZWxzZSBpZiAoY2ggPT0gJ30nKQoJCQkJCXN0YXRlLmlubGluZVBhaXJzLS07CgkJCQllbHNlIGlmIChjaCA9PSAnWycpCgkJCQkJc3RhdGUuaW5saW5lTGlzdCsrOwoJCQkJZWxzZQoJCQkJCXN0YXRlLmlubGluZUxpc3QtLTsKCQkJCXJldHVybiAnbWV0YSc7CgkJCX0KCQkJCgkJCS8qIGxpc3Qgc2VwZXJhdG9yICovCgkJCWlmIChzdGF0ZS5pbmxpbmVMaXN0ID4gMCAmJiAhZXNjICYmIGNoID09ICcsJykgewoJCQkJc3RyZWFtLm5leHQoKTsKCQkJCXJldHVybiAnbWV0YSc7CgkJCX0KCQkJLyogcGFpcnMgc2VwZXJhdG9yICovCgkJCWlmIChzdGF0ZS5pbmxpbmVQYWlycyA+IDAgJiYgIWVzYyAmJiBjaCA9PSAnLCcpIHsKCQkJCXN0YXRlLmtleUNvbCA9IDA7CgkJCQlzdGF0ZS5wYWlyID0gZmFsc2U7CgkJCQlzdGF0ZS5wYWlyU3RhcnQgPSBmYWxzZTsKCQkJCXN0cmVhbS5uZXh0KCk7CgkJCQlyZXR1cm4gJ21ldGEnOwoJCQl9CgkJCQoJCQkvKiBzdGFydCBvZiB2YWx1ZSBvZiBhIHBhaXIgKi8KCQkJaWYgKHN0YXRlLnBhaXJTdGFydCkgewoJCQkJLyogYmxvY2sgbGl0ZXJhbHMgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goL15ccyooXHx8XD4pXHMqLykpIHsgc3RhdGUubGl0ZXJhbCA9IHRydWU7IHJldHVybiAnbWV0YSc7IH07CgkJCQkvKiByZWZlcmVuY2VzICovCgkJCQlpZiAoc3RyZWFtLm1hdGNoKC9eXHMqKFwmfFwqKVthLXowLTlcLl8tXStcYi9pKSkgeyByZXR1cm4gJ3ZhcmlhYmxlLTInOyB9CgkJCQkvKiBudW1iZXJzICovCgkJCQlpZiAoc3RhdGUuaW5saW5lUGFpcnMgPT0gMCAmJiBzdHJlYW0ubWF0Y2goL15ccyotP1swLTlcLlwsXStccz8kLykpIHsgcmV0dXJuICdudW1iZXInOyB9CgkJCQlpZiAoc3RhdGUuaW5saW5lUGFpcnMgPiAwICYmIHN0cmVhbS5tYXRjaCgvXlxzKi0/WzAtOVwuXCxdK1xzPyg/PSgsfH0pKS8pKSB7IHJldHVybiAnbnVtYmVyJzsgfQoJCQkJLyoga2V5d29yZHMgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goa2V5d29yZFJlZ2V4KSkgeyByZXR1cm4gJ2tleXdvcmQnOyB9CgkJCX0KCgkJCS8qIG5vdGhpbmcgZm91bmQsIGNvbnRpbnVlICovCgkJCXN0YXRlLnBhaXJTdGFydCA9IGZhbHNlOwoJCQlzdGF0ZS5lc2NhcGVkID0gKGNoID09ICdcXCcpOwoJCQlzdHJlYW0ubmV4dCgpOwoJCQlyZXR1cm4gbnVsbDsKCQl9LAoJCXN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gewoJCQkJcGFpcjogZmFsc2UsCgkJCQlwYWlyU3RhcnQ6IGZhbHNlLAoJCQkJa2V5Q29sOiAwLAoJCQkJaW5saW5lUGFpcnM6IDAsCgkJCQlpbmxpbmVMaXN0OiAwLAoJCQkJbGl0ZXJhbDogZmFsc2UsCgkJCQllc2NhcGVkOiBmYWxzZQoJCQl9OwoJCX0KCX07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gteWFtbCIsICJ5YW1sIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/package.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiQ29kZU1pcnJvciIsCiAgICAidmVyc2lvbiI6IjIuMzAuMCIsCiAgICAibWFpbiI6ICJjb2RlbWlycm9yLmpzIiwKICAgICJkZXNjcmlwdGlvbiI6ICJJbi1icm93c2VyIGNvZGUgZWRpdGluZyBtYWRlIGJlYXJhYmxlIiwKICAgICJsaWNlbnNlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogIk1JVCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cDovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0UiCiAgICAgICAgfQogICAgXSwKICAgICJkaXJlY3RvcmllcyI6IHsKICAgICAgICAibGliIjogIi4vbGliIgogICAgfSwKICAgICJidWdzIjogImh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIvaXNzdWVzIiwKICAgICJrZXl3b3JkcyI6IFsiSmF2YVNjcmlwdCIsICJDb2RlTWlycm9yIiwgIkVkaXRvciJdLAogICAgImhvbWVwYWdlIjogImh0dHA6Ly9jb2RlbWlycm9yLm5ldCIsCiAgICAibWFpbnRhaW5lcnMiOlsgewogICAgICAgICJuYW1lIjogIk1hcmlqbiBIYXZlcmJla2UiLAogICAgICAgICJlbWFpbCI6ICJtYXJpam5oQGdtYWlsLmNvbSIsCiAgICAgICAgIndlYiI6ICJodHRwOi8vY29kZW1pcnJvci5uZXQiCiAgICB9XSwKICAgICJyZXBvc2l0b3JpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tYXJpam5oL0NvZGVNaXJyb3IyLmdpdCIKICAgICAgICB9CiAgICBdCn0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDb2RlTWlycm9yIDIKCkNvZGVNaXJyb3IgaXMgYSBKYXZhU2NyaXB0IGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGEgY29kZSBlZGl0b3IgaW4KdGhlIGJyb3dzZXIuIFdoZW4gYSBtb2RlIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSBhcmUgY29kaW5nCmluLCBpdCB3aWxsIGNvbG9yIHlvdXIgY29kZSwgYW5kIG9wdGlvbmFsbHkgaGVscCB3aXRoIGluZGVudGF0aW9uLgoKVGhlIHByb2plY3QgcGFnZSBpcyBodHRwOi8vY29kZW1pcnJvci5uZXQKVGhlIG1hbnVhbCBpcyBhdCBodHRwOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/test/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRlc3QgU3VpdGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLm9rIHtjb2xvcjogIzBlMDt9CiAgICAgIC5mYWlsdXJlIHtjb2xvcjogI2UwMDt9CiAgICAgIC5lcnJvciB7Y29sb3I6ICNjOTA7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGVzdCBTdWl0ZTwvaDE+CgogICAgPHA+QSBsaW1pdGVkIHNldCBvZiBwcm9ncmFtbWF0aWMgc2FuaXR5IHRlc3RzIGZvciBDb2RlTWlycm9yLjwvcD4KCiAgICA8cHJlIGlkPW91dHB1dD48L3ByZT4KCiAgICA8ZGl2IHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iIGlkPXRlc3Rncm91bmQ+CiAgICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+PC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9b2sgbmFtZT1zdWJtaXQ+PC9mb3JtPgogICAgPC9kaXY+CgogICAgPHNjcmlwdCBzcmM9InRlc3QuanMiPjwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/mode_test.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Lm10LW91dHB1dCAubXQtdG9rZW4gewogIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgd2hpdGUtc3BhY2U6IHByZTsKICBmb250LWZhbWlseTogIkNvbnNvbGFzIiwgbW9ub3NwYWNlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm10LW91dHB1dCAubXQtc3R5bGUgewogIGZvbnQtc2l6ZTogeC1zbWFsbDsKfQoKLm10LXRlc3QgewogIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkICNmZmY7Cn0KCi5tdC1wYXNzIHsKICBib3JkZXItbGVmdDogMTBweCBzb2xpZCAjY2ZjOwp9CgoubXQtZmFpbCB7CiAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgI2ZjYzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/mode_test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEhlbHBlciB0byB0ZXN0IENvZGVNaXJyb3IgaGlnaGxpZ2h0aW5nIG1vZGVzLiBJdCBwcmV0dHkgcHJpbnRzIG91dHB1dCBvZiB0aGUKICogaGlnaGxpZ2h0ZXIgYW5kIGNhbiBjaGVjayBhZ2FpbnN0IGV4cGVjdGVkIHN0eWxlcy4KICoKICogU2VlIHRlc3QuaHRtbCBpbiB0aGUgc3RleCBtb2RlIGZvciBleGFtcGxlcy4KICovCk1vZGVUZXN0ID0ge307CgpNb2RlVGVzdC5tb2RlT3B0aW9ucyA9IHt9OwpNb2RlVGVzdC5tb2RlTmFtZSA9IENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZTsKCi8qIGtlZXAgdHJhY2sgb2YgcmVzdWx0cyBmb3IgcHJpbnRTdW1tYXJ5ICovCk1vZGVUZXN0LnRlc3RzID0gMDsKTW9kZVRlc3QucGFzc2VzID0gMDsKCi8qKgogKiBSdW4gYSB0ZXN0OyBwcmV0dHlwcmludHMgdGhlIHJlc3VsdHMgdXNpbmcgZG9jdW1lbnQud3JpdGUoKS4KICoKICogQHBhcmFtIHN0cmluZyB0byBoaWdobGlnaHQKICoKICogQHBhcmFtIHN0eWxlW2ldIGV4cGVjdGVkIHN0eWxlIG9mIHRoZSBpJ3RoIHRva2VuIGluIHN0cmluZwogKgogKiBAcGFyYW0gdG9rZW5baV0gZXhwZWN0ZWQgdmFsdWUgZm9yIHRoZSBpJ3RoIHRva2VuIGluIHN0cmluZwogKi8KTW9kZVRlc3QudGVzdCA9IGZ1bmN0aW9uKCkgewogIE1vZGVUZXN0LnRlc3RzICs9IDE7CgogIHZhciBtb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKE1vZGVUZXN0Lm1vZGVPcHRpb25zLCBNb2RlVGVzdC5tb2RlTmFtZSk7CgogIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkgewogICAgdGhyb3cgIm11c3QgaGF2ZSB0ZXh0IGZvciB0ZXN0IjsKICB9CiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggJSAyICE9IDEpIHsKICAgIHRocm93ICJtdXN0IGhhdmUgdGV4dCBmb3IgdGVzdCBwbHVzIGV4cGVjdGVkIChzdHlsZSwgdG9rZW4pIHBhaXJzIjsKICB9CgogIHZhciB0ZXh0ID0gYXJndW1lbnRzWzBdOwogIHZhciBleHBlY3RlZE91dHB1dCA9IFtdOwogIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAyKSB7CiAgICBleHBlY3RlZE91dHB1dC5wdXNoKFthcmd1bWVudHNbaV0sYXJndW1lbnRzW2kgKyAxXV0pOwogIH0KCiAgdmFyIG9ic2VydmVkT3V0cHV0ID0gTW9kZVRlc3QuaGlnaGxpZ2h0KHRleHQsIG1vZGUpCgogIHZhciBwYXNzLCBwYXNzU3R5bGUgPSAiIjsKICBpZiAoZXhwZWN0ZWRPdXRwdXQubGVuZ3RoID4gMCkgewogICAgcGFzcyA9IE1vZGVUZXN0LmhpZ2hsaWdodE91dHB1dHNFcXVhbChleHBlY3RlZE91dHB1dCwgb2JzZXJ2ZWRPdXRwdXQpOwogICAgcGFzc1N0eWxlID0gcGFzcyA/ICdtdC1wYXNzJyA6ICdtdC1mYWlsJzsKICAgIE1vZGVUZXN0LnBhc3NlcyArPSBwYXNzID8gMSA6IDA7CiAgfQoKICB2YXIgcyA9ICcnOwogIHMgKz0gJzxkaXYgY2xhc3M9Im10LXRlc3QgJyArIHBhc3NTdHlsZSArICciPic7CiAgcyArPSAgICc8cHJlPicgKyBNb2RlVGVzdC5odG1sRXNjYXBlKHRleHQpICsgJzwvcHJlPic7CiAgcyArPSAgICc8ZGl2IGNsYXNzPSJjbS1zLWRlZmF1bHQiPic7CiAgaWYgKHBhc3MgfHwgZXhwZWN0ZWRPdXRwdXQubGVuZ3RoID09IDApIHsKICAgIHMgKz0gICBNb2RlVGVzdC5wcmV0dHlQcmludE91dHB1dFRhYmxlKG9ic2VydmVkT3V0cHV0KTsKICB9IGVsc2UgewogICAgcyArPSAnZXhwZWN0ZWQ6JzsKICAgIHMgKz0gICBNb2RlVGVzdC5wcmV0dHlQcmludE91dHB1dFRhYmxlKGV4cGVjdGVkT3V0cHV0KTsKICAgIHMgKz0gJ29ic2VydmVkOic7CiAgICBzICs9ICAgTW9kZVRlc3QucHJldHR5UHJpbnRPdXRwdXRUYWJsZShvYnNlcnZlZE91dHB1dCk7CiAgfQogIHMgKz0gICAnPC9kaXY+JzsKICBzICs9ICc8L2Rpdj4nOwogIGRvY3VtZW50LndyaXRlKHMpOwp9CgovKioKICogRW11bGF0aW9uIG9mIENvZGVNaXJyb3IncyBpbnRlcm5hbCBoaWdobGlnaHQgcm91dGluZSBmb3IgdGVzdGluZy4gTXVsdGktbGluZQogKiBpbnB1dCBpcyBzdXBwb3J0ZWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgdG8gaGlnaGxpZ2h0CiAqCiAqIEBwYXJhbSBtb2RlIHRoZSBtb2RlIHRoYXQgd2lsbCBkbyB0aGUgYWN0dWFsIGhpZ2hsaWdodGluZwogKgogKiBAcmV0dXJuIGFycmF5IG9mIFtzdHlsZSwgdG9rZW5dIHBhaXJzCiAqLwpNb2RlVGVzdC5oaWdobGlnaHQgPSBmdW5jdGlvbihzdHJpbmcsIG1vZGUpIHsKICB2YXIgc3RhdGUgPSBtb2RlLnN0YXJ0U3RhdGUoKQoKICB2YXIgbGluZXMgPSBzdHJpbmcucmVwbGFjZSgvXHJcbi9nLCdcbicpLnNwbGl0KCdcbicpOwogIHZhciBvdXRwdXQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgbGluZSA9IGxpbmVzW2ldOwogICAgdmFyIHN0cmVhbSA9IG5ldyBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbShsaW5lKTsKICAgIGlmIChsaW5lID09ICIiICYmIG1vZGUuYmxhbmtMaW5lKSBtb2RlLmJsYW5rTGluZShzdGF0ZSk7CiAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICB2YXIgc3Vic3RyID0gbGluZS5zbGljZShzdHJlYW0uc3RhcnQsIHN0cmVhbS5wb3MpOwogICAgICBvdXRwdXQucHVzaChbc3R5bGUsIHN1YnN0cl0pOwogICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgfQogIH0KCiAgcmV0dXJuIG91dHB1dDsKfQoKLyoqCiAqIENvbXBhcmUgdHdvIGFycmF5cyBvZiBvdXRwdXQgZnJvbSBNb2RlVGVzdC5oaWdobGlnaHQuCiAqCiAqIEBwYXJhbSBvMSBhcnJheSBvZiBbc3R5bGUsIHRva2VuXSBwYWlycwogKgogKiBAcGFyYW0gbzIgYXJyYXkgb2YgW3N0eWxlLCB0b2tlbl0gcGFpcnMKICoKICogQHJldHVybiBib29sZWFuOyB0cnVlIGlmZiBvdXRwdXRzIGVxdWFsCiAqLwpNb2RlVGVzdC5oaWdobGlnaHRPdXRwdXRzRXF1YWwgPSBmdW5jdGlvbihvMSwgbzIpIHsKICB2YXIgZXEgPSAobzEubGVuZ3RoID09IG8yLmxlbmd0aCk7CiAgaWYgKGVxKSB7CiAgICBmb3IgKHZhciBqIGluIG8xKSB7CiAgICAgIGVxID0gZXEgJiYKICAgICAgICBvMVtqXS5sZW5ndGggPT0gMiAmJiBvMVtqXVswXSA9PSBvMltqXVswXSAmJiBvMVtqXVsxXSA9PSBvMltqXVsxXTsKICAgIH0KICB9CiAgcmV0dXJuIGVxOwp9CgovKioKICogUHJpbnQgdG9rZW5zIGFuZCBjb3JyZXNwb25kaW5nIHN0eWxlcyBpbiBhIHRhYmxlLiBTcGFjZXMgaW4gdGhlIHRva2VuIGFyZQogKiByZXBsYWNlZCB3aXRoICdpbnRlcnB1bmN0JyBkb3RzICgmbWlkZG90OykuCiAqCiAqIEBwYXJhbSBvdXRwdXQgYXJyYXkgb2YgW3N0eWxlLCB0b2tlbl0gcGFpcnMKICoKICogQHJldHVybiBodG1sIHN0cmluZwogKi8KTW9kZVRlc3QucHJldHR5UHJpbnRPdXRwdXRUYWJsZSA9IGZ1bmN0aW9uKG91dHB1dCkgewogIHZhciBzID0gJzx0YWJsZSBjbGFzcz0ibXQtb3V0cHV0Ij4nOwogIHMgKz0gJzx0cj4nOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0Lmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdG9rZW4gPSBvdXRwdXRbaV07CiAgICBzICs9CiAgICAgICc8dGQgY2xhc3M9Im10LXRva2VuIj4nICsKICAgICAgICAnPHNwYW4gY2xhc3M9ImNtLScgKyB0b2tlblswXSArICciPicgKwogICAgICAgICAgTW9kZVRlc3QuaHRtbEVzY2FwZSh0b2tlblsxXSkucmVwbGFjZSgvIC9nLCcmbWlkZG90OycpICsKICAgICAgICAnPC9zcGFuPicgKwogICAgICAnPC90ZD4nOwogIH0KICBzICs9ICc8L3RyPjx0cj4nOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0Lmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdG9rZW4gPSBvdXRwdXRbaV07CiAgICBzICs9CiAgICAgICc8dGQgY2xhc3M9Im10LXN0eWxlIj48c3Bhbj4nICsgdG9rZW5bMF0gKyAnPC9zcGFuPjwvdGQ+JzsKICB9CiAgcyArPSAnPC90YWJsZT4nOwogIHJldHVybiBzOwp9CgovKioKICogUHJpbnQgaG93IG1hbnkgdGVzdHMgaGF2ZSBydW4gc28gZmFyIGFuZCBob3cgbWFueSBvZiB0aG9zZSBwYXNzZWQuCiAqLwpNb2RlVGVzdC5wcmludFN1bW1hcnkgPSBmdW5jdGlvbigpIHsKICBkb2N1bWVudC53cml0ZShNb2RlVGVzdC5wYXNzZXMgKyAnIHBhc3NlcyBmb3IgJyArIE1vZGVUZXN0LnRlc3RzICsgJyB0ZXN0cycpOwp9CgovKioKICogQmFzaWMgSFRNTCBlc2NhcGluZy4KICovCk1vZGVUZXN0Lmh0bWxFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICBzdHIgPSBzdHIudG9TdHJpbmcoKTsKICByZXR1cm4gc3RyLnJlcGxhY2UoL1s8Jl0vZywKICAgICAgZnVuY3Rpb24oc3RyKSB7cmV0dXJuIHN0ciA9PSAiJiIgPyAiJmFtcDsiIDogIiZsdDsiO30pOwp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHRlc3RzID0gW107Cgp0ZXN0KCJmcm9tVGV4dEFyZWEiLCBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHRlLnZhbHVlID0gIkNPTlRFTlQiOwogIHZhciBjbSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlKTsKICBpcyghdGUub2Zmc2V0SGVpZ2h0KTsKICBlcShjbS5nZXRWYWx1ZSgpLCAiQ09OVEVOVCIpOwogIGNtLnNldFZhbHVlKCJmb29cbmJhciIpOwogIGVxKGNtLmdldFZhbHVlKCksICJmb29cbmJhciIpOwogIGNtLnNhdmUoKTsKICBpcygvXmZvb1xyP1xuYmFyJC8udGVzdCh0ZS52YWx1ZSkpOwogIGNtLnNldFZhbHVlKCJ4eHgiKTsKICBjbS50b1RleHRBcmVhKCk7CiAgaXModGUub2Zmc2V0SGVpZ2h0KTsKICBlcSh0ZS52YWx1ZSwgInh4eCIpOwp9KTsKCnRlc3RDTSgiZ2V0UmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMjM0Iik7CiAgZXEoY20uZ2V0TGluZSgxKSwgIjU2NzgiKTsKICBlcShjbS5nZXRMaW5lKDIpLCBudWxsKTsKICBlcShjbS5nZXRMaW5lKC0xKSwgbnVsbCk7CiAgZXEoY20uZ2V0UmFuZ2Uoe2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDAsIGNoOiAzfSksICIxMjMiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IC0xfSwge2xpbmU6IDAsIGNoOiAyMDB9KSwgIjEyMzQiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IDJ9LCB7bGluZTogMSwgY2g6IDJ9KSwgIjM0XG41NiIpOwogIGVxKGNtLmdldFJhbmdlKHtsaW5lOiAxLCBjaDogMn0sIHtsaW5lOiAxMDAsIGNoOiAwfSksICI3OCIpOwp9LCB7dmFsdWU6ICIxMjM0XG41Njc4In0pOwoKdGVzdENNKCJyZXBsYWNlUmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldFZhbHVlKCksICIiKTsKICBjbS5yZXBsYWNlUmFuZ2UoImZvb1xuIiwge2xpbmU6IDAsIGNoOiAwfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZvb1xuIik7CiAgY20ucmVwbGFjZVJhbmdlKCJhXG5iIiwge2xpbmU6IDAsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZhXG5ib29cbiIpOwogIGVxKGNtLmxpbmVDb3VudCgpLCAzKTsKICBjbS5yZXBsYWNlUmFuZ2UoInh5enp5Iiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgInh5enp5b29cbiIpOwogIGNtLnJlcGxhY2VSYW5nZSgiYWJjIiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEwLCBjaDogMH0pOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5saW5lQ291bnQoKSwgMSk7Cn0pOwoKdGVzdENNKCJzZWxlY3Rpb24iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDR9LCB7bGluZTogMiwgY2g6IDJ9KTsKICBpcyhjbS5zb21ldGhpbmdTZWxlY3RlZCgpKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgIjExXG4yMjIyMjJcbjMzIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKGZhbHNlKSwge2xpbmU6IDIsIGNoOiAyfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMCwgY2g6IDR9KTsKICBjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IDEsIGNoOiAwfSk7CiAgaXMoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDB9KTsKICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJhYmMiKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgImFiYyIpOwogIGVxKGNtLmdldFZhbHVlKCksICIxMTExMTFcbmFiYzIyMjIyMlxuMzMzMzMzIik7CiAgY20ucmVwbGFjZVNlbGVjdGlvbigiZGVmIiwgImVuZCIpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDN9KTsKICBjbS5zZXRDdXJzb3Ioe2xpbmU6IDIsIGNoOiAxfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMiwgY2g6IDF9KTsKICBjbS5zZXRDdXJzb3IoMSwgMik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDJ9KTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgibGluZXMiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMTExMTEiKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiMjIyMjIyIik7CiAgZXEoY20uZ2V0TGluZSgtMSksIG51bGwpOwogIGNtLnJlbW92ZUxpbmUoMSk7CiAgY20uc2V0TGluZSgxLCAiYWJjIik7CiAgZXEoY20uZ2V0VmFsdWUoKSwgIjExMTExMVxuYWJjIik7Cn0sIHt2YWx1ZTogIjExMTExMVxuMjIyMjIyXG4zMzMzMzMifSk7Cgp0ZXN0Q00oImluZGVudCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uaW5kZW50TGluZSgxKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiICAgYmxhaCgpOyIpOwogIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDgpOwogIGNtLmluZGVudExpbmUoMSk7CiAgZXEoY20uZ2V0TGluZSgxKSwgIlx0YmxhaCgpOyIpOwp9LCB7dmFsdWU6ICJpZiAoeCkge1xuYmxhaCgpO1xufSIsIGluZGVudFVuaXQ6IDMsIGluZGVudFdpdGhUYWJzOiB0cnVlLCB0YWJTaXplOiA4fSk7Cgp0ZXN0KCJkZWZhdWx0cyIsIGZ1bmN0aW9uKCkgewogIHZhciBvbGRkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMsIGRlZnMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307CiAgZm9yICh2YXIgb3B0IGluIG9sZGRlZmF1bHRzKSBkZWZzW29wdF0gPSBvbGRkZWZhdWx0c1tvcHRdOwogIGRlZnMuaW5kZW50VW5pdCA9IDU7CiAgZGVmcy52YWx1ZSA9ICJ1dSI7CiAgZGVmcy5lbnRlck1vZGUgPSAia2VlcCI7CiAgZGVmcy50YWJpbmRleCA9IDU1OwogIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSk7CiAgdHJ5IHsKICAgIGVxKGNtLmdldE9wdGlvbigiaW5kZW50VW5pdCIpLCA1KTsKICAgIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDEwKTsKICAgIGVxKGRlZnMuaW5kZW50VW5pdCwgNSk7CiAgICBlcShjbS5nZXRWYWx1ZSgpLCAidXUiKTsKICAgIGVxKGNtLmdldE9wdGlvbigiZW50ZXJNb2RlIiksICJrZWVwIik7CiAgICBlcShjbS5nZXRJbnB1dEZpZWxkKCkudGFiSW5kZXgsIDU1KTsKICB9CiAgZmluYWxseSB7CiAgICBDb2RlTWlycm9yLmRlZmF1bHRzID0gb2xkZGVmYXVsdHM7CiAgICBwbGFjZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICB9Cn0pOwoKdGVzdENNKCJsaW5lSW5mbyIsIGZ1bmN0aW9uKGNtKSB7CiAgZXEoY20ubGluZUluZm8oLTEpLCBudWxsKTsKICB2YXIgbGggPSBjbS5zZXRNYXJrZXIoMSwgIkZPTyIsICJiYXIiKTsKICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKDEpOwogIGVxKGluZm8udGV4dCwgIjIyMjIyMiIpOwogIGVxKGluZm8ubWFya2VyVGV4dCwgIkZPTyIpOwogIGVxKGluZm8ubWFya2VyQ2xhc3MsICJiYXIiKTsKICBlcShpbmZvLmxpbmUsIDEpOwogIGVxKGNtLmxpbmVJbmZvKDIpLm1hcmtlclRleHQsIG51bGwpOwogIGNtLmNsZWFyTWFya2VyKGxoKTsKICBlcShjbS5saW5lSW5mbygxKS5tYXJrZXJUZXh0LCBudWxsKTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgiY29vcmRzIiwgZnVuY3Rpb24oY20pIHsKICB2YXIgc2Nyb2xsZXIgPSBjbS5nZXRTY3JvbGxlckVsZW1lbnQoKTsKICBzY3JvbGxlci5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOwogIHZhciBjb250ZW50ID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyMDA7ICsraSkgY29udGVudC5wdXNoKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iICsgaSk7CiAgY20uc2V0VmFsdWUoY29udGVudC5qb2luKCJcbiIpKTsKICB2YXIgdG9wID0gY20uY2hhckNvb3Jkcyh7bGluZTogMCwgY2g6IDB9KTsKICB2YXIgYm90ID0gY20uY2hhckNvb3Jkcyh7bGluZTogMjAwLCBjaDogMzB9KTsKICBpcyh0b3AueCA8IGJvdC54KTsKICBpcyh0b3AueSA8IGJvdC55KTsKICBpcyh0b3AueSA8IHRvcC55Qm90KTsKICBjbS5zY3JvbGxUbyhudWxsLCAxMDApOwogIHZhciB0b3AyID0gY20uY2hhckNvb3Jkcyh7bGluZTogMCwgY2g6IDB9KTsKICBpcyh0b3AueSA+IHRvcDIueSk7CiAgZXEodG9wLngsIHRvcDIueCk7Cn0pOwoKdGVzdENNKCJjb29yZHNDaGFyIiwgZnVuY3Rpb24oY20pIHsKICB2YXIgY29udGVudCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgNzA7ICsraSkgY29udGVudC5wdXNoKCJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Iik7CiAgY20uc2V0VmFsdWUoY29udGVudC5qb2luKCJcbiIpKTsKICBmb3IgKHZhciBjaCA9IDA7IGNoIDwgMzU7IGNoICs9IDIpIHsKICAgIGZvciAodmFyIGxpbmUgPSAwOyBsaW5lIDwgNzA7IGxpbmUgKz0gNSkgewogICAgICBjbS5zZXRDdXJzb3IobGluZSwgY2gpOwogICAgICB2YXIgY29vcmRzID0gY20uY2hhckNvb3Jkcyh7bGluZTogbGluZSwgY2g6IGNofSk7CiAgICAgIHZhciBwb3MgPSBjbS5jb29yZHNDaGFyKHt4OiBjb29yZHMueCwgeTogY29vcmRzLnkgKyAxfSk7CiAgICAgIGVxKHBvcy5saW5lLCBsaW5lKTsKICAgICAgZXEocG9zLmNoLCBjaCk7CiAgICB9CiAgfQp9KTsKCnRlc3RDTSgicG9zRnJvbUluZGV4IiwgZnVuY3Rpb24oY20pIHsKICBjbS5zZXRWYWx1ZSgKICAgICJUaGlzIGZ1bmN0aW9uIHNob3VsZFxuIiArCiAgICAiY29udmVydCBhIHplcm8gYmFzZWQgaW5kZXhcbiIgKwogICAgInRvIGxpbmUgYW5kIGNoLiIKICApOwoKICB2YXIgZXhhbXBsZXMgPSBbCiAgICB7IGluZGV4OiAtMSwgbGluZTogMCwgY2g6IDAgIH0sIC8vIDwtIFRlc3RzIGNsaXBwaW5nCiAgICB7IGluZGV4OiAwLCAgbGluZTogMCwgY2g6IDAgIH0sCiAgICB7IGluZGV4OiAxMCwgbGluZTogMCwgY2g6IDEwIH0sCiAgICB7IGluZGV4OiAzOSwgbGluZTogMSwgY2g6IDE4IH0sCiAgICB7IGluZGV4OiA1NSwgbGluZTogMiwgY2g6IDcgIH0sCiAgICB7IGluZGV4OiA2MywgbGluZTogMiwgY2g6IDE1IH0sCiAgICB7IGluZGV4OiA2NCwgbGluZTogMiwgY2g6IDE1IH0gIC8vIDwtIFRlc3RzIGNsaXBwaW5nCiAgXTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleGFtcGxlcy5sZW5ndGg7IGkrKykgewogICAgdmFyIGV4YW1wbGUgPSBleGFtcGxlc1tpXTsKICAgIHZhciBwb3MgPSBjbS5wb3NGcm9tSW5kZXgoZXhhbXBsZS5pbmRleCk7CiAgICBlcShwb3MubGluZSwgZXhhbXBsZS5saW5lKTsKICAgIGVxKHBvcy5jaCwgZXhhbXBsZS5jaCk7CiAgICBpZiAoZXhhbXBsZS5pbmRleCA+PSAwICYmIGV4YW1wbGUuaW5kZXggPCA2NCkKICAgICAgZXEoY20uaW5kZXhGcm9tUG9zKHBvcyksIGV4YW1wbGUuaW5kZXgpOwogIH0gIAp9KTsKCnRlc3RDTSgidW5kbyIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uc2V0TGluZSgwLCAiZGVmIik7CiAgZXEoY20uaGlzdG9yeVNpemUoKS51bmRvLCAxKTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiYyIpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMCk7CiAgZXEoY20uaGlzdG9yeVNpemUoKS5yZWRvLCAxKTsKICBjbS5yZWRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImRlZiIpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMSk7CiAgZXEoY20uaGlzdG9yeVNpemUoKS5yZWRvLCAwKTsKICBjbS5zZXRWYWx1ZSgiMVxuXG5cbjIiKTsKICBjbS5jbGVhckhpc3RvcnkoKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDApOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7ICsraSkgewogICAgY20ucmVwbGFjZVJhbmdlKCJhIiwge2xpbmU6IDAsIGNoOiAwfSk7CiAgICBjbS5yZXBsYWNlUmFuZ2UoImIiLCB7bGluZTogMywgY2g6IDB9KTsKICB9CiAgZXEoY20uaGlzdG9yeVNpemUoKS51bmRvLCA0MCk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0MDsgKytpKQogICAgY20udW5kbygpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgNDApOwogIGVxKGNtLmdldFZhbHVlKCksICIxXG5cblxuMiIpOwp9LCB7dmFsdWU6ICJhYmMifSk7Cgp0ZXN0Q00oInVuZG9NdWx0aUxpbmUiLCBmdW5jdGlvbihjbSkgewogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjAsIGNoOiAwfSk7CiAgY20ucmVwbGFjZVJhbmdlKCJ5Iiwge2xpbmU6MSwgY2g6IDB9KTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiY1xuZGVmXG5naGkiKTsKICBjbS5yZXBsYWNlUmFuZ2UoInkiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjAsIGNoOiAwfSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmNcbmRlZlxuZ2hpIik7CiAgY20ucmVwbGFjZVJhbmdlKCJ5Iiwge2xpbmU6MiwgY2g6IDB9KTsKICBjbS5yZXBsYWNlUmFuZ2UoIngiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieiIsIHtsaW5lOjIsIGNoOiAwfSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmNcbmRlZlxuZ2hpIik7Cn0sIHt2YWx1ZTogImFiY1xuZGVmXG5naGkifSk7Cgp0ZXN0Q00oIm1hcmtUZXh0U2luZ2xlTGluZSIsIGZ1bmN0aW9uKGNtKSB7CiAgZm9yRWFjaChbe2E6IDAsIGI6IDEsIGM6ICIiLCBmOiAyLCB0OiA1fSwKICAgICAgICAgICB7YTogMCwgYjogNCwgYzogIiIsIGY6IDAsIHQ6IDJ9LAogICAgICAgICAgIHthOiAxLCBiOiAyLCBjOiAieCIsIGY6IDMsIHQ6IDZ9LAogICAgICAgICAgIHthOiA0LCBiOiA1LCBjOiAiIiwgZjogMywgdDogNX0sCiAgICAgICAgICAge2E6IDQsIGI6IDUsIGM6ICJ4eCIsIGY6IDMsIHQ6IDd9LAogICAgICAgICAgIHthOiAyLCBiOiA1LCBjOiAiIiwgZjogMiwgdDogM30sCiAgICAgICAgICAge2E6IDIsIGI6IDUsIGM6ICJhYmNkIiwgZjogNiwgdDogN30sCiAgICAgICAgICAge2E6IDIsIGI6IDYsIGM6ICJ4IiwgZjogbnVsbCwgdDogbnVsbH0sCiAgICAgICAgICAge2E6IDMsIGI6IDYsIGM6ICIiLCBmOiBudWxsLCB0OiBudWxsfSwKICAgICAgICAgICB7YTogMCwgYjogOSwgYzogImhhbGxvIiwgZjogbnVsbCwgdDogbnVsbH0sCiAgICAgICAgICAge2E6IDQsIGI6IDYsIGM6ICJ4IiwgZjogMywgdDogNH0sCiAgICAgICAgICAge2E6IDQsIGI6IDgsIGM6ICIiLCBmOiAzLCB0OiA0fSwKICAgICAgICAgICB7YTogNiwgYjogNiwgYzogImEiLCBmOiAzLCB0OiA2fSwKICAgICAgICAgICB7YTogOCwgYjogOSwgYzogIiIsIGY6IDMsIHQ6IDZ9XSwgZnVuY3Rpb24odGVzdCkgewogICAgY20uc2V0VmFsdWUoIjEyMzQ1Njc4OTAiKTsKICAgIHZhciByID0gY20ubWFya1RleHQoe2xpbmU6IDAsIGNoOiAzfSwge2xpbmU6IDAsIGNoOiA2fSwgImZvbyIpOwogICAgY20ucmVwbGFjZVJhbmdlKHRlc3QuYywge2xpbmU6IDAsIGNoOiB0ZXN0LmF9LCB7bGluZTogMCwgY2g6IHRlc3QuYn0pOwogICAgdmFyIGYgPSByLmZpbmQoKTsKICAgIGVxKGYuZnJvbSAmJiBmLmZyb20uY2gsIHRlc3QuZik7IGVxKGYudG8gJiYgZi50by5jaCwgdGVzdC50KTsKICB9KTsKfSk7Cgp0ZXN0Q00oIm1hcmtUZXh0TXVsdGlMaW5lIiwgZnVuY3Rpb24oY20pIHsKICBmdW5jdGlvbiBwKHYpIHsgcmV0dXJuIHYgJiYge2xpbmU6IHZbMF0sIGNoOiB2WzFdfTsgfQogIGZvckVhY2goW3thOiBbMCwgMF0sIGI6IFswLCA1XSwgYzogIiIsIGY6IFswLCAwXSwgdDogWzIsIDVdfSwKICAgICAgICAgICB7YTogWzAsIDFdLCBiOiBbMCwgMTBdLCBjOiAiIiwgZjogWzAsIDFdLCB0OiBbMiwgNV19LAogICAgICAgICAgIHthOiBbMCwgNV0sIGI6IFswLCA2XSwgYzogIngiLCBmOiBbMCwgNl0sIHQ6IFsyLCA1XX0sCiAgICAgICAgICAge2E6IFswLCAwXSwgYjogWzEsIDBdLCBjOiAiIiwgZjogWzAsIDBdLCB0OiBbMSwgNV19LAogICAgICAgICAgIHthOiBbMCwgNl0sIGI6IFsyLCA0XSwgYzogIiIsIGY6IFswLCA1XSwgdDogWzAsIDddfSwKICAgICAgICAgICB7YTogWzAsIDZdLCBiOiBbMiwgNF0sIGM6ICJhYSIsIGY6IFswLCA1XSwgdDogWzAsIDldfSwKICAgICAgICAgICB7YTogWzEsIDJdLCBiOiBbMSwgOF0sIGM6ICIiLCBmOiBbMCwgNV0sIHQ6IFsyLCA1XX0sCiAgICAgICAgICAge2E6IFswLCA1XSwgYjogWzIsIDVdLCBjOiAieHgiLCBmOiBudWxsLCB0OiBudWxsfSwKICAgICAgICAgICB7YTogWzAsIDBdLCBiOiBbMiwgMTBdLCBjOiAieCIsIGY6IG51bGwsIHQ6IG51bGx9LAogICAgICAgICAgIHthOiBbMSwgNV0sIGI6IFsyLCA1XSwgYzogIiIsIGY6IFswLCA1XSwgdDogWzEsIDVdfSwKICAgICAgICAgICB7YTogWzIsIDBdLCBiOiBbMiwgM10sIGM6ICIiLCBmOiBbMCwgNV0sIHQ6IFsyLCAyXX0sCiAgICAgICAgICAge2E6IFsyLCA1XSwgYjogWzMsIDBdLCBjOiAiYVxuYiIsIGY6IFswLCA1XSwgdDogWzIsIDVdfSwKICAgICAgICAgICB7YTogWzIsIDNdLCBiOiBbMywgMF0sIGM6ICJ4IiwgZjogWzAsIDVdLCB0OiBbMiwgNF19LAogICAgICAgICAgIHthOiBbMSwgMV0sIGI6IFsxLCA5XSwgYzogIjFcbjJcbjMiLCBmOiBbMCwgNV0sIHQ6IFs0LCA1XX1dLCBmdW5jdGlvbih0ZXN0KSB7CiAgICBjbS5zZXRWYWx1ZSgiYWFhYWFhYWFhYVxuYmJiYmJiYmJiYlxuY2NjY2NjY2NjY1xuZGRkZGRkZGRcbiIpOwogICAgdmFyIHIgPSBjbS5tYXJrVGV4dCh7bGluZTogMCwgY2g6IDV9LCB7bGluZTogMiwgY2g6IDV9LCAiZm9vIik7CiAgICBjbS5yZXBsYWNlUmFuZ2UodGVzdC5jLCBwKHRlc3QuYSksIHAodGVzdC5iKSk7CiAgICB2YXIgZiA9IHIuZmluZCgpOwogICAgZXFQb3MoZi5mcm9tLCBwKHRlc3QuZikpOyBlcVBvcyhmLnRvLCBwKHRlc3QudCkpOwogIH0pOwp9KTsKCnRlc3RDTSgiYm9va21hcmsiLCBmdW5jdGlvbihjbSkgewogIGZ1bmN0aW9uIHAodikgeyByZXR1cm4gdiAmJiB7bGluZTogdlswXSwgY2g6IHZbMV19OyB9CiAgZm9yRWFjaChbe2E6IFsxLCAwXSwgYjogWzEsIDFdLCBjOiAiIiwgZDogWzEsIDRdfSwKICAgICAgICAgICB7YTogWzEsIDFdLCBiOiBbMSwgMV0sIGM6ICJ4eCIsIGQ6IFsxLCA3XX0sCiAgICAgICAgICAge2E6IFsxLCA0XSwgYjogWzEsIDVdLCBjOiAiYWIiLCBkOiBbMSwgNl19LAogICAgICAgICAgIHthOiBbMSwgNF0sIGI6IFsxLCA2XSwgYzogIiIsIGQ6IG51bGx9LAogICAgICAgICAgIHthOiBbMSwgNV0sIGI6IFsxLCA2XSwgYzogImFiYyIsIGQ6IFsxLCA1XX0sCiAgICAgICAgICAge2E6IFsxLCA2XSwgYjogWzEsIDhdLCBjOiAiIiwgZDogWzEsIDVdfSwKICAgICAgICAgICB7YTogWzEsIDRdLCBiOiBbMSwgNF0sIGM6ICJcblxuIiwgZDogWzMsIDFdfSwKICAgICAgICAgICB7Ym06IFsxLCA5XSwgYTogWzEsIDFdLCBiOiBbMSwgMV0sIGM6ICJcbiIsIGQ6IFsyLCA4XX1dLCBmdW5jdGlvbih0ZXN0KSB7CiAgICBjbS5zZXRWYWx1ZSgiMTIzNDU2Nzg5MFxuMTIzNDU2Nzg5MFxuMTIzNDU2Nzg5MCIpOwogICAgdmFyIGIgPSBjbS5zZXRCb29rbWFyayhwKHRlc3QuYm0pIHx8IHtsaW5lOiAxLCBjaDogNX0pOwogICAgY20ucmVwbGFjZVJhbmdlKHRlc3QuYywgcCh0ZXN0LmEpLCBwKHRlc3QuYikpOwogICAgZXFQb3MoYi5maW5kKCksIHAodGVzdC5kKSk7CiAgfSk7Cn0pOwoKdGVzdENNKCJidWc1NzciLCBmdW5jdGlvbihjbSkgewogIGNtLnNldFZhbHVlKCJhXG5iIik7CiAgY20uY2xlYXJIaXN0b3J5KCk7CiAgY20uc2V0VmFsdWUoImZvb29vbyIpOwogIGNtLnVuZG8oKTsKfSk7CgovLyBTY2FmZm9sZGluZwoKZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICByZXR1cm4gc3RyLnJlcGxhY2UoL1s8Jl0vZywgZnVuY3Rpb24oc3RyKSB7cmV0dXJuIHN0ciA9PSAiJiIgPyAiJmFtcDsiIDogIiZsdDsiO30pOwp9CmZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7Cn0KCmZ1bmN0aW9uIEZhaWx1cmUod2h5KSB7dGhpcy5tZXNzYWdlID0gd2h5O30KCmZ1bmN0aW9uIHRlc3QobmFtZSwgcnVuKSB7dGVzdHMucHVzaCh7bmFtZTogbmFtZSwgZnVuYzogcnVufSk7fQpmdW5jdGlvbiB0ZXN0Q00obmFtZSwgcnVuLCBvcHRzKSB7CiAgdGVzdChuYW1lLCBmdW5jdGlvbigpIHsKICAgIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSwgb3B0cyk7CiAgICB0cnkge3J1bihjbSk7fQogICAgZmluYWxseSB7cGxhY2UucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7fQogIH0pOwp9CgpmdW5jdGlvbiBydW5UZXN0cygpIHsKICB2YXIgZmFpbHVyZXMgPSBbXSwgcnVuID0gMDsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdGVzdCA9IHRlc3RzW2ldOwogICAgdHJ5IHt0ZXN0LmZ1bmMoKTt9CiAgICBjYXRjaChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2YgRmFpbHVyZSkKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZmFpbHVyZSIsIHRlc3Q6IHRlc3QubmFtZSwgdGV4dDogZS5tZXNzYWdlfSk7CiAgICAgIGVsc2UKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZXJyb3IiLCB0ZXN0OiB0ZXN0Lm5hbWUsIHRleHQ6IGUudG9TdHJpbmcoKX0pOwogICAgfQogICAgcnVuKys7CiAgfQogIHZhciBodG1sID0gW3J1biArICIgdGVzdHMgcnVuLiJdOwogIGlmIChmYWlsdXJlcy5sZW5ndGgpCiAgICBmb3JFYWNoKGZhaWx1cmVzLCBmdW5jdGlvbihmYWlsKSB7CiAgICAgIGh0bWwucHVzaChmYWlsLnRlc3QgKyAnOiA8c3BhbiBjbGFzcz0iJyArIGZhaWwudHlwZSArICciPicgKyBodG1sRXNjYXBlKGZhaWwudGV4dCkgKyAiPC9zcGFuPiIpOwogICAgfSk7CiAgZWxzZSBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJvayI+QWxsIHBhc3NlZC48L3NwYW4+Jyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dCIpLmlubmVySFRNTCA9IGh0bWwuam9pbigiXG4iKTsKfQoKZnVuY3Rpb24gZXEoYSwgYiwgbXNnKSB7CiAgaWYgKGEgIT0gYikgdGhyb3cgbmV3IEZhaWx1cmUoYSArICIgIT0gIiArIGIgKyAobXNnID8gIiAoIiArIG1zZyArICIpIiA6ICIiKSk7Cn0KZnVuY3Rpb24gZXFQb3MoYSwgYiwgbXNnKSB7CiAgaWYgKGEgPT0gYikgcmV0dXJuOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSB0aHJvdyBuZXcgRmFpbHVyZSgiY29tcGFyaW5nIHBvaW50IHRvIG51bGwiKTsKICBlcShhLmxpbmUsIGIubGluZSwgbXNnKTsKICBlcShhLmNoLCBiLmNoLCBtc2cpOwp9CmZ1bmN0aW9uIGlzKGEsIG1zZykgewogIGlmICghYSkgdGhyb3cgbmV3IEZhaWx1cmUoImFzc2VydGlvbiBmYWlsZWQiICsgKG1zZyA/ICIgKCIgKyBtc2cgKyAiKSIgOiAiIikpOwp9Cgp3aW5kb3cub25sb2FkID0gcnVuVGVzdHM7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/theme/ambiance.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogYW1iaWFuY2UgdGhlbWUgZm9yIGNvZGUtbWlycm9yICovCgovKiBDb2xvciBzY2hlbWUgKi8KCi5jbS1zLWFtYmlhbmNlIC5jbS1rZXl3b3JkIHsgY29sb3I6ICNjZGE4Njk7IH0KLmNtLXMtYW1iaWFuY2UgLmNtLWF0b20geyBjb2xvcjogI0NGN0VBOTsgfQouY20tcy1hbWJpYW5jZSAuY20tbnVtYmVyIHsgY29sb3I6ICM3OENGOEE7IH0KLmNtLXMtYW1iaWFuY2UgLmNtLWRlZiB7IGNvbG9yOiAjYWFjNmUzOyB9Ci5jbS1zLWFtYmlhbmNlIC5jbS12YXJpYWJsZSB7IGNvbG9yOiAjZmZiNzk1OyB9Ci5jbS1zLWFtYmlhbmNlIC5jbS12YXJpYWJsZS0yIHsgY29sb3I6ICNlZWQxYjM7IH0KLmNtLXMtYW1iaWFuY2UgLmNtLXZhcmlhYmxlLTMgeyBjb2xvcjogI2ZhZGVkMzsgfQouY20tcy1hbWJpYW5jZSAuY20tcHJvcGVydHkgeyBjb2xvcjogI2VlZDFiMzsgfQouY20tcy1hbWJpYW5jZSAuY20tb3BlcmF0b3Ige2NvbG9yOiAjZmE4ZDZhO30KLmNtLXMtYW1iaWFuY2UgLmNtLWNvbW1lbnQgeyBjb2xvcjogIzU1NTsgZm9udC1zdHlsZTppdGFsaWM7IH0KLmNtLXMtYW1iaWFuY2UgLmNtLXN0cmluZyB7IGNvbG9yOiAjOGY5ZDZhOyB9Ci5jbS1zLWFtYmlhbmNlIC5jbS1zdHJpbmctMiB7IGNvbG9yOiAjOWQ5MzdjOyB9Ci5jbS1zLWFtYmlhbmNlIC5jbS1tZXRhIHsgY29sb3I6ICNEMkE4QTE7IH0KLmNtLXMtYW1iaWFuY2UgLmNtLWVycm9yIHsgY29sb3I6ICNBRjIwMTg7IH0KLmNtLXMtYW1iaWFuY2UgLmNtLXF1YWxpZmllciB7IGNvbG9yOiB5ZWxsb3c7IH0KLmNtLXMtYW1iaWFuY2UgLmNtLWJ1aWx0aW4geyBjb2xvcjogIzk5OTljYzsgfQouY20tcy1hbWJpYW5jZSAuY20tYnJhY2tldCB7IGNvbG9yOiAjMjRDMkM3OyB9Ci5jbS1zLWFtYmlhbmNlIC5jbS10YWcgeyBjb2xvcjogI2ZlZTRmZiB9Ci5jbS1zLWFtYmlhbmNlIC5jbS1hdHRyaWJ1dGUgeyAgY29sb3I6ICM5Qjg1OUQ7IH0KLmNtLXMtYW1iaWFuY2UgLmNtLWhlYWRlciB7Y29sb3I6IGJsdWU7fQouY20tcy1hbWJpYW5jZSAuY20tcXVvdGUgeyBjb2xvcjogIzI0QzJDNzsgfQouY20tcy1hbWJpYW5jZSAuY20taHIgeyBjb2xvcjogcGluazsgfQouY20tcy1hbWJpYW5jZSAuY20tbGluayB7IGNvbG9yOiAjRjRDMjBCOyB9Ci5jbS1zLWFtYmlhbmNlIC5jbS1zcGVjaWFsIHsgY29sb3I6ICNGRjlEMDA7IH0KCi5jbS1zLWFtYmlhbmNlIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7IGNvbG9yOiAjMGYwOyB9Ci5jbS1zLWFtYmlhbmNlIC5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7IGNvbG9yOiAjZjIyOyB9CgouY20tcy1hbWJpYW5jZSAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKfQouQ29kZU1pcnJvci1mb2N1c2VkIC5jbS1zLWFtYmlhbmNlIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTApOwp9CgovKiBFZGl0b3Igc3R5bGluZyAqLwoKLmNtLXMtYW1iaWFuY2UgewogIGxpbmUtaGVpZ2h0OiAxLjQwZW07CiAgZm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIkFuZGFsZSBNb25vIiwibHVjaWRhIGNvbnNvbGUiLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlICFpbXBvcnRhbnQ7CiAgY29sb3I6ICNFNkUxREM7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIwMjAyMDsKICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCAxMHB4IGJsYWNrOwogIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggYmxhY2s7CiAgLW8tYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggYmxhY2s7CiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggYmxhY2s7Cn0KCi5jbS1zLWFtYmlhbmNlIC5Db2RlTWlycm9yLWd1dHRlciB7CiAgYmFja2dyb3VuZDogIzNEM0QzRDsKICBwYWRkaW5nOiAwIDVweDsKICB0ZXh0LXNoYWRvdzogIzMzMyAxcHggMXB4OwogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM0RDRENEQ7CiAgYm94LXNoYWRvdzogMCAxMHB4IDIwcHggYmxhY2s7Cn0KCi5jbS1zLWFtYmlhbmNlIC5Db2RlTWlycm9yLWd1dHRlciAuQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7CiAgdGV4dC1zaGFkb3c6IDBweCAxcHggMXB4ICM0ZDRkNGQ7CiAgY29sb3I6ICMyMjI7Cn0KCi5jbS1zLWFtYmlhbmNlIC5Db2RlTWlycm9yLWxpbmVzIHsKICAKfQoKLmNtLXMtYW1iaWFuY2UgLkNvZGVNaXJyb3ItbGluZXMgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkICM3OTkxRTg7Cn0KCi5jbS1zLWFtYmlhbmNlIC5hY3RpdmVsaW5lIHsKICBiYWNrZ3JvdW5kOiBub25lIHJlcGVhdCBzY3JvbGwgMCUgMCUgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzMSk7Cn0KCi5jbS1zLWFtYmlhbmNlLAouY20tcy1hbWJpYW5jZSAuQ29kZU1pcnJvci1ndXR0ZXIgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNZ0FBQURJQ0FRQUFBQUhVV1lWQUFCRkZVbEVRVlFZR2J6QkNlRFZVLzc0LzZmajlISWN4L0ZSSHg5SkNGbXpNeUdSVVJoTFpJa1Vzb2VSZlVqUzJGTkR0cjZXa01oTzlzbStTOG1hSmZ1K0pjc2crL28vYytaNHovdDk3L3Zlenkzeit6OGVrR2xuWUlDRy9vN2dkayt3bVNIWjF6NHBKSXRxYXBqb0tYV2FobThObVY2ZU9UYldVT3A2LzZhL1hJZzZHUXFtZW5KMmxESHl2Q0ZaMmNCRGJtdEhBMDQzVkZoSHdYeENsV21lWUFkTGhWMDBCZDg1Z284Vm1hRkNrYlZremxRRU56ZkJEWjVndE43SHdGMEtEclR3SjBkeXBTT3pwYUtDTXdRSEtUSXJlWUl4bG1oWFR6VFdrVm0rTFR5blpoaVNCVDNSWlE3YUdmakdFZDNxeVhRMUZEeW1xYkt4cHNwRVJRTjJNaVJqTlpsRkZRWGZDTkZtOW5NMXpwQXNvWWptdFJUYzVhand1YVhjNXhyV3NrVDk3UmFLekFHZTVBUkhoVlVzRGJqS2tsemlpWDVXUk9jSndTTkNOSSs5dzFKd3Y0WmIycjdsQ01aNG9xNUMwRWRUeCsyR3pOdUtwSitpRmYzOEpFV2tISm45RE5GN21tQkRJVHJXRWcwVldMM3BIVTIwdFNabnVxV3UrUjNCdFlhOFh4VjFITzdHeUQzMlVrT3BML3lEbG9JTkZUbXZ0SWQrbm1BanhSdzQwVk13Vktpd3JLTEU0Yks1VU9WbnRZd2hPY1NTWEtySkhLUEplZG9jcEdqVnovWk1JYm5ZVVBCMTAvZUtDcnM1YXBxcGdWbVd6QllXcG10S0hlY0pQamFVdUVnUkREYVUwb1pnaENKNnpOTVE1WmhEWXgwNXI1djJtdVFkTTBFSUx0WFVzYUtpUVg5V01FVW90YWdRekZiVU5ONk5VUEMybm01cHhFV0dDak1jM0dkSkhqU1Uya09STEsvSkdTcmtmR0VJam5jVS9DWVVuT2lwb1llbXdqOHRTVDlOc0ptQjdUVVZYdGJVdFhBVEpWWlhCTXZZZVRYSmZvYmdKVVBtR01QL3lGYVdvbmFhNkJjRk8zbnFjSXFDb3pTWm9ab1NyMWc0ekpPenV5R254VEVYM2xVRUo3V2NaZ21lOGRkYVd2V0pvMkFKUjlEWlUzQ1VJYmhDU0c2eWJTd042cXRKVm5DVTJzdkRUUDJaSW5PdzJjQlRycXRRYWh0TlpuOU5jSjRsMk5hU21Ta2tQMW5vWlduVndrTG1kVVBPd0xaRXd5MlozUzNSKzRySUc5aGNicFBYSEZWV2NRZFprbjJGT3RhM2NLV1FuTlJDNWcxTHNKYWg0R0N6U1ZzS25DT1k1T0FGUlRCZWt5eXJ5ZXlpbGhGS3ZhNzVyNE1jMGFXYW5HRWFUaGN5MzFzNDM5S0t4VHpKWVk1V1RIUFUxRnRJSGpRVTNPaXA0eGxOemovbEJ3MjNkWVpWbGlRYTdXQVhmNHNoZXRjUWZhdEkraldSREJQbXlOZVc2QTFQNWtkRGd5WUpsYmEwQklNOEJadTFKZnJGd0l0eWpjQU1SM0swQldPSXJ0TUVYeWh5cmxWRXgzdWk1ZFVCam1CL1EzQ1hXODVSNG1CRDBzN0IrNHE1dEtVak9sYjlxcW1oaTVBWjZHRklDNUhYdE9vYmRZR2xWZE1WYk5KOHRvTlRGY0h4bm9MK211QmFnY2N0alduYk5NdVIwMHVJN25RRVN3ZzVxMnFxcktXSWZyTlVtZVFvY1k2SHV5eEpWMDJ3ajM2dzAweWhwbVVGZW52NHA2ZlVrWllxTHl1aW54MlJHT2poQ1hZeUpGODRvaVUwMFlNT09oaHF1TmRmYk9CN2dVODhwWTR4Sk84TFZkcDYvcTJ2b2VCNFIwNHZJZGhTRTQweFpPYngxSEdHSi9qYTBMQnRoRkluS2FMUFBGenVDYVlhb2o4SmpQTUU4eW95eG82emxCcWtpVVpZZ3EwME9ZTXN3YldPNU5HbXEreGhpcHhITFJXMjlBUmpOS1hPMHdSbmVhcjhYU2c0WEZQTEtFUFVTMUdxdnlMd2l1QlVvYTd6cFowbDV4eEZ3V21XWkMxSDVoNUZ3VThlUTdLK2c4VWNWWTZUTVFyZVZRVC84dVE4WitBTElYblNFYTJwWVpRbmVFOVJaYlNCTllYZldZSnpXL2gvNGo0RHAxdFlWY0ZJQzUwMTlWeWk0VGhQcVNGQ3pqR1dhSFFUQlU4cTZ2clZ3Z3hQOUxrbTg0MGltV0twY0xDallUdHJLdXd2c0tTbnJ2SENYR2tTTWs5cDZsaGNrZlJwSWVpcytOMlBpc3pUK21GTHNweUdsZVVoRHdjTHJacW15ZXlseHdqQmNLSEVhcHFrbXlhbmd5TFpSVk9pandPdENZNVNzRzV6TDBPd2xDSjR5NUt6bkYzRVVORERyaW53aXlMWlJ6T1h0bEJiSzVJVEhGR0xwOFEwUjZhYjZtUzdlbkkyY0ZyeE95SHZPQ0ZhVDFIVGhTMWtyakN3cVdldXJDa2srd2lsbGhDQytSU1puUlhCaVphQzVSWFJJWllLcDJseWZySHdpS1BLUjBKRHpyZFUyRUZncGlkYXdsRkRSNkZnWFVNTmErZzFGWTNiVVFoMmNMQ3dvc1JkbnVRVFMvUytKVnJHTGVXSXZ0UVV2T05KeGxxU1FZWUtwd29OMmthb2NMamRWc2lzNE1rODBFU0YyWXBTa3p3bGRqSGtqRkNVdXRJL3IrRUhEVThvQ3M2eXpMM1BoV2lFb29aZEZNa3ltbGFzNEFjSTNLbW9NTU5TUTN0SHpqR1dDcmNKSmRZeVpDN1FGR3dqUkw5cCtNclJrQUdXeklhV0NuOVcwRjNUc0swMWMyWnZRdzBieXZ4dVFVMHIxbE0wcUpPN3dXMGtSSU1kRFR0WEVkemk0VkloK0VvSUhtMG1XdEF0cENpeGxhYmduODNmS1RJN2FuSmU5U1Q3V0lLMURNR3BRbVllQTU4SW1WNmV6T0dPeksyS2dxMDFwZDYwY0tXaVVpOUxpZXZiLzB2SURQSFEwNUt6dDRkZFBja1FCUXRvYXVyanlIbmVrL25LenBRTHJWZ0tQaklraDJ2NHV5ZXpwditYb283ZlBGWGFHRnAxdmFMS3hRNHVVcFFRUzVWdVFzN0JDcTR4Ukp2N2Z3cFZ2dkZFQjNqKzYyMGhhT3VvY3FNaFdkNlRUUEFFeCttZEZOR0hkcmFuRmU5NVdyV21JdmxZNEYxRGxlMkVDZ2M2Y3RvN1NyeXVxR0dHaGEwdEZRNVY1M21pZ1VLbWc2WEtBbzRxUzNtaWsrME9acEFoT0xlWktpY2FjZ2FZY3l4NWh5cFlRRTAyWkE0eGkvcE5oT1F4UjRrbE5LeXFhY2orbXB4bkxUbm5HU284NSsrM1pDWnE2bHJaa1hsR0VYM28rQzlGaWVjY0piWldWRmpDMFlvMUZabkpob1lNRm9JMWhFWjlyNmh3Zzc1SHd6Qk5oYlpDZEpFZkp3VFBHekp2YUtJbXcxeVlYMUhEQW1wWFIrWkpRL1NtZ3FNTlZRYjV2Z2FtR3dMdHQ3Vnd2UDdRazF4cGlNNXg1Q3l2OTNFMDZNWm1nczBOeWEyYXpJS09ZS0NHQlFRVzk3Um1oS05LRjAySlpxSEVKNG81OHFwN1g1RWNabWM1NnRyWEVxempDQloxTUZHUjg3UWwydFNUczZDR3hTMDVQVHpSUW9ya2J3N2FLb0tYRkRYc1lXNDJWSmloL3ErRlAyQmRUekRUd1ZxT1lCMTNsaU01MHZHN3d5MjhxYWd5dUlYTWVRSS9PcXE4YmNuNXdKSTUweEgwMENSbnR5ZnBMMVQ0aHlkWXBvWGdOaUZ6b0lVVERabkxOUnpoNFRCSHdiWUdEdlpreG1seUpsb3lyNnRSaWhwZVVHOTRHbkt0SXpuUkVGMHR6SkcvT09yNzNKQmNyU2gxazZXdVRwcmdMVSttblNHbnY2WmdlME5OeitrVERkSDhudUF1VGRKRENOYjIxTENpSXVxbFlicUd6VDNSQW9ab2ZRZmpGYXprcWVOV2RZYUd2WVRNMDAxRVcyb0tQdlZrMWxkVUdTZ1V0SEZ3aktNMWg5am5GY215NWxDaG9MTmFRTUdHRHNZYktpeGxhTUJtbXN4MVFqQ2ZmbHdUZk8vZ2NrVzBydVozanVnS1IzUjVXOWhHVVdxQ2d4dUZnc3VhQ0hvcm90R0t6R2FlWkI5RE1zYVRuS0NwTXR3VHZPemhZazByZHJBcktDcWNhV21WazErRjM3MnVyMVlrS3hnYXRJOFFmZTFnSVg5d0U5RmdTOEVTbXVBQklYblJVYkNhcGNLZStuTzdzbENsU1pGenBWL0xrTG5jRWIxcWlPNDJmUzNSODU1U3UybUNMaDYydDFTWVpaWVZtS3dJSGpSRUYydWloVHpCMjBKT2t6N2RreHpZUW5LMFVPVTQ5NHdoK1ZXUmM2VW4ya3BUYVZnTERGRWtKL3VoelJjSTBZS0dncEdXT2xvY0JVL2E0ZktvSi9wRWFOVjZqaXAzK0VzOVZYWTA3OHJHbm1BZGY3dDl5bFBYUzM0UkJTdVlQczFVZWNaVFU3OFdhbmhCQ0hwWjVzQW9UejBMR1pLalBmOVRSeXBxV0VpVHZPRmdsTDFmQ0VZM3dZLysrcmJrN0M4YldlYkE2cDZvbTZQZ09MMmtwNDRURkpsVk5CWGFlMnJxcWRaenRPSnBUODdHUXNFOWpxQ1BJZTlWUmVadVEvQ0lnYWNzeVpkQ3BJU2NTWXFjWms4cituc3lDemh5ZmhPcUhHT0l2ckxrbkM4d1RwRmNhWWlHQy9SVTFOUmJVZVVwb2NRT25rUnBHT3JJT2NOUngrMXVBMFVyemhTU3QrVnlTM1NKcG5GV2t6TkRxT0ZHSVdjZlI4NkRubUFSVFExSEtJTDMzRXhQaWVtZU9oWVNTanpsU1VaWnVFNFR2ZW9KTG5CVU9Gb2Y2S2l5c0NibkFFY1pnY1VOVERPd2txV3UzUld0bUdwWndsSGhKRU5kWjNtaUd6MGxKbHNLbmpid3FTSFFqcHhuRkRsVExMd3FKUE1aTWpkN0tyemtTRzdWc3hYQlpFK0Y4WVprYjAxT2UwMHl5Uks5cHNoNVNZaDI5eVNQS0JvMnlsTmh0N1prWm5zS2VuaktOSnU5UE5FeVpwYUNIdjRLdDZSUXNMdkFWcDdNOWtJaW1tQ1V3R2VXcUxNbUd1SW90WU1tV05wU2Foa2hadzlGcVpzVm5LSmhzakFIdnRITXNUTTlmQ0kwNkR4L3UzdmZVWENxZnNLUmM0b0ZZMmpNc29vLzdESkR3WjFDc0lLbkp1K0o5bGRrcG1pQ3hReDFyV2pJK1Q5RndjV1d6T3VhWUgwSGo3a2xOUlZXRVFwbWFxb3Nha2lHTlRGSGRqUy9xblVkbWYwTkpXNXhzTDBIaGltQ0NaWlNSem1TUFRYSlE0YWF6dEF3dFpub2FiZWJKK2h0Q2FaN0NtNTM1QnlvcVhLYlgxV1JjNEVoMk1rUlhXekltVmM5NkNqNFZkT0tWeFI4NFZkUXNJVU04UHNvb3UyYnlWSHlaRnVxN084b3RiU1EyVUFvZUVXVHVkQVRMR1NwWnpWTGxYVmtQVTJKYysyN2xzdzJqbWc1VDVWaGJlRTNCVDA4M0s5V3NUVGtGVS9Pc2kwckM1bFJscHdSSFVpZXNOUzBzT3ZtcUdNTDFhUmJQQXhUSkQ5Wkt0eHVvYitoaGw4Y3dZR1dwSjhudWI3dDVwNmNvWWJNb3ZaMUJUZGFLbjFqWUQ2aDRHRkRORnlUL0txZTFYQ1hwaFhIT0tMWm11UlNSZEJQRWZWVVhRekptNVlHUEdHSmR2QUVyN2hITmRHWm51QnZycGNpR21vcE9MZjVOMHVWTXkwRmZZVG9KazkwdVVDYkp1cGFWcE81M1VKWFIyYlZwb1UwMFYyS09vNHpNRnJCZDBKdHoycGEwY2xUNVE1TDhJcFExNzdtV1FlalBNRUpodVFqUzEwcmVmNkhIamRFaHkxUDFFWVI3R3RPMHVTc0tKUVlMaVRuRzFyVlNjajVseWF6cHFXR2w1dUJiUldsN202aXhHT09uRXNNSlI3ejhKMG42S01uQ2R4aGlOWVFDb1o2Q21ZTG5POG9tQzNNa1czYmt0bFBtRXQvVlFRSGVqTDMrZE9FNUZsUGRLL01xOGhaeHhKdEx5UnJlcExUaFlLYkxaeGtTYjVXNTJ2WXhOT2FPeFVGMHl4TVVQd0JUWXFDenkwMVhheVlLMHNKeVdCTHFYME13VTVDem95bVJ6VjBFamplVWVMZ0RwVG82aWo0MlpBenZEMDFkSFVVVFBMVTk2TWRMYkJNRThuRkJuN3pKQ010SmNab2tuOFlvcVUwRlM1V0ZLeW5pSG9iZ3VNY21XOE4wWGtXWmpreU4zaHFPTXRTMDhyKy94VEJ3cFpTWjNxaVZSWDhTek1ISGpmVU5GamdIRVBtWTlQTDN5a0V6eGtTcmUvMVpENnovTnV6bnVCMFJjRTFUV1RtOXpSZ2ZVV1ZKaUc2eXJ6Z21XUFhDOEVBUjRXeGhsYWQwWmJnUXlFejNwRzVSVkV3d0RKSDJtZ0twamNUaUNPem4xbGZVV0FORmJaMkJBOGJhbG5Fd2VKQzlKMGl1YWVab0kraXBwRkN6dEVLVnZja1IyaWljZTFKdmhWeXRyUXdVQVpwZ3N1YkNQYVU3eFVlOXZXbmFPcGFTQkVzcGFseWtoQzliVWxPTXBUNDJaSGNhNmh5cnFLbXcvd01SOEg1Wm1kRm9CVkpiMDNPNFVMMHRTTm52SWVSbWtyTFdxcnM3OGdjckVuMnRwY2JvaDBVUE9XM1VVUjlQTWs0VDRubk5LV21DamxyZWZoQ3d4Uk56dGZtSVFWZERFbHZTNG0xL1d1T3Vqb1pDczVYVk9qdEtQR29rSnpzWUN0RllvV29uU1BUMjFEaGVVL3dXaE0xOUZjRWx3cU5HT3NwOVE4Ti9jd1hhaU5EMU1tZUwxUTVYUk90WVlnR2VGcTFhVE1zb01tY3JLalFyT0ZRVFExZm1CWWhtVzZvOEpramM3aURKUlRCSW81a2dKRDV5TUVZQTNzckNnN1ZGS3dpVkprbVJDYzVvaEdPS2hzWU1uL1hCTGRvNXRhWmpsYjlZQWxHV1JpbXFiQ3NvWTdIRkFYTGE1STFIUFJ4TU1zUURIRmtXdFJObmlxVDlVRWVOamNFN1JVbHJDSjRSMkNTSnVxbEtIV3ZKWGpBVU5jSVRZa2VudUJSQjg0VGJlZXBjcVRqM3paeUZKemdZUWRIbnFmZ0kwZGRVd1M2R3FXcHNLV2hqcTljVjB2QkFFTU4yem5xK0VCZklXVCtwQ2xZdzV4c1RsSlU2R2VJQnNqR21tQU5UekpaaUlZcGdyTTBPYThaTWpkN05QODdqeGhxR09oSmxuUXRqdVFwQis4YUVFMDB3WkZ6blNKUHlIeGdIM0hrUE9zSkZ2WWs4enFDSHpUczFCWU9hNEozUEZVK1VWUlp4bEhETTRZYXZsTlV1TW9SdmVpWkEyZDdnck1OYzJnK1JiU0NFS3ptZ1lzVW1XbWF6Rkp5b2lPWjRLbnloS09HUnpXSmEwK21veVY0VFZIRHpuNTFBd3RxYXBoZmsvbFJRMDhGWDFpaXF4VEIva0x3ZDBWeW5LZkV2STZjZDRYTVY1Yk1oWjdnWlVXVnpZUTZObTJCWXp4SmJ3M2JHdGhFVVVNZmdiR2VvcmFlNkR4SHRKb1o2YWxoWjAreXRpVm9LMVI0ejVQVHJPRUNUL1N1Z3NlRU9sYjFNTU5SNFZSTmNKeStWMUhnOU9OQ2xTWkZaamRIbGM2VzZGQkxkSmphMk1DNWhocHUwREJZRVkxVEZHd2lGQXhSUkNzWWtpTTlKUmIwSk5NVmtXNkNaWVQvMkVpVEdXbW84aytoNEZoRE5FN0J2cHBvVFNGbm1DVjV4Wkt6dmNDZERvN1ZWUG5JVStJK1JjNjhqdUFwQzkwTXdjRkNzSjVoRHF4Z1NjWUtyZXJ1eVF3VHFyem9xRENtaFdpNEliaEIwWXJ0M1JHYTZHZkR2NTJyS1hXaGgyOGR5WmFXVXZjWmVNVEJhWm9TR3lpQ3RSVTVKOGl2aWlvSGFFcnM3SmtqNjFzeVZ6VFRnT2NVT1E4YnVGQlRZV2RMNWczVDRxbHBlMCt3dkQ2M2hlQVhSZkNDSWVkOVJiQ3NwMkNpSTdyYVVPWU9UVTEzTjhQTkh2cGFHdmF5bzRhM0xMVDFsRHJWRVBUMnpMVWxoZUIxUitaVFJmS1dKK2Rjb2NMSmZpMTF2eUo1MWxMcUowV0Q3dFJ3cnllemppVjVXMjh1Sk85cXlrelg4SkRlMmxIbC85b3lCd2EyVU1mT25ncFhDaXh2S2RYVGszd3JzS21pVllkWklxc29XRUVSamJjVU5EdWlhUW9tR29JYkZkRUhtc3lXbnVSK0llcmlLRFZMbmxhd2x5TkhLd0tsU1U2MzFQS2VwOEo0UStheWprU0xLWUxoYWxOSGxZdnR0YjZmSG0wcDZPQXBzWjRsMlZmZHFaa2p1eXN5NnlzS0xsY2tmMUtVdXRDVHMzOWJtQ2dFeXlvYXNJV2xWYU1GN21nbVd0QlQ4S29sNXhwSDlJR2xsbzhjSmRvcGN2WjJzSW1sRG1NSWJ0RGszS0lwZU5pUzA4bFF3MTFORlBUd1ZGbFBQNnBKMmd2UmZJN2dRVWZtTkF0ZjZHczB3UXhEc0tHbFZCZEY4ckNhM2p6ZHdNYUdIT3NJdHJaazdoQXlPenBLOVZTMDZqNUY0OWIwVk5HT09mS3MzbERUb01zTUJlOVpXdEhGRWd4VEpMczdxcnlnS1pqVW5tQ1lvZUFxZVU2anFXdUxKdXA0V2doT2R2Q1lKbnJTa1N6b3lSa201TTJTdFF3Vmx0UGtmQ0FrNTh0RVQvQ1NnKzhNVWVjbW90TUVuaEJLZldCSVpzZzJpaHJ1TUpRYW9JbSt0a1RMS0Vxc3BNaDAwdzk1Z3ZGQ1FSdER3VFQxZ1ZERFNFVmRsd3FaZnhvUVJiSzBnK3RiaUJaeHpLbHBucHlwZWpkRHdUYWVPdm9yTWsvSUpFMTBoOUNxUmUyOGhoTGJlMHBNc2RTd3Y0WmJoS2l2bzJCakRXZkw4VUtKZ2Vhdndsd2I1S2x3aHlFNHU0WGtHRTJ5dFpDem5LTENEWlpxNDJWelQ4SExDcnBydUZiSWZPSUlObWgvcUNkWjFaQmM2NWtMSFIxQmt5ZjV6bjZwTjNTdkdLSWxGTkdwbGhyTzlRU1hhbkxPTVFUTENhMFlKQ1JyQ1ptL0NabXJMVG03V3pDSzRHSkRpV1VkRmVZeDFMQ0ZnM05NZDBYbUN1RjNZNXJJVExEVXNZUzl6b0hWenduSm9ZcFNUUW9PYnlFenI0Y0ZCTnFZVG9wb2FVL3dreUxaMmxQaFgvNVk5NXVseEdUVjdLamhXck9aZ2w4TXlVVWFmallyYU5qTlUxTjNJV2NqVDVXeldxand0b2FySFNVT2JHWU8zR0NKWnBzQmxuSkdQZDZaWUx5bDFHZENBMjYyNUl3d0pEUDhHVUt5bWJ6dXlQbFpsdlRVc2FVaDV6RkRoUldGelBLS1pMQWxXZGNRYk9iZ0Y5dE9xT3NtQjFkcWNxWUptV3N0RmJaUlJJOXBvb2xtcWlMblUwUE92eFNjcGFoMmlTTDVVSk56Z1NjWTUrQXVJYnBPMFlEM05DVytkTE1zekZTZEZDV0dxRzZlVnEydVlWTkRkSUNHRDZXN0VQUldaRVk1Z3BzRTlyVWtTM21panp6Sm5tNlVwVUZYRzFoQ1VlVm9TNVdmTmNGcGJsRUxMMnFxckN2TXZSZmQ0NW9hbHZLVTJ0aVE2ZVBKT1ZNUlhhc2U5aVR0TEp6dFB4SktMV3BvMkNSRGNKd24yc1dTTEtJTzFXUVdOVEN2cFZVdk9aaGdTQzQwSkQwZE9jdGFTcXprQ1JiWHNLbGIxMU9pcDZQQ0owSXdTSk0zMWozYWtSeGxQN1J3bjZhR2FVTDBxaUxuSmt2QjN4V1oyK1ExVGZDd3BRSDNHMG85MlV6bVg0by9vSk5RTU1TUWM1NDd3VkhoZGsrVkN3MDFERllFblR4elpLQW03NFFtZU5OUjF3Nld6RWhOSzE1Vkp6dUNkeFE1M2RSVUR3czVLdndnQk1PRWdwY1ZOZTBoWkk2UlhUMUpkMGN5ajVuc2FFQUhnVm1HYUpJbFdkc2M1VWkyRWxyUlI2anJSQXR0Tk1FQUlXclRERnVia1phb2s3L0FremZJd2Z1V1ZxMGpIenVDSzRRYWJ0TFVNVlBCM2tKMG95SFRTVkZscU1BTGlsSmYyUmY4azVhYUh0TWZheW9jTEJTOEw4OW9Lb3hwSnZuQWtEUGEwcXA1REFVVEhLV21DY250aGxvdThpQ0thRkZMSFdjSU5kMW55SXdYcXJTeE1ObVNzNkttb0wyUXJLdVd0bFE1VjAxMjB4UTV2UnlaUzFyZ0ZrV3doaU93aXVRYlIwT09WaFFNOWlTM3RpWHA0UmF3UlBNcDV0RGxldE9PQkw5NU1wTTAxZFpUQk05cGtuNXFGMDEwckllSEZjRlpobVNHcFlwVHNJNm53aHFlNUM5eW5obHBwNW9waHVSYjZXY0pGbGRrVm5WRXd3eFZmclZrdm5XVXVOTENnNWJnYm9GSFBEbERQRG1uSzdoVXJXaUliamFkRGNsdWpsWmNhb2tPRnVwNFJpMWthY1Y2am1ycksxaE45Ykd3cEtFQlE0UTZEdklVWE9tbzZVNUxxUU02RVB5aUtOalZrUG5Ka0RQTkVheGhpRmF5NUV4VzFOWFZVR3FjcFlZZFBjR2lDcTd6L1RTbGJoTDRwcGxXWEtkN05aTzVRUUZyZWZoUlFXL05IT3NxY0lnbGM0VWhXa2xSOEswUXpiQXcwOENCRG5wYmdxWGRlRC9RVXNNNFJaWERGQlc2V0pLZS9tRlBkSDBMdEJnaXE1N3dGTHpseVF6ejgycVl4NUQ1V0pQNXlWSkRXMDFCZnlIblM2SEtPL3JlWnFJZDFXR2E0SGtoMmtXb2RKOGk2S29JUGxBajJoUHQ3NkN6WHNWUjZrb1BSeldUZktxSWVudGF0WXBRdzJtZTRBQTN5MUtpbmQzU3dvT0taRGNGWFR3bDl0V1U2bWZnUms5ZDcxc0t0bE53cmpuWXc1dEM1bjVMZEtpR3J5M0pLTmxIRWQzb2FNQ0ZIcmF6QlBNcC91TkorVjdJdWRjU2JlT0lkalVFZHdsMFZIQ09abzV0NllsdUV1YUM5bVFlTWdTZk95S25ZR0ZIY0llUTg0eVFXYnVKWUpwWnc1Q3pnbERIN2dLbldxcU05WlRhWGNOMFRlWWhSODRlUXRKVDc2SkoxbFJFZTdXbm52c01tUmM5RlE3U0JCTTltVjNsQ1VkbUhrL1MyUkFNdDBRakZORnFRcFdqRFBRMDFEWFdVZERCa1h6aUtQakdFUDNWUCt6SVdVMnQ3aW00MUZPbG95V3puL0w2ZGtVeTNWTERhWjZhcHBnRExIUGpKRXN5dkpuZ1dFUFV5VkJpQWFIQ1RFWHdyTHZTRWJWMWUxZ0tKbmlpY1dvckMxTVVyVmpCM3VEaEpFL3dnU096azFEWHBrMGs3M3FDTTh4dzJVdkQ1a0ptRFVmT29tcU1wV0NrSlJsdktYR21vZUJtMThVU2pWSWswNFNDbHhUQjZZcmdMQVBMV1lLOUhMVXQ1Y21jMHZZRVM4R25UZVJjNnNrWmJRa1dkeFJzSWN5QlJ6eDFEYlRrOUZiVTBjYVRQT2dKSGhKS25PR0lWaFFxdkttbzBsbFJ3OXNhYnJaa0R0ZGczUHFhS2k5b2F0alk4QitHMzcxcGFNZzYrbVpGTk50UTA0bVdCcTNyWUxPbXRXV1FwOEtKbnB5OURkRmVuc3lqZHFaK3lZNDBWSmxIOHdjZEx6QzhQWm52SE1GVVRaVXJEVGtMeVFhR3VzNVg1THpwWUFmM2krZS9abGhxR3FXaGg2T3U2eFRSOVo2b2k1QVpadHA3TWoyRUVtOG9TcHhpWVpDSFUvMWZiR2ROTk5SUm9aTWhtaWxFYjJncUhPRUpEdFhrSEsvSm5HNklydmJQQ3dWM05oT05WZFMxdGhCTXMxVDRRT0JjVFdhMkl6aE1rMm5XNUt5bjl0WFV0cHY5UnNHMm1zeGsrWnNRelJRYWNKbmNwZ2tlMCtUOHk1RnpqOEJpR283WGxKamFUSWxwUXM3S0ZqcHFHbkt1b3lFUGVJS25GTWtaSHZvcGdoODF5U3hORld2SldjS1JzNzBqMkZPVDAxMklsbEVFTzFuNHBEMTUxM1lnMnNzUVBPVGhPa3Z5cnFIVWRFWE9TRXNpaG1CYlRiS1gxa0xCUFdxV2tMT3FKYmpCM0dCSVptb2E4cVdsNENHL2laN29pQTcyWkw3VEpOZVpVWTdrRlFmdERjSEhsdUJ6UmJDZWd6TXRyUmpWUXBYMmxnb1BLS0xKQWtjYk1sMDFYSzJwN3loTDhwQ0JiUTNCTjJhdkpnS3Z0dGNyV0RLM0NpVU9WeFE4WlArcHFYS3lJeG5tQnltQ2c1dkpqTmZrUEs0K2M4Y0lmSzhvY1Z0N2ttZmQvSTVTUjFoS3ZDelV0YitsaGdjMDBaYU82Q3loSVFQMVV2NHlJWmpsb2FkNzJQWFgwT0lKdm5GVSswWmY2TWhzSndUZlcwcjBVd1FmVzRMTkxabDVISzI2MUpDWjRxbkJhQXJlVkFTM1dyalYwTEJuTkRVTk5EVG9DRWVGZndnY2I0Z09FcUxSaGlyV2tleHJDRVlLVlY3MTFETFlFRTFYQkVzcDV0cFRHam9ya29tS1lGOUZEWHY3ZlIzQkd3YmV0dFN4bnlMNTNNQlBqc3hEWmpNaCtWVVc5TlJ4cTFEaFZrK0ZTeFFjYUdqVjlQYXd2NmVHQnl3NXF6b3k3eGs0UnNPU2hxakp3V0tlLzFwRUVmemtvYmVEL2RRSm1wcWVkY3lCVHkyc3I0bkdOUkgwYzBTUFdUTHJxQWMwT1FjYi9nZW1LZ3F1Y1FUN3lTV0tDbjJFVW90b0N2cFpjdDdSTzJzeS9RVzBJV2NYZDdwUVJReVpWd1QyVVNSTzg3dWhqaW9UTEtWMmJycE1VY01RUmJLSC9OMlQrVWxUcGFNbHM2Y21jNkNDTnkzSmRZWVNVenpKUTRvU0Qzb0tMbmNVTE9pSnZqQkVDMm9xbkNKa0psdUNZeTJaUTVzbzlZWWxaMVZMbFFVMW1YRVcxalpFUndqL01VU1JjMjRUZGV4bHFMS2ZRQnREVFNjSlVWOEZzelhCRVk1a3RwRDVVcjloWUI0TmIxaWlrdzNKb1lwa0tYK1JvZFJLRnQ1M01NdVJuS1NwWTMxUHdZYUdhSUxoM3d4Skd6OVRrVFBFRVR4b0NXWnJndk9sbXlNenhGRXdWSkU1eFpLenZ5SjRXeEVjMTZHZDRYZTNXZXE0WEgyaktSaWtxT2tHUTg3aFFuQzd3Qm1HWUxBbmVzWDNNK1M4N2VGQVRhdXVOK1Fjcmg3eEl4WEpiVUlkTXczSkdFM3lsQ1d6cmllYXFDbjR6aEdNMTlUUTN6MW9IMUFYK3BXRXFJYzd3TkdBa1VMQm8vWnhSYVY5Tk55aDRCcjNyQ0haemJ6bVNmYXdCTDBkTlJ3cFcxa0s5bXhQWFI5cG92Y2RyR1NaSzljMmsweHdGR3pqdW5pQ3RSU1pDWjZjY1o3Z2FrdG1nQU90S2JHL0puT2tKcmpjUVRkRk1zeFJRMmNMWTNXVElybEN3MWVXS244UjZwdnQ0R0ZEc28zUW9MNGEzbkxrM0c2SnJ0TUUzZFNlbnB4N1BORlRtZ2EwRWFKVExRMDYxc0VlUW9XWGhTbzlMVFhzYVNqb0pRUlhlWkx0RGNsYkNyWXpmekhIZWFLakhDVk9Va1FITzNKZUVlcHI1Nm1oaXlhWVlLampOVStGZWQxd1M1VmxoV1NxSS9oWVVkRE9rYXhpS2Vob3lPbnJDVjV5Qkh0YldGcVRIQ0N3dHBEY1lvbGVzVlI1eVV6VFpCYjNSTk1kMGQ2V1ArU3ZodUJtUmNHeG51UXpUOTVJQzI4NWNyNDFjTEdRNmFKSmhtaTRUTUdlbXB4ZWltQlJRdzF0RktWKzhqZDZLdXpvU1RxcUR4elJ0cFprdXJ2S0VIeGxxWEtSSWpqZlVOTlhRc05Pc1JTY29XRkxUK1llUlpWRDNHUk4wTWRRY0txUWpIRE1yZEdHVnUzaVlKcFF4M1dHVXZmYm14d0ZmUjIwV0JxMG9ZWTdMTUZoaGdZdHI4anBhRW5hT3pqYXdXV2FUUDhtTXIwdC9FUERQb3FjbnhUQkk1bzU4TDd1b1duTXJwb3FQd2dWcmxBVVdFK1YrVFFsOXJhd295UDZRR0FsUXcyVFBSWCtZU2t4eUJDOFo2amhIa1hCZ1FMN1dJSTNEVkZuUmZDckJmeGV3djlENnhzeWp5czRWa2hXYjlwVVU2MjdKbGxWMFlETkhNa3UvbGROTU1YREVvNGFGbkFrazRVNmZyTkVVNFhnWlVQbUVLSFVsNDRLcnptWWFtakFiaDBKRnZHbmFUTFB1MXM5alBDd2pGcFlpTjd6MURUT2svbmMwN0NmREZ6bUNmN2krYmZOSFhoRHRMZUJYelRCVDVya012V09JeHBsNEVNaDJMR0pCdTJzeURuQUV4Mm5hRWhIRFdNTXpQWkVoeWd5UzFtUzVSVEpyNVprb0tiRVVvWXFyMmtxZERVRTh6dEs3T2FJbnRKa0ZySUVDd3Y4TEpUYVZ4NVhKRTg2Z284ZEZlWjNGTjNyamFiQ0FZcG9ZRWVDOXp6SlZVTEJibVpoRHlkN2tvMDl5ZHBOWjNubTJLZWU0RlBQWEhuWUVGMW5xT0ZFQzA4TFVWY0R2WVhrSkhXOGdUYUtDazlZR09lSUpocWlFNFRvUEVlcGRwN0lXRmpkd25XYXVmR013SkpDTXRVVFRCQks5QkdDT3kydEdHckpUSEl3eUVPenA2YVB6Tk1PdGxaa0R2Y0VXcFA1U1ZOaGZrdkR4aG1TYXpUSlhZck05VTFFMHh3RlZ3cVpRd3pKeHc2K2tHR0dVajJGZ2xHR21uYjEvRzUxdWRSU01ObFR3NkdHbkNjVXdWY09wbXNxVEhhMDZvNzJzdzFSTDAycDl6MFZibk1MT2FJWDNRS2FZS1NDRlF6QktFVU5IVFNjNDhrNTNSSDl3eEdNdHBRYTVLampXMFcwbjZYQ0NDRzR5eE5OZGhRNFI0bDFGZisyc1NkNlVGSGlJRU95cXFGZ1QwMW1FVU1EK2pveTc1alBoT0Erb1ZWTG0zMDlGUjR5Vk9scDRSaExpU2NObVNtYVlGNVB3MFNUck9Jb1dNU1IyVWtSWE9NcCtNNFNIVzhvOFpvaTZPWmdqS09hRmFyOHpaRHprV3p2S09qa0tCam1DWGJ5OEphaGhqWFVMWTRLbHpnS0x2QXd4VkdodnlkNHp4QjFkOVQwcGlhem1LTENWWlk1c0tpRDB5MlpTWXJrVUVQVWJJaytkbFE0U0pIVFI1MGsxRFBhVVdJZFRaVzlOSnduSk1PRUNnZDdvdS9NbnBwTUowMk8xVlQ0V3NoODVNblp6Y0ZUbmdwWEdLbzg0cW13Z0tiQ0wvb3JSL1N6SjJjckErdDZNcDk0S3Z4SlVlSWJUM0NRdTF1SWRsUUVPemxLZlMzVU1jclRpRm1PdXJvb2NyWnJUMkFjbWFtT0tnOFlvbWVFS20vcmxUMnNvY2lNYXliYVVsRmh1cUhDTTJxSUorcmc0RWNERnltaURTeHphSGRQY3BFNjJwRDVreU01U0JNb0ExUGFVdGZJdGhTODVpZzFWUGlQUFlYZ1lFTU5rNFFxN1RYQmdvN29UNTdnUFVkd2dDSHpoSVZGUEZVNk9ZSnpIQVg5bTVvTnJWamVFNjFtaURycVE0VlNhMW9pVVJUc0tIQzBJZmpOd1UyV3pLNmVxSzhqV2xuNGcxNVRWQm5xbUR0ZUNKNTAxUEdBb2NKaGhxalpkdEJFQjZsbmhMcmVGSkt4bWxLYmVHcnFMaVNUaFZJYkNkR3psb2FzYTZscE1RWEhDTUUyYm9McEpnVDd5V2FlbXU2d0JPTmJxR05WUlMwUEtJTDdMY2tiam1RdFI3SzhJNXF0cWVsK1QvQ2hKVE5JS0xqZFVNTklSeXZPRWtvOVlZbDJjd1F2ZUJpa0NOYXdKS2NMQmJjNytKTTkybXlzTnZkL0ZxcDhhMGs2Q05FZTdjblpyeGxXMHdRWGFYamFrdG5Sd05PR1pLWWlPTndTN2ExSlZoZXEzV2dKSGxRVUdLSEttcDRLQXhYUi9VTFVSY05nb2E0emhLU0xwWlIza3hSUmIwTm1EME9GbitVQ1M3Q3pJMW5iUDYrbzR4NDdRWkU1eFJDdDNaYWduWWN2bXBZUWt0WGRrNVlLWFR6QkM1N2tLRWUwVlZ1aVNZcWFwc3NNUzNDOXAyQ0trSE9nOEI4UGE4cDVhdHJJdzNxZXpJV2FuTUdhNUhSRE5GNlJNOXdjYWNsME4rUThaOGhzSWtTbmFJSWRIUlVPRWViQVB5MXpiQ2toTTA2MkZDSnRpZjdQVStVdG9WWHpXS3FNMVB4WE84Y2ZkcnVoRlEvYTZ4M0pLWWFndlZEaFFFdE5peWlpU1E3T3N1UnNaVWt1MENSTkRzNFNvZzZLS2pzWmdrMmJZSnFpamdzRWVub0tlbmlpblJYQm4vVTNsZ3BQZHlEWnluUXg4SWlpb01uQ2VwNUt5OG1qR3M2V3R5MGwxaFVRVGNOV3N3UzNXUnAya0NOWndKRzhvbUc4SnBoUFVhRmJDOGxFZmFid1A3VnRNOXlvYU5DQWpwUjQxVk5ockQ5TGtiTjcyMnYwQ29aTUJ5RnpoYVcrTXl6UllFV0ZEUXdOMk00L0ppVDc2UHVsalQzVlUvQTM2ZWFJVGhiK1I5b1pHT0FKOXRld2tnR3ZxT01OUldZalQvQ3d1OTlROExxREU0VGdiTFd4SjFqYUREQUVSc0ZPRnJvYmdqVXNCU2NhZ3VYVThrS20yUkwxOXRSeXBTSG5ITmxIaUlacWd1ZnM0b3BnUWRWZHd4Qk5ORkJSNmtWRnFiOG9naW1PekI2YTZIVHpybERIRXBZYXhqaWlBNFRNUW9ia0RnMnZlampmd0pHV21uYlZGQXczSDNocTJOeVFmRzdoejRhQyt3M0Jid2Jlc0cwc3dZYXl2cEFzNisrUmkxVmZ6eDkzbUZDaHZ5TjV4VkhUUyswcDlhcUNBeHlaNlphY1p5dzUrN3V1UWtGUFI5RERrOU5PaUU3WDFQQ1lKVmpWVXFxN0psckh3V0FMRjVuZkhOR2pBcGRwcWd6eDVPd2lsRGhDaURZVGduYzl3YUdXNEJkTE5OVVF2T3RwekRPV0hESDhEN1RSL0EvODVLbGpFUXUzTlJFYzRQbC82QjFIaGM4VW1iNUNzS01tR0M5RVBjeG9UMmFtd0hOQ21lT0VuT1Bia2xuTWtiT2dJdk81VU1PcFFyUzlVR1ZkdDZpSC9mVVJqaEkvV09wYVc5T0tMWVJvZDZIQ1VFZE9YMDAwd3BEWlE2aHdnNkxnWmZPcW8xUmZUL0NySnpqZWtYT0docGMxVlc3MVpMYlh5eXArOTNJTGJDMWtQdElFWXgwRkl4MVZEckxvVnpYUktSWVdrODA5eVlsQzlJbWNyaW54dGFiS256UkprM2xBVTFPTEVOMWoyenJZenIybXlIUlhKRmY0aDRRS1QxcVNUelRCNStaTlR6VFJrQXhYOEZjTFYydVM4ZW9RUTJhQWtGenZDTTcyc0pJY0pFVDNXUGpSazV3aTMydVNTOXJmWmFqcFdFdmo5aFc0MkY0bzVOeXRTWFl5OElLSGF5MTBWWWRyY2w0U2txc2NyWHBNd3lHT2d0a2FqaGVTeGRRcW1weFAxTDN0NFI1UHFhc0ZuclFFanl0cTZxZ3A5WTA5UXg5bzRTMUZ6aFVDbjFreUhTekJXTGVtb1NHdk9xTE5oWnlCam1DYUFVWXBNZ3Q0Q2s3d0JCTU13V0tXZ2pzVXdUYUdWc3hXQzFtWW9LaXlxcWVHS1lxb25TSVJRM0tJa0hPMHBtQXhUZEJIa2JPdmZsbGZyK0FBKzdnbmM1MGh1VktZSzM5M0ZPeWc3cmJQTy9pekk3aEU0Q25ISEhuSjBvZ05QUlVHZVVwc3JaWlRCSmNyb3ZVY0plNTFCUHNyNkdrSmRoQ0NzWjZhVHRNRWIycHFXa3FlVnREWEUvUVZnZ3NVL05sODZkOVJNRjNEeHZaVEE1OGFndTgxMFJXYXdDaVN6elhCZVUzTU1XOW95SlVlZHZORXZReU51MWYxMEJTTWRkUjF2YUxDWXBZYS9tR29jTFNpWURjTGJRejhhTW41aXlGNHhCTk1zMVAwUUVPVjdvNWdhV0d1elNlTHVlNHR0M3JvN3k0VGdtNEcvbW9wZFpnbDZxMG82S3pKV0UzbU1rc05yM3IrYTZDYlQ4ZzV3Wk56VDlPN2ZpL3pwYU9tbnozQlJvcW9zK3R2OXpNYmRweHNxREJPRWV3dEpMdDdjZzV3dEtLYnZsZHBTelJSQ0Q0M1ZGaGVDSTd5WkxwcGdnTVZCUy9LTUFkSE9ESnZPd3EyTlFTYktLS1BMZEZXUXM3RnFvK21wbDAxSlhZUmdxOGRuR0xoVGlGenFtV3NVTWRwbGxaZGJLbHl2U2RZeGhJOVlnaE90eFI4TGdTTFdISzYybUdHVm94ekJFOExOV3pxSDlDVWVzUXpGeTVSUXpUYzU2bWhpNmZnWEVXd3BLZkU1WjdNMDVaZ1pVUG1vNmF1aXY4WUt6RFl3V0JMTUVySWJLSEp2T3dJcnZFZGhPQmNROUpkVTFOSFE3Q1huMlhJREZCS1UyV0FnY1g5VUFVekRYV2Q1YWx3dXlKNDFaOXJqS0xDTDRhQ3A0V2FyaFBtMnJIK1NhSFVZRTAwMUpEWjJaQXpYUGpkTXBaV3ZDOXdtcUlCMmxMaFEwMUQ1ak8wNmhnaFdNbmRiTTd5UkpNc29DajF2WWJuRlFWclc5amFrM09sRUozcy85NitwMzNkRVBSVjVHeGlxYUdqSXRoVVU2RkZFWnlxQ2E1cUpycEJkelN3OTVJVW5PUElyQ1VValJaUUZyYnc1UFIwUjFxaVl4M2NiNm5yV1VNckJtbWlCUXhWSHRUZXc1SUNQL2lwNmc0aGVkL0Frb2IvMzJ3dkJIc0lPWDgzY0k4aEdlTmVOUENJa1BtWGU4ZlBLeDg0T01TUk0xTVRkWFN3akNaNFMzMGpWR2h2cVRSYWsvT1ZoZ0dhekh1T0N1ZDVvbkVPMWxKcjZlY1Z5YU9LNkg3enFsQmxJYUhFMG9yb0NnZnZHSklkUGNtZkxOR0xqcHo3aFp3WlFwVWJGTUUwQTFjSUphN1ZOT1JrZ2ZzTUJhdGJLZ3d3Sk05YlN2UVhlTk92YklqZWxnNldXdm81a3ZiS2FKSk5IZXhrS05ITDl4UnlGbEg4VGkycmlCNXdWUGhVazduR2tKbm9DZTQyOExSL3dSR2RZSWxtV2ViQ3l4b3UxckNrNGcvU2h1Z0JEWDBWMFpRV2toMGRPVnNhZ2tNMHlWNk9vTGQ1eWUrcFJsc0NyMG4rS2lRckd1cTV5SkR6clRBWEh0TFVNZHVUREJWS3JTbTNlSEwrNmlqeGhGRFg5WjVnVlUvd2xpSFlUTWlNRnBLTE5NRXl3dTgwd2QzbWVvRm10NlZiUk1QZW5ock9jNkRWZTRwZ1hVOERubkhha0xPSUlybEY0RlpQSXc2Uit6eEJQMGR5cTZPT1o0UTVzTEtDY3owODRvaytWc01NeVFoTlptbUJnWDV4SVhPRUpUbWk3VnNHVHZNVE5kSEhocHpkYkU4RHUyb0t4Z3ZCcVFLZEREblRGT3lsQ0ZheFIxc3l6Mmlxck9JL0ZFcE5jM0M2ZjExLzcrQVNTNmwyaW5xMmNpVHJDQ3pneWVtckNMNVNWUGpRa2RQWlVtR3kyYzlTdzlGdFIxc1MzMFJtc0tQQ1M0cmtJQy8yVTBNZHV3dWNZb2xHYVBqS0V5aHptaVBZWGFneVdiWXo4TFdCRGR6UmltQVh6eHg0ejhLOWhwemxoTHErTmlROTdIdUtvck1VZksvT1Z2QzJKZmlIVVBDUUkvcTdKMmdqSyt0VEROeGtDYzRUTXNzcUNzNFRHdExWd1FpaHlvQVdnajlib3NVODBYR1c2QWM5VEpHemlhVWg1K2huRmNIT25sYU0xaVJuMjlOYXFHRU5UVFRTVUhDSDJ0V1RlVjBvc1VoSDZwc3VWTGpSVW1HV2htNk9aRXNoR2VOb3dBQkhjSjJCcHkyWnN6UmNLa1JYZDJRdUtWRWVYbmJmYUVxODI1Rmd1cWZnZkUyd2hsQ2hTUk1kcm9uK0xBVFRQUTJaMzY5dDRCOUM1Z3MveWx6ditDTW1lcElEUGNsRlFsMTNXMHJzcFBkMUpPY2JnaEdPRXV0cUN2NXFhY1VSUWwzZERLeXZ5SmxxS1hHUGdjTTlGZmF3SkFNVm1kY3NwY1lLT1pjNEdqRFlrRmxLMDVvbE5NSHlIbjR6Rk55a3lPeHQ5OVJrSGxmd21pSG82MGwyRUtJK21ocmVFS3AwODBUYnVnMDhCVlBjZ29xQzV6V3QrTkxEVFo3b05TRjUxTjFxaWU3VmEzdUNDd3laYmtJTmYvTkVENmp6T3NCZFpqRk44b3FHM3d4VnVucUNTWVlLZjNFZGhKeWY5WVdHZjd0UlUyb0gzVkhnUHIxZmU1SjloT2dIZDd4UTB5N3FCd1hyMjNhR0VyUDBjbTY0SlZqWndzT0dxTCttaE5nWm1oSkxXMm9ZNFVoZWRzeUJnenJDS3JxN0JtY3BOVmhSNmpCUHE2NFZnaStrbjZYRTY4cHA4SjUvKzB3UkhHT3BzS2VuUW45RFpudFB6alJMWnBEQWREMmZuU2drRzl0bUlYblV3UTZXVmlnaHM3WWkyTXhRME4zQ3FZYUNYa0owb3lPenRNREpqbVNTcGNwdmxyazBSTU1Pam1BclEwNFBSVjFETzFGd2hDVmFVVlBwS1VNMDNKSzVTeFBzSVdSdTgvQ0dIaThVSENoaXFHRkRUYlNSSldlWVVERGNINnZKV1V4UjRrMUZYYk1Vd1Y2ZTRBSkZYUzhvTXFzWktxenZZUTlERFFkWmNrWTRhR3NJaHRsdWJiZDJyM2o0UUJNb1RhbWRQWms3Ty9CZjYybGFjWnduZU5qUW9HY2RWVTd6Sk9kN2doc1VIT2tvc2FnaWM2Y25XYzgrNGdnMjg1UjZ6WlA1czEvTFViQ0tJem5Ud0szNlBrZHdsT3JsNFUxTHdmZENDYStJcnZGa21ndzFQQ0FVWEtXbzBzVVJYV2NJMm11S0psZ3lGemh5bkNZNFJCT3NxQ2pvSTFSNXpSRWNvMG4yVnQwOUJRdFlTaXpnS05IZlVtVXJRNVVPQ2g1MUJGY0xtWTd1bWhZcVhLUW9tT29wOGJVbldOTlFjSWlCY1lhQzZ4ek1OT1M4SlFRZmVxS0JtbWdsQis5N29rL2xmazN5Z2FIU3laYUNSVHpSeFFvNkd6TGZhMmpXQlBlcHcrVW1UN1NRRUp5aXlSa2hCTE1WT2Zjb01qY0swZVpDaGZVTnpGQVV6Q3NFTjV2UC9YMXVQL24vYW9NWCtLK253L0hqci85eE9vN2o3UGp1NjF0TGNndkpwVFdYTmJmTjVqTHBpNlZmQ092aVRrdEtsRnVzUWl4ZEVLV21FQlVLTmFJcGpaUlNTT1hTZ3phYUtMZGFicm0xLzluWisvZit2ZC92ei92OStYeSt6WjdQUm9yWW9acXlMckN3UWRFQWl4eFZPRVhOTm5qWDJuVVNSbGtxR21Xb3drOGx4UjUwSlB5OUJvNnFKWGFYd052UkVCdm5UaFBFUHJld3J5TGhjQW5qNVdFMTVGcWk4VzdSMXNBdUV1ODZTNEVOaWtJdEZONHhrdjlBZjRuWFNuVVZjTGlBOXh6ZXNGcGl2UlJWZUZLdHNNUmFLQmh1U2JqT0VMbkFVdGxTUVVwWGdkZkI0WjFvU2JuRkVldGJRMElyQWUrWStwcW5EY0VKRmo2UzhMRFp6Wkh3WTRlM1hPTk5sQVJyYW9tTkV0MmJrdkdzb3NBM2lveUhtKzZqQ01iSTU5d3F0NGVlYXJhMjhJekVteVBnb1JhVU9FRGhUVmRFSmhtQ29UV2ZDMHA4YU5rQ3Awb1lxaWgyaXFHaTR5WGVNa09zbjRMZExMbm1LZmgvWW9nak5zUGViZUZHUjRtOUJKSEx6QjYxWFEzQnRwSVNmUzJGdWdzSzlGQXRMV1gxZENSY3JDblVwNDRDTnp1Q293VVpteFNSZ1lhRTZaYTBXMnUvRTdDVlhDaUkvVU9SOGFBbTErT1N5RTNtT1Vjd3ljMXpCQmVvWDFraUt5MFpmeGNrMUdzeXVsdGkxMWk4M1FUQkY1S2czcERRVGhGTVZIaVBTbEsrMGNTZWRuZy9WYVM4Yk9aYnRzQmNUY1pBUjhKUDVLZXFRMU9ZS0FpMjBuamROTlJwZ25zVS8vSytKbmFYSmFHVG9tcjdhWUlwaG9SbjlhZVNoSldLRXE5TGNvelNGN1FsZUVmREk1TFltNWJnVmtGa1J3VkRCQ1Z1MERESWtHdXBvOFRaQnErL3BNUVVSWUVySlFtUEtHS2pORGtXT0x4N0pkNVFpemRVd2VJYUtybFA3U3dKRGhadk9OakxrT3NCQlg5VXBHeG55ZGhYa2ZCTFE4SXhnb2pRYkxGbkpmODFKeXRTbGpjbFlZeUVGeXgwa1ZCdktXT0ZKbU9OcHNoR0Fjc2R1UVk1Z2lWTkNWNTFlT2RKWW8vcExoYnZNMHVESFNldk5LUmNyS1pJcW5DdEplRXNPOTVSb3FjZ0dLNG9jWmNobzF0VFl0Y1p2SDQxcE5RN3ZBMFdyaElmT1NyYUlJbnRJQWkrTlhXQ0VyZGJrdnJXd2pSTHJ0ME5LVWRMNktTT3NjVE9kTVNPVXRCSHdMNk9MQTB2TlNkeW5hV1FFbkNwSXZLYUlySkpFYnZIa211TmhuNk9qTThWa1NHU3FuMXVZSkNHSG5xOUkzYUxoTk1FM3Q2R2pJa083eHJORnVtcHlUTlgvTnJ3WDdDcklSaXFxV2lqSTlKTzRkMWlpZXlreWZpcG9zUUlROFlqanNqbEJoNm9IV2J3UmpnWUpRbjJOZ1NuTnljbUpBazNOaVhoeDQ0U3h5a2loeG04eWJVd1QxT1ZLeVNjN3ZpM09YVmtkQko0QXlYQmVrc0RYRzBJaGd0WVkwbFk1YWhDRDBlaGJvcklrNWFVV1JKdmlNQTdYdDVreVJqb25yWEVOa204eVlxZ3M4VnpnckptQ2xLMjB1TU0zalJKMEZpUUlDUUY5aGRFVGxMUVdSSWI1a2k2V0RmV1JQb2J2TzZhNEdQNW1jT3JOekRGRUx0VGtPTkxoOWRYRTh4eXBFZzd6OEE5amtoclE2RmhqbGcvUVZrdEpYeHQ0V1h6VC8wM1E4SWFRV1NxSXVFdmxvUTJtcUM5SmZpN3dSdWw0UlgzcFNQbHpwb1ZsbUN0STJqdktIQ0ZoamNNM3NONmxxRjZIeG5LZWxMalhXYndycFI0eHp1Q3JUVVp4MnFxOW9BaDhwNml4Q1VHcjc4ZzhveWpSQXRCNUNaRndpODBWZXJWcEkwaCtJZUJ4YTZaZzZrV3ZwREhhaW9ZWXVFc1JiREMzZU9tQzJKdkdZTGVpb3hHa25MMlVBVE5KTjZobXRqMURscEx2RFZtb2NZYnJHQ1ZKS09yZzRYNkRnZGRMQTIwM0JLTUZuZ2RKSkZ0RmQ3dkpMbTZLRXBjNXlqUXJrazdNODBTR2UzNFgyNG5TZXgxUmE1T21nYjcxSkt5ZzhTclUzaS9rQVJLd1dwSDBrT0doS2tPYnlmZDBaR2p2eVhsQWtWWjR4UmJZSjJpckZNa0ZZMVN3eVd4cjJvbzR6bE5pVis3em1hd2VGcFQ0a1Iza2FEQUZXNnhwU3F6SmF5MDVGdFlSNEhtWmhjOVV4S2JiZkYyVjhSRzFNQm1TYUUra21DNkpuYVJYSzlnc2lYaEpIbC9VMHFNMFdUY2J5aHdrWUl2Rkd3alNiamZ3aGlKdDhaU1FVK0JkNSttYXJQTU9rVmtEMG11eFlMSWZFdWhoNjB4L0o5Mml0Z3VpaEpTRU15U1ZQUW5UZXduRW0rNjIwclRRRU1zT2ZvNC9rUC8wQVJ2V2ppdGxwU1g3R3hCZ2NNRXNkM0VFZVlXdmR5dGQrU2Fhd2k2YUNJajFDa0diNkFqOXJ3aHgxNkNmM3ZBd0Z5NXB5TGhWb25Yenk1MUZEcGRFYmxia2RKYlVjRVBERUZ6UThxTm1oenpMVG1tS1dLYkZDWGVFdVJhYnA2cnhidkF0TEY0NDJRalErd0VBOWVMMXhTUjdRMEpYemxTSGpKNGV4cTg5eVIwbGFTY0ovRlc2ejRhNzNwRk1FZkRpUlp2dXZpakl0ODZSYVNGT2wwMXJpVjJtRDFVRXZ4R2svR2VnNWFXd0draTF6Z0tQRzlKMlU4UEVnOHFZdk1zWmV5dGlUUlhCTXNsQ1U4SlNseGk4RWFiandVbGRsRE5MZnpUVW1DZ3hXc2pxV0NPSGF2WUFxc2tuS0ZJTzB5UTYxVkw1QVZGeGs2V2hFYUNBa2RKZ3Q5YVNrelhsS05YMmpFYTc5d2FZdWM3Z3EwTjNHREpHQ0Job2lUWFVFUHNka25DVUUxQ0swZndzaWF5bFNGMnVpRHlPNFhYM3BGaE5kN1I0aXRGR2Mway9FbEJad1d2cStHQzZzelZlRW9TL01aK3F5bHdwS05LdjlaNDY5VU9qcUNqd2x1c2ljeVR4RzZWcE54Y1E4SW5jb1I0UmhMYlIrTmRwR0dtSldPY0l6SkdVdUtQR3BRZzhyckcyMWRPTXFRc3NKUTRSeEg1amFVcW5adVEwRjRRK2NqeEx3UHRwWmJJQWszUVRKSFFXQkU1UzFCb2tvVnREZDZsaHFyOVVwSFNVeE1jSVlsOXBvanNiOGg0U0JPc01RY3F2T1dDMkU4RVZlaHFpSjFocnJBRWJReGVLME5HWjBHa3ErZ3VTUmduaU0yM2JJSFZrcXd4NGhpSGQ3c21hT3lnbHlJeVF1TTk3OGo0VlMwOEovQTJHMUtlTUJSbzRmQmFTTmhLVUVaZlFld1ZRL0MxSStNZ2ZiRWxlRXpDVXc3bUtYSTBNM2hkMUVFU1ZqaTh4NXVRNDFueHMxcTRSTUpDQ1hzN0lxOWFjcHhuMjJvU0RuUS9zSlR4c0NiSElZWmlMeWhZMDVUWTBaTElPUXJHYVNKRERONHQ4cFZhSXJzcXFGZEVlZ3RpemMxaVRldzVRNGF5QkRNVXNRTWtYb2NhWWtjMGhadWE0MTJzaVoxclNYbFI0NjB6Uko1U2xIR2U1ajgwMVJMTWxKVHh0YU9NM1ExcHZ4SjQ1elVsV0ZEN3JzQWJwZkVtMUpIeEcwZWg4dzJSN1FRVnpCVXcyOEZoRnA1UVp6cTh0MnJ4MmpvcXVsWVRXU3VKZFRZZld3cU1GTWNvdkZtU3lKUE55TGhFNEUxMHBIellqT0MzaHVBclJhNTcxWnNHYWpRcFF4MzhTQlA1cHlaQjZsTVUza2hEbnAwTUJWNTFCRTlvMkUrVFk1TWwyRThTN0MwbzZ3MXh2Q1pqZjBIa1ZFSEN6Rm95Tm1xQys5d2RjcU4rVHA3alNEaGVFOXdzOFk1VjBOSkNuMmJrMnRxU1k0b2tkckVoeDFpRE44Y1N1ZHdlcFdtQUdYS2NKWEs2NUg5dG84allRUkg3U0JGMDFFU1VKZGQwVGF5VkluYVdoTGtPamxYRTVpcktHT25JNkdTV0dDSmE0ODJ6Qkk5ckNyMGp5VFZjRXV6cmlDMXZjcjZtd0ZHU2lxeTV6TXd4QkgvVEpId2pTUGhMOCswMWthYVNVdU1GS1RjTEV2YVVlUGNyU213bjhEWnJnaWtXYjdDR1B4a1NqaFF3clJrNTd0Y3RteExzYjlzWnZMOUxTbHl1U0xsV2txT2p3ZHVvOGI2VXYxRGttdWRJZUZGMmRIQ2d4VnRrOGRwSXZIcEJ4aEVPZGhLazdPTElVU2RKK2NTUlk1N0IrMERnR1VVbE5mcHRoVGZHa2F1enhydlRzVVVhQ1ZobEtldGVUWENvSkRDYTJOT0toT21DNEcxSDhKQmQ0T0JaUmVTUkdrcWNiL0NPMVB5TEpUTEI0ajFxOEpZYUl1dEVqU0xYOFlLTSthNnBoZE1zZExGVW9WNVJUbTlKU2t1RE44V2NJb24wTlpNTlpXaDFxOEM3U0pFd1Y1SHhybW5uVHJmM0tvSkJsbUNZSTJpbFNMbGZFdmxFNDAxMU5OZ2pndGh6RXVhMG9LSzdKTEU3SFpIbEVsNjBCTE1WRmV3ZzRFV050MFRoclZORVZra2lUd3BLWFNXSnpkUkVOZ3ZLR3E0SWhqc2llemdTRnRzZkNVcThxa2k1UzFMUlFlWVFRNG5lbW1Da0ltV013M3RGVW9VQlprNE5PZVpZRXA0WFJLVEdhNndKanJXTkhCVkpSNG0zRkNuYnVENmFhazJXc01UaDNTWkltR0NJUEtOZ3NEcFZ3bnNhNzBLMzFsQ0ZKWlljd3dTTUZjUXVsR1RzWnVFYVNkQlhrUEdaaHUwRnNkVU83M1JIanE4TVBHR0lmYUdJYlZUazZpdUkzR0ZndWNIcklRa21XU0pkQmQ3QkJ1K3VPcnlXQWhZNytMa2k5cks1d3RFUXpXd3Z0YnFHaElNRndXUkpzRWxzWTRtOUlJZzlMNmxDWDBWa2xhUEFZa2ZrWkVHRG5PV293bEJKanRNVWtjR0s0TGc2RXRvWkluTVVCVllMZ24wVXNkbUN5Q3o3Z0lHSEZmaytrMVF3VGg1V2U3QTl4K0lkSjZDdklrRWFnbXMwaFI1MGVIOVVuVFFKKzJvaUt5VmxMRlVFKzhnQkd1OE1RM0NwcFVIZXNualRITjRRQi9VR1BoQ1RITEZQSE1GckNxYTczZ3FPYlVKR2EwM3dnYmhIa3JDZnBFcHpOTEU3SkRTMjVGTUtobGhLS1dLZkNncXN0TENQdTF6Qlh5MEoyenR3anRpeEJ1OFVUUm45TFZ0a21DTjJpeUZodE1FNzBKSFJRMUtWWlhxS0kvS05JS1lNQ1lzMUdVTUVLYk0xYktPSTlMRFhDN3piSFMrYnQrMU1UV1M5b2RBOUR0cll0cGJJbVFKMlZIaC9saXNFd2FIcVVrMWtqS1RBS2tua0JFWGtia2RNR3dxMGRuaHpMSkYzTkpIM0pWd3JxT0I0U2NhMmh0aTc1bm1KTjBXenhTNlV4RFlvRXB4cGE0aHRWbFJqa1lFN0RaR3pKVlU3MnVDOUl5aFFMNGk4WWZHV1NZTExOY0hYbG95ejdRaE5pZm1LU0U5SmdmR211eUxoYzQwM1htOXZxY3A2Z1hlM3h1dXY4RjZWSk54a3lUSEVrSEcyZzBhS1hMME1zWGMxYkdmZ2FzMi8vZENPTlhpTkxDWCs1bUI3ZVpJbDFrSGg3YWp3cGlreXpsVVVXT1ZPc2pTUWxzUytNMFIrcFBqZS9kekJYUlpHTzByTXRnUXJMTEc5VlN1OW42Q01YUzNCaHdZbVNvSUJoc2pOQm1aYmd1c0U5QkNQQ1A1dHJpVTRWaE5iSmZFK3N3U1AyN2FheUU4dHVUcFlZanRyWWpNVkdaZHAyTnBTMXM2YUJuS1NIRHNiS3VwbEtiSE00YTB3TUZkLzUvRG1HeUtySlNVYVc0SUJycVVoeDB2eWZ6VEJCTFBJVWNuWmRyQWtOc0tSMHNXUnNwdW1TbnM2Q2gwdi9xcUliQllVV0t2UFUvQ0ZveXJESkd3U05GaGJBL01sektxanJPODBoUmJwS3gwSmV3c2kvU1RmdHdHU2xLYzFKWnlBengwNWRoTEVkbmZRdmhaT3FpSFdXRUFIQzcrMzBGdVJjWlVnYU81Z3BhSUsreHNpSFJVc3FhUEVsVFY0MHhRWlExMDdROUJaRTFucnlEVkdVOVpTUTQ3Ym1oQnBMY1lwVXQ3Uyt4dUsvRmlUOHFLandYWXc1eXBTMml1Q3Y3cTFndGdqaHVCdUI4TENGWTVjVXVDTnRzUU9GY1QrNEloOUpYK2s4RWE2djBpQ0lSWk90Q1QwRXQwMEpXNVVlQzg1Q2cwU2NLMGs0MTFIY0cxekt0cmUzU2VJVEJSazdXZndEaEV2YVlMVEhQOWxlMG04QnkwSkR3bjRUbExXL2FKT3ZHSHhkallVZXMrU2NaaWdDa1lRZE5kRU9oa2llemdTaHFreDh1ZUtqSThsRGZLMm9OaU9GdnJaSDFoUyt0azdOVjduT21MSGljR1dFZ3Via1hLZHdkdFprbkNMSlhhQ3BrcmpaQnRMWkZzRFA5Q2R4V3NTcjA1U3hsNkNNbW9GYkNPZ3J5WDQwdUR0YW1CN1NWbVhXNElobGdwbXErMDB0QktVVWE4M1diakxVTmt6RG1ZN2NvdzFKRHlneVBHbGhnR0tZS3o0dmNWN1FCTmJKSWdNMTFUVXFaYU1kd1RlU2d1SDZyT2F3MUpSS3phYUd5eFZtMkVKL3VDSXJWV1VjWlVrY3AyZ3JNc0VqSytETXdTNTlqUWszS2Q2U0VxMWQwUzZ1Vm1PNEJjMWxEWFRVY0hqbHVDWEVxKzFPbEJEajFwaTl6Z2lYeG5LdUUwU3FUWHdocWJFVFc2UmdnTUVuR2wvcTQ5VVQyaUN6Z0p2UndWWFMySy9kNitaa3lVbDdqYXdTVkxpdDQ2RXd4VmxqRFp3b1NRMjBzREJpaHp0SGZrMnlBOE5WWmdoaVh3cllIUWRmS0FPdHpzYXlqaFk5YlkweUUyQ1dFZUo5eGZ6TzQyM3hoTDVzeVMyVEZKb2ZPMnBib0hvYjBuWTRHaUFnUnJ2R1FFRGEvRldTc29hYVlsMHN5UnNFdDNrV29IM0IwMXNoQ1hoVFVXZTl3M0J0NDRTQzlRQ2gzZVNoUWN0d2JhSzJBcExyb0dDTWxacllxdmxZM3FZaE0wYVhwRmtQT3VvcUozRG02ZnhYckd3VkY5Z0NXWmFnalBxem5ma3VNS1E4RFBUUVJPOFpxRzFoUEdLRW05SWdwR1c0RFpEZ1ROcmlUeHZGaXErTHorMGNLZnA0d2o2T0NLOUpTbnpOU245TEZVN1VoS1paTW5Zd2NKOHM4eVJzRUNTY0s0ajVVT0I5NUhGTzBDemhZNHhKeHVDaXgwbERsRVVlTWRTNkVaQmtUc1VrWjRLNzRkdWd5VFhTN2FOZ0w4YXFqRGZrQ0UwWmJ3a0NYcGFXQ0tobDhQN1ZENWp4eWtpdlN5eHlacllFUmJlMTY4TFl1OVpZaDg2SWtzY2dWTEU3dFdQS21KdjExQ2dveUpsdE1FYnJvaHRWQVFmTzRJbWx0aUhFcm9ZRXM3UnhBYXJWcFk4QXdYTWNNUmVGT1RZV2U1aWlMUlF4SjVROER0SjhMUWhXT2hJZUZFU1BHc0lMaGJORFJsak5iSHpOUmxURmJrMlMzTDBOT1M2VjFLRkpZS1ViU1RjSUloTTB3US9zMlRNMFNSTU5jUW1TYXAzakNINHloSlpLU2t3eVJIcFlZZ3NGZVE0VTd4b0NCN1ZWT0V4aFhlcG85QUJCc1lidkdXS1hQTUUzbHlIOTVZaW9aMGdzc1FSV1diSStGYVNNa1hpalpYd2dpVGxZZFBka05MYUVUeGx5RFZJd3FlYUV1czBhVGNZY2cwUlZPa3BSM0NTSnFJZGRLKzkwSkN4enNEVmxveXJGZDVaQXI0VEJLZmFXYTZib0VBN0M3czZFcFlhZUZQanZlb29ZNzJtakljY0xISjlIVXdWbERoS2ttdXRKREpCd25wMXJ2dWxKWmdnS0RSZmJYQWt2Qy80bDNvelFPRzlhOGx4angwaTduVjRqU1hjN3ZoZTNPd0l4amdTSGpkRWhoc2lmOVlrUEdsdXMzaUxGRG5XT0ZodENaYkpnMFViUWNJYVI2N0pqdGhvQ3lNRVpSd2hpWFd5eE81UXhJNnc1TmhUNFUxV3NKdkRPNjBKMzRmVzlod3p3bEtpajZaQVc5bmU0TDBzOEM2WGVCTUVrZC9MUXkxVnVjQlJvdDZRTWxiaXZhQmhvQmdqcUdpQ0pOaHNxVnAvUzJTc0c2RElPTkNSMGRYaHZXYkorTVJSWkpra3VFamdEWEpqRlFXNlNTTDdHWEs4WjJDWmc3Y1ZzYldHb0ttRXB6UTVlbHBpeThSeWc3ZE1rTExVRWF1emVPODZDdXdsU09sZ1lMb2paV2VKOXhNM1MxUFdmRWZLbDVJU0xRME1FS1I4WU9CMlFmQ3hKQmpyS1BDTjRmOU1rYVNzcW9WWEpCbVA3RXBGWjlVUWZPb09Gd1N6Qk40TVE4THNHcnltbGlwY0pRaG15MEdhUWpQcUNIYVhSd3VDWndSYnFLMkZnOXdsQ2xacVlpY3JJZ01kWmZ4VFEwYzdUQklickNoeG11em9LRzhYUmFTckloaGl5TkZKa3JDN29JQVdNRU9RYTVhQmVrUENSa25DbzRJS1ByWWt2Q0RJOGFZbVk3V0Z0cHJnZWtjSlozb0xJcXNzQ1NNdEZiUVRKS3dYWXkzQlk1b0NoMmlLUENwSk9FK3pSZHBZZ2k2TzJLbU9BZ3ZWQ1lhVTR5U1JlazFzZ3lGaEo0MDNRRkhpVkVtSkh3dHliTzFnczhIcjUrQkVUUVgzV2FyMHFabmdZR2d0Vlp0b3FkNnZGU2svVXdkWkVsWXF5anJGNEhYVWVGc3BJaTlJR0tmNGo5MnBLR0FkQ1lNVnNiY1Yza1JGME4rUjhMVWQ1UENzSUdXb3hEdEJrQ0kwbktvZmRKUXhUK0x0WmZsdnVjOFEzQ2p3V2txOEt3VXBIemtLL05tU3NjbENMMG5zZVFkajVGUkg1Q05IU2d0TGlXODBPZjVIVTlIaGxzZ2E5Ym5CcTNmRVZsdEtmTzVJYVNUbUdqamM0SjBvdGNQN1FzSlVTUU04cEVqNS93Q3VVdUMyRFd6OEFBQUFBRWxGVGtTdVFtQ0MiKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/blackboard.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogUG9ydCBvZiBUZXh0TWF0ZSdzIEJsYWNrYm9hcmQgdGhlbWUgKi8KCi5jbS1zLWJsYWNrYm9hcmQgeyBiYWNrZ3JvdW5kOiAjMEMxMDIxOyBjb2xvcjogI0Y4RjhGODsgfQouY20tcy1ibGFja2JvYXJkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogIzI1M0I3NiAhaW1wb3J0YW50OyB9Ci5jbS1zLWJsYWNrYm9hcmQgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzBDMTAyMTsgYm9yZGVyLXJpZ2h0OiAwOyB9Ci5jbS1zLWJsYWNrYm9hcmQgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogIzg4ODsgfQouY20tcy1ibGFja2JvYXJkIC5Db2RlTWlycm9yLWN1cnNvciB7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0E3QTdBNyAhaW1wb3J0YW50OyB9CgouY20tcy1ibGFja2JvYXJkIC5jbS1rZXl3b3JkIHsgY29sb3I6ICNGQkRFMkQ7IH0KLmNtLXMtYmxhY2tib2FyZCAuY20tYXRvbSB7IGNvbG9yOiAjRDhGQTNDOyB9Ci5jbS1zLWJsYWNrYm9hcmQgLmNtLW51bWJlciB7IGNvbG9yOiAjRDhGQTNDOyB9Ci5jbS1zLWJsYWNrYm9hcmQgLmNtLWRlZiB7IGNvbG9yOiAjOERBNkNFOyB9Ci5jbS1zLWJsYWNrYm9hcmQgLmNtLXZhcmlhYmxlIHsgY29sb3I6ICNGRjY0MDA7IH0KLmNtLXMtYmxhY2tib2FyZCAuY20tb3BlcmF0b3IgeyBjb2xvcjogI0ZCREUyRDt9Ci5jbS1zLWJsYWNrYm9hcmQgLmNtLWNvbW1lbnQgeyBjb2xvcjogI0FFQUVBRTsgfQouY20tcy1ibGFja2JvYXJkIC5jbS1zdHJpbmcgeyBjb2xvcjogIzYxQ0UzQzsgfQouY20tcy1ibGFja2JvYXJkIC5jbS1zdHJpbmctMiB7IGNvbG9yOiAjNjFDRTNDOyB9Ci5jbS1zLWJsYWNrYm9hcmQgLmNtLW1ldGEgeyBjb2xvcjogI0Q4RkEzQzsgfQouY20tcy1ibGFja2JvYXJkIC5jbS1lcnJvciB7IGJhY2tncm91bmQ6ICM5RDFFMTU7IGNvbG9yOiAjRjhGOEY4OyB9Ci5jbS1zLWJsYWNrYm9hcmQgLmNtLWJ1aWx0aW4geyBjb2xvcjogIzhEQTZDRTsgfQouY20tcy1ibGFja2JvYXJkIC5jbS10YWcgeyBjb2xvcjogIzhEQTZDRTsgfQouY20tcy1ibGFja2JvYXJkIC5jbS1hdHRyaWJ1dGUgeyBjb2xvcjogIzhEQTZDRTsgfQouY20tcy1ibGFja2JvYXJkIC5jbS1oZWFkZXIgeyBjb2xvcjogI0ZGNjQwMDsgfQouY20tcy1ibGFja2JvYXJkIC5jbS1ociB7IGNvbG9yOiAjQUVBRUFFOyB9Ci5jbS1zLWJsYWNrYm9hcmQgLmNtLWxpbmsgeyBjb2xvcjogIzhEQTZDRTsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/cobalt.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtY29iYWx0IHsgYmFja2dyb3VuZDogIzAwMjI0MDsgY29sb3I6IHdoaXRlOyB9Ci5jbS1zLWNvYmFsdCBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNiMzY1MzkgIWltcG9ydGFudDsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzAwMjI0MDsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogI2QwZDBkMDsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItY3Vyc29yIHsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZSAhaW1wb3J0YW50OyB9CgouY20tcy1jb2JhbHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICMwOGY7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tYXRvbSB7IGNvbG9yOiAjODQ1ZGM0OyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLW51bWJlciwgLmNtLXMtY29iYWx0IHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICNmZjgwZTE7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20ta2V5d29yZCB7IGNvbG9yOiAjZmZlZTgwOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLXN0cmluZyB7IGNvbG9yOiAjM2FkOTAwOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLW1ldGEgeyBjb2xvcjogI2ZmOWQwMDsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS12YXJpYWJsZS0yLCAuY20tcy1jb2JhbHQgc3Bhbi5jbS10YWcgeyBjb2xvcjogIzllZmZmZjsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1jb2JhbHQgc3Bhbi5jbS1kZWYgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tZXJyb3IgeyBjb2xvcjogIzlkMWUxNTsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICNkOGQ4ZDg7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tYnVpbHRpbiwgLmNtLXMtY29iYWx0IHNwYW4uY20tc3BlY2lhbCB7IGNvbG9yOiAjZmY5ZTU5OyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzg0NWRjNDsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/eclipse.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWNsaXBzZSBzcGFuLmNtLW1ldGEge2NvbG9yOiAjRkYxNzE3O30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWtleXdvcmQgeyBsaW5lLWhlaWdodDogMWVtOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICM3RjAwNTU7IH0KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWF0b20ge2NvbG9yOiAjMjE5O30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tZGVmIHtjb2xvcjogIzAwZjt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDAwMEMwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMDAwMEMwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjogYmxhY2s7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tb3BlcmF0b3Ige2NvbG9yOiBibGFjazt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogIzNGN0Y1Rjt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjMkEwMEZGO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2NjNzt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS10YWcge2NvbG9yOiAjMTcwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tbGluayB7Y29sb3I6ICMyMTk7fQoKLmNtLXMtZWNsaXBzZSAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewoJYm9yZGVyOjFweCBzb2xpZCBncmV5OwoJY29sb3I6YmxhY2sgIWltcG9ydGFudDs7Cn0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/elegant.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWxlZ2FudCBzcGFuLmNtLW51bWJlciwgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXN0cmluZywgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWF0b20ge2NvbG9yOiAjNzYyO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiAjMjYyOyBmb250LXN0eWxlOiBpdGFsaWM7IGxpbmUtaGVpZ2h0OiAxZW07fQouY20tcy1lbGVnYW50IHNwYW4uY20tbWV0YSB7Y29sb3I6ICM1NTU7IGZvbnQtc3R5bGU6IGl0YWxpYzsgbGluZS1oZWlnaHQ6IDFlbTt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjYjExO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQouY20tcy1lbGVnYW50IHNwYW4uY20ta2V5d29yZCB7Y29sb3I6ICM3MzA7fQouY20tcy1lbGVnYW50IHNwYW4uY20tYnVpbHRpbiB7Y29sb3I6ICMzMGE7fQouY20tcy1lbGVnYW50IHNwYW4uY20tZXJyb3Ige2JhY2tncm91bmQtY29sb3I6ICNmZGQ7fQouY20tcy1lbGVnYW50IHNwYW4uY20tbGluayB7Y29sb3I6ICM3NjI7fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/erlang-dark.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZXJsYW5nLWRhcmsgeyBiYWNrZ3JvdW5kOiAjMDAyMjQwOyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtZXJsYW5nLWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjYjM2NTM5ICFpbXBvcnRhbnQ7IH0KLmNtLXMtZXJsYW5nLWRhcmsgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzAwMjI0MDsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy1lcmxhbmctZGFyayAuQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7IGNvbG9yOiAjZDBkMGQwOyB9Ci5jbS1zLWVybGFuZy1kYXJrIC5Db2RlTWlycm9yLWN1cnNvciB7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGUgIWltcG9ydGFudDsgfQoKLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1hdG9tICAgICAgIHsgY29sb3I6ICM4NDVkYzQ7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUgIHsgY29sb3I6ICNmZjgwZTE7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1icmFja2V0ICAgIHsgY29sb3I6ICNmZjlkMDA7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1idWlsdGluICAgIHsgY29sb3I6ICNlZWFhYWE7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1jb21tZW50ICAgIHsgY29sb3I6ICM3Nzc3ZmY7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1kZWYgICAgICAgIHsgY29sb3I6ICNlZTc3YWE7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1lcnJvciAgICAgIHsgY29sb3I6ICM5ZDFlMTU7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1rZXl3b3JkICAgIHsgY29sb3I6ICNmZmVlODA7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1tZXRhICAgICAgIHsgY29sb3I6ICM1MGZlZmU7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1udW1iZXIgICAgIHsgY29sb3I6ICNmZmQwZDA7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1vcGVyYXRvciAgIHsgY29sb3I6ICNkZDExMTE7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS1zdHJpbmcgICAgIHsgY29sb3I6ICMzYWQ5MDA7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS10YWcgICAgICAgIHsgY29sb3I6ICM5ZWZmZmY7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS12YXJpYWJsZSAgIHsgY29sb3I6ICM1MGZlNTA7IH0KLmNtLXMtZXJsYW5nLWRhcmsgc3Bhbi5jbS12YXJpYWJsZS0yIHsgY29sb3I6ICNlZTAwZWU7IH0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/lesser-dark.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKaHR0cDovL2xlc3Njc3Mub3JnLyBkYXJrIHRoZW1lClBvcnRlZCB0byBDb2RlTWlycm9yIGJ5IFBldGVyIEtyb29uCiovCi5jbS1zLWxlc3Nlci1kYXJrIHsKICBsaW5lLWhlaWdodDogMS4zZW07Cn0KLmNtLXMtbGVzc2VyLWRhcmsgewogIGZvbnQtZmFtaWx5OiAnQml0c3RyZWFtIFZlcmEgU2FucyBNb25vJywgJ0RlamFWdSBTYW5zIE1vbm8nLCAnTW9uYWNvJywgQ291cmllciwgbW9ub3NwYWNlICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWxlc3Nlci1kYXJrIHsgYmFja2dyb3VuZDogIzI2MjYyNjsgY29sb3I6ICNFQkVGRTc7IHRleHQtc2hhZG93OiAwIC0xcHggMXB4ICMyNjI2MjY7IH0KLmNtLXMtbGVzc2VyLWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQge2JhY2tncm91bmQ6ICM0NTQ0M0IgIWltcG9ydGFudDt9IC8qIDMzMzIyQiovCi5jbS1zLWxlc3Nlci1kYXJrIC5Db2RlTWlycm9yLWN1cnNvciB7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGUgIWltcG9ydGFudDsgfQouY20tcy1sZXNzZXItZGFyayAuQ29kZU1pcnJvci1saW5lcyB7IG1hcmdpbi1sZWZ0OjNweDsgbWFyZ2luLXJpZ2h0OjNweDsgfS8qZWRpdGFibGUgY29kZSBob2xkZXIqLwoKZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7IGNvbG9yOiAjN0VGQzdFOyB9Lyo2NUZDNjUqLwoKLmNtLXMtbGVzc2VyLWRhcmsgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzI2MjYyNjsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjYWFhOyBwYWRkaW5nLXJpZ2h0OjNweDsgbWluLXdpZHRoOjIuNWVtOyB9Ci5jbS1zLWxlc3Nlci1kYXJrIC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsgY29sb3I6ICM3Nzc7IH0KCi5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20ta2V5d29yZCB7IGNvbG9yOiAjNTk5ZWZmOyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tYXRvbSB7IGNvbG9yOiAjQzJCNDcwOyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tbnVtYmVyIHsgY29sb3I6ICNCMzVFNEQ7IH0KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1kZWYge2NvbG9yOiB3aGl0ZTt9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tdmFyaWFibGUgeyBjb2xvcjojRDlCRjhDOyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tdmFyaWFibGUtMiB7IGNvbG9yOiAjNjY5MTk5OyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tdmFyaWFibGUtMyB7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjogIzkyQTc1Qzt9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tb3BlcmF0b3Ige2NvbG9yOiAjOTJBNzVDO30KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICM2NjY7IH0KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogI0JDRDI3OTsgfQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tbWV0YSB7IGNvbG9yOiAjNzM4QzczOyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tZXJyb3IgeyBjb2xvcjogIzlkMWUxNTsgfQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLWJ1aWx0aW4geyBjb2xvcjogI2ZmOWU1OTsgfQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLWJyYWNrZXQgeyBjb2xvcjogI0VCRUZFNzsgfQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLXRhZyB7IGNvbG9yOiAjNjY5MTk5OyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHtjb2xvcjogIzAwYzt9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20taGVhZGVyIHtjb2xvcjogI2EwYTt9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tcXVvdGUge2NvbG9yOiAjMDkwO30KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1ociB7Y29sb3I6ICM5OTk7fQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLWxpbmsge2NvbG9yOiAjMDBjO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/monokai.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogQmFzZWQgb24gU3VibGltZSBUZXh0J3MgTW9ub2thaSB0aGVtZSAqLwoKLmNtLXMtbW9ub2thaSB7YmFja2dyb3VuZDogIzI3MjgyMjsgY29sb3I6ICNmOGY4ZjI7fQouY20tcy1tb25va2FpIGRpdi5Db2RlTWlycm9yLXNlbGVjdGVkIHtiYWNrZ3JvdW5kOiAjNDk0ODNFICFpbXBvcnRhbnQ7fQouY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWd1dHRlciB7YmFja2dyb3VuZDogIzI3MjgyMjsgYm9yZGVyLXJpZ2h0OiAwcHg7fQouY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHtjb2xvcjogI2QwZDBkMDt9Ci5jbS1zLW1vbm9rYWkgLkNvZGVNaXJyb3ItY3Vyc29yIHtib3JkZXItbGVmdDogMXB4IHNvbGlkICNmOGY4ZjAgIWltcG9ydGFudDt9CgouY20tcy1tb25va2FpIHNwYW4uY20tY29tbWVudCB7Y29sb3I6ICM3NTcxNWU7fQouY20tcy1tb25va2FpIHNwYW4uY20tYXRvbSB7Y29sb3I6ICNhZTgxZmY7fQouY20tcy1tb25va2FpIHNwYW4uY20tbnVtYmVyIHtjb2xvcjogI2FlODFmZjt9CgouY20tcy1tb25va2FpIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1hdHRyaWJ1dGUge2NvbG9yOiAjYTZlMjJlO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjZjkyNjcyO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLXN0cmluZyB7Y29sb3I6ICNlNmRiNzQ7fQoKLmNtLXMtbW9ub2thaSBzcGFuLmNtLXZhcmlhYmxlIHtjb2xvcjogI2E2ZTIyZTt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogIzllZmZmZjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1kZWYge2NvbG9yOiAjZmQ5NzFmO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWVycm9yIHtiYWNrZ3JvdW5kOiAjZjkyNjcyOyBjb2xvcjogI2Y4ZjhmMDt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2Y4ZjhmMjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS10YWcge2NvbG9yOiAjZjkyNjcyO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWxpbmsge2NvbG9yOiAjYWU4MWZmO30KCi5jbS1zLW1vbm9rYWkgLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/neat.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtbmVhdCBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogI2E4NjsgfQouY20tcy1uZWF0IHNwYW4uY20ta2V5d29yZCB7IGxpbmUtaGVpZ2h0OiAxZW07IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogYmx1ZTsgfQouY20tcy1uZWF0IHNwYW4uY20tc3RyaW5nIHsgY29sb3I6ICNhMjI7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLWJ1aWx0aW4geyBsaW5lLWhlaWdodDogMWVtOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwNzc7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXNwZWNpYWwgeyBsaW5lLWhlaWdodDogMWVtOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwYWE7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXZhcmlhYmxlIHsgY29sb3I6IGJsYWNrOyB9Ci5jbS1zLW5lYXQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLW5lYXQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICMzYTM7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLW1ldGEge2NvbG9yOiAjNTU1O30KLmNtLXMtbmVhdCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzNhMzsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/night.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogTG9vc2VseSBiYXNlZCBvbiB0aGUgTWlkbmlnaHQgVGV4dG1hdGUgdGhlbWUgKi8KCi5jbS1zLW5pZ2h0IHsgYmFja2dyb3VuZDogIzBhMDAxZjsgY29sb3I6ICNmOGY4Zjg7IH0KLmNtLXMtbmlnaHQgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjNDQ3ICFpbXBvcnRhbnQ7IH0KLmNtLXMtbmlnaHQgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzBhMDAxZjsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy1uaWdodCAuQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7IGNvbG9yOiAjZjhmOGY4OyB9Ci5jbS1zLW5pZ2h0IC5Db2RlTWlycm9yLWN1cnNvciB7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGUgIWltcG9ydGFudDsgfQoKLmNtLXMtbmlnaHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICM2OTAwYTE7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICM4NDVkYzQ7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLW5pZ2h0IHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICNmZmQ1MDA7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1rZXl3b3JkIHsgY29sb3I6ICM1OTllZmY7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogIzM3ZjE0YTsgfQouY20tcy1uaWdodCBzcGFuLmNtLW1ldGEgeyBjb2xvcjogIzc2NzhlMjsgfQouY20tcy1uaWdodCBzcGFuLmNtLXZhcmlhYmxlLTIsIC5jbS1zLW5pZ2h0IHNwYW4uY20tdGFnIHsgY29sb3I6ICM5OWIyZmY7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1uaWdodCBzcGFuLmNtLWRlZiB7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1uaWdodCBzcGFuLmNtLWVycm9yIHsgY29sb3I6ICM5ZDFlMTU7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICM4ZGE2Y2U7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICM2OTAwYTE7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1idWlsdGluLCAuY20tcy1uaWdodCBzcGFuLmNtLXNwZWNpYWwgeyBjb2xvcjogI2ZmOWU1OTsgfQouY20tcy1uaWdodCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzg0NWRjNDsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/rubyblue.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtcnVieWJsdWUgeyBmb250OjEzcHgvMS40ZW0gVHJlYnVjaGV0LCBWZXJkYW5hLCBzYW5zLXNlcmlmOyB9CS8qIC0gY3VzdG9taXplZCBlZGl0b3IgZm9udCAtICovCgouY20tcy1ydWJ5Ymx1ZSB7IGJhY2tncm91bmQ6ICMxMTI0MzU7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1ydWJ5Ymx1ZSBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICMzODU2NkYgIWltcG9ydGFudDsgfQouY20tcy1ydWJ5Ymx1ZSAuQ29kZU1pcnJvci1ndXR0ZXIgeyBiYWNrZ3JvdW5kOiAjMUY0NjYxOyBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCAjM0U3MDg3OyBtaW4td2lkdGg6Mi41ZW07IH0KLmNtLXMtcnVieWJsdWUgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtcnVieWJsdWUgLkNvZGVNaXJyb3ItY3Vyc29yIHsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZSAhaW1wb3J0YW50OyB9CgouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogIzk5OTsgZm9udC1zdHlsZTppdGFsaWM7IGxpbmUtaGVpZ2h0OiAxZW07IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICNGNEMyMEI7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICM4MkM2RTA7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1rZXl3b3JkIHsgY29sb3I6ICNGMEY7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogI0YwODA0NzsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLW1ldGEgeyBjb2xvcjogI0YwRjsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLXZhcmlhYmxlLTIsIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tdGFnIHsgY29sb3I6ICM3QkQ4Mjc7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWRlZiB7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWVycm9yIHsgY29sb3I6ICNBRjIwMTg7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICNGMEY7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1saW5rIHsgY29sb3I6ICNGNEMyMEI7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7IGNvbG9yOiNGMEYgIWltcG9ydGFudDsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWJ1aWx0aW4sIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tc3BlY2lhbCB7IGNvbG9yOiAjRkY5RDAwOyB9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/vibrant-ink.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/LyogVGFrZW4gZnJvbSB0aGUgcG9wdWxhciBWaXN1YWwgU3R1ZGlvIFZpYnJhbnQgSW5rIFNjaGVtYSAqLwoKLmNtLXMtdmlicmFudC1pbmsgeyBiYWNrZ3JvdW5kOiBibGFjazsgY29sb3I6IHdoaXRlOyB9Ci5jbS1zLXZpYnJhbnQtaW5rIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogIzM1NDkzYyAhaW1wb3J0YW50OyB9CgouY20tcy12aWJyYW50LWluayAuQ29kZU1pcnJvci1ndXR0ZXIgeyBiYWNrZ3JvdW5kOiAjMDAyMjQwOyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYWFhOyB9Ci5jbS1zLXZpYnJhbnQtaW5rIC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsgY29sb3I6ICNkMGQwZDA7IH0KLmNtLXMtdmlicmFudC1pbmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZSAhaW1wb3J0YW50OyB9CgouY20tcy12aWJyYW50LWluayAuY20ta2V5d29yZCB7ICBjb2xvcjogI0NDNzgzMjsgfQouY20tcy12aWJyYW50LWluayAuY20tYXRvbSB7IGNvbG9yOiAjRkMwOyB9Ci5jbS1zLXZpYnJhbnQtaW5rIC5jbS1udW1iZXIgeyBjb2xvcjogICNGRkVFOTg7IH0KLmNtLXMtdmlicmFudC1pbmsgLmNtLWRlZiB7IGNvbG9yOiAjOERBNkNFOyB9Ci5jbS1zLXZpYnJhbnQtaW5rIHNwYW4uY20tdmFyaWFibGUtMiwgLmNtLXMtY29iYWx0IHNwYW4uY20tdGFnIHsgY29sb3I6ICNGRkM2NkQgfQouY20tcy12aWJyYW50LWluayBzcGFuLmNtLXZhcmlhYmxlLTMsIC5jbS1zLWNvYmFsdCBzcGFuLmNtLWRlZiB7IGNvbG9yOiAjRkZDNjZEIH0KLmNtLXMtdmlicmFudC1pbmsgLmNtLW9wZXJhdG9yIHsgY29sb3I6ICM4ODg7IH0KLmNtLXMtdmlicmFudC1pbmsgLmNtLWNvbW1lbnQgeyBjb2xvcjogZ3JheTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLmNtLXMtdmlicmFudC1pbmsgLmNtLXN0cmluZyB7IGNvbG9yOiAgI0E1QzI1QyB9Ci5jbS1zLXZpYnJhbnQtaW5rIC5jbS1zdHJpbmctMiB7IGNvbG9yOiByZWQgfQouY20tcy12aWJyYW50LWluayAuY20tbWV0YSB7IGNvbG9yOiAjRDhGQTNDOyB9Ci5jbS1zLXZpYnJhbnQtaW5rIC5jbS1lcnJvciB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZWQ7IH0KLmNtLXMtdmlicmFudC1pbmsgLmNtLWJ1aWx0aW4geyBjb2xvcjogIzhEQTZDRTsgfQouY20tcy12aWJyYW50LWluayAuY20tdGFnIHsgY29sb3I6ICM4REE2Q0U7IH0KLmNtLXMtdmlicmFudC1pbmsgLmNtLWF0dHJpYnV0ZSB7IGNvbG9yOiAjOERBNkNFOyB9Ci5jbS1zLXZpYnJhbnQtaW5rIC5jbS1oZWFkZXIgeyBjb2xvcjogI0ZGNjQwMDsgfQouY20tcy12aWJyYW50LWluayAuY20taHIgeyBjb2xvcjogI0FFQUVBRTsgfQouY20tcy12aWJyYW50LWluayAuY20tbGluayB7IGNvbG9yOiBibHVlOyB9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/xq-dark.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKQ29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmtMb2dpYyBDb3Jwb3JhdGlvbgpBdXRob3I6IE1pa2UgQnJldm9vcnQgPG1pa2VAYnJldm9vcnQuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KKi8KLmNtLXMteHEtZGFyayB7IGJhY2tncm91bmQ6ICMwYTAwMWY7IGNvbG9yOiAjZjhmOGY4OyB9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2E4ZiAhaW1wb3J0YW50OyB9Ci5jbS1zLXhxLWRhcmsgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzBhMDAxZjsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy14cS1kYXJrIC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsgY29sb3I6ICNmOGY4Zjg7IH0KLmNtLXMteHEtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgeyBib3JkZXItbGVmdDogMXB4IHNvbGlkIHdoaXRlICFpbXBvcnRhbnQ7IH0KCi5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1rZXl3b3JkIHtjb2xvcjogI0ZGQkQ0MDt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1hdG9tIHtjb2xvcjogIzZDOENENTt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1udW1iZXIge2NvbG9yOiAjMTY0O30KLmNtLXMteHEtZGFyayBzcGFuLmNtLWRlZiB7Y29sb3I6ICNGRkY7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQouY20tcy14cS1kYXJrIHNwYW4uY20tdmFyaWFibGUge2NvbG9yOiAjRkZGO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjRUVFO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjREREO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLXByb3BlcnR5IHt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1vcGVyYXRvciB7fQouY20tcy14cS1kYXJrIHNwYW4uY20tY29tbWVudCB7Y29sb3I6IGdyYXk7fQouY20tcy14cS1kYXJrIHNwYW4uY20tc3RyaW5nIHtjb2xvcjogIzlGRUUwMDt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1tZXRhIHtjb2xvcjogeWVsbG93O30KLmNtLXMteHEtZGFyayBzcGFuLmNtLWVycm9yIHtjb2xvcjogI2YwMDt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1xdWFsaWZpZXIge2NvbG9yOiAjRkZGNzAwO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLWJyYWNrZXQge2NvbG9yOiAjY2M3O30KLmNtLXMteHEtZGFyayBzcGFuLmNtLXRhZyB7Y29sb3I6ICNGRkJENDA7fQouY20tcy14cS1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHtjb2xvcjogI0ZGRjcwMDt9Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbImZyaWVuZGx5bmFtZSJdPSJDb2RlTWlycm9yIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IiOwoKJGxhbmdbInBvc3RpbnN0YWxsIl09IlRoZSBDb2RlTWlycm9yIG1vZHVsZSB3YXMgc3VjZXNzZnVsbHkgaW5zdGFsbGVkIjsKJGxhbmdbIm5lZWRwZXJtaXNzaW9uIl09IidZb3UgbmVlZCB0aGUgJyVzJyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4iOwoKJGxhbmdbInNldHRpbmdzdGFiIl09IlNldHRpbmdzIjsKJGxhbmdbInNhdmVzZXR0aW5ncyJdPSJTYXZlIHNldHRpbmdzIjsKJGxhbmdbInNldHRpbmdzc2F2ZWQiXT0iU2V0dGluZ3Mgc2F2ZWQiOwoKJGxhbmdbImh0bWx0ZXN0Il09IkhUTUwgc3ludGF4IHRlc3QiOwokbGFuZ1siY3NzdGVzdCJdPSJDU1Mgc3ludGF4IHRlc3QiOwokbGFuZ1sicGhwdGVzdCJdPSJQSFAgc3ludGF4IHRlc3QiOwokbGFuZ1sianN0ZXN0Il09IkphdmFTY3JpcHQgc3ludGF4IHRlc3QiOwovLyRsYW5nWyJleGFtcGxlc3ludGF4Il09IlN5bnRheCB0byB0ZXN0IHdpdGgiOwovLyRsYW5nWyJjaGFuZ2UiXT0iQ2hhbmdlLi4uIjsKCiRsYW5nWyJzaG93bGluZW51bWJlcnMiXT0iU2hvdyBsaW5lbnVtYmVycyI7CiRsYW5nWyJhbGxvd2Z1bGxzY3JlZW4iXT0iQWxsb3cgZnVsbHNjcmVlbiBtb2RlIChGMTEpIjsKCi8vJGxhbmdbInRleHR3cmFwcGluZyJdPSJXcmFwIGxvbmcgbGluZXMiOwokbGFuZ1siYXV0b21hdGNocGFyZW5zIl09IkF1dG9tYXRjaCBwYXJlbnRoZXNpcyI7CiRsYW5nWyJ0YWJoYW5kbGluZyJdPSJIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5IjsKJGxhbmdbInRhYmRlZmF1bHQiXT0iTGV0IHRoZSBicm93c2VyIGRlY2lkZSI7CiRsYW5nWyJ0YWJpbmRlbnQiXT0iRG8gaW5kZW50YXRpb24iOwokbGFuZ1sidGFic3BhY2VzIl09Ikluc2VydCBzcGFjZXMiOwokbGFuZ1sidGFic2hpZnQiXT0iU2hpZnQgdG8gdGhlIHJpZ2h0LCBzaGlmdC1UQUIgc2hpZnRzIHRvIGxlZnQiOwokbGFuZ1sidGFic2l6ZSJdPSJTaXplIG9mIHRhYnMiOwoKJGxhbmdbImNzc2FkZGl0aW9ucyJdPSJBZGRpdGlvbnMgdG8gdGhlIENvZGVNaXJyb3ItY3NzLiI7CgokbGFuZ1sidGhlbWUiXT0iVGhlbWUiOwoKCgokbGFuZ1siaGVscCJdPSI8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L3N0cm9uZz4KPGJyLz4KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLgpJdCBjYW4gYm90aCByZXBsYWNlIGEgd3lzaXd5Zy1tb2R1bGUsIGFuZCBhY3Qgc3RhbmRhbG9uZSBmb3IgdGVtcGxhdGUvc3R5bGVzaGVldCBlZGl0aW5nIChvbmx5IHN1cHBvcnRlZCBpbiBDTVNtcyAxLjErKQo8YnIvPjxici8+CjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPgpZb3Ugc2ltcGx5IGluc3RhbGwgaXQsIGFuZCBjaG9vc2UgaXQgaW4geW91ciBhZG1pbiB1c2VyIHByZWZlcmVuY2VzLiBOb3RlLCB0aGF0IGlmIHlvdSB1c2UgQ01TbXMgMS4xIG9yIGFib3ZlIHlvdSBjYW4Kc2VsZWN0IENvZGVNaXJyb3IgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuIjsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/da_DK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgLSBlbiBzeW50YWtzLWZyZW1oJmFlbGlnO3ZlbmRlIGVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvZGVNaXJyb3IgbW9kdWxldCBibGV2IGtvcnJla3QgaW5zdGFsbGVyZXQnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtZb3UgbmVlZCB0aGUgJiMwMzk7JXMmIzAzOTsgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoYXQgZnVuY3Rpb24uJzsKJGxhbmdbJ3NldHRpbmdzdGFiJ10gPSAnSW5kc3RpbGxpbmdlcic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdHZW0gaW5kc3RpbGxpbmdlcic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5kc3RpbGxpbmdlcm5lIGJsZXYgZ2VtdCc7CiRsYW5nWydodG1sdGVzdCddID0gJ0hUTUwgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1Mgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ3BocHRlc3QnXSA9ICdQSFAgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2pzdGVzdCddID0gJ0phdmFTY3JpcHQgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YWtzIGRlciBza2FsIHRlc3RlcyBtZWQnOwokbGFuZ1snY2hhbmdlJ10gPSAnU2tpZnQuLi4nOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnVmlzIGxpbmllbnVtcmUnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnT21icnlkIGxhbmdlIGxpbmllcic7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdWaXMgbWF0Y2hlbmRlIHBhcmVudGVzZXInOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5JzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMZXQgdGhlIGJyb3dzZXIgZGVjaWRlJzsKJGxhbmdbJ3RhYmluZGVudCddID0gJ0RvIGluZGVudGF0aW9uJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ0luc2VydCBzcGFjZXMnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTaGlmdCB0byB0aGUgcmlnaHQsIHNoaWZ0LVRBQiBzaGlmdHMgdG8gbGVmdCc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdUaWxmJm9zbGFzaDtqZWxzZXIgdGlsIENvZGVNaXJyb3ItY3NzLic7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLic7CiRsYW5nWydxY2EnXSA9ICcxMjI5NjAxNzkwLTg1MjQzMTk3LTQzMjYwNzEzJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMzg5Njg0Mzk0LjEzMDExNDIxNDAuMTMwMTI1NDY5Ny4xMzAxNDM1MjU2LjMnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzAxMTQyMTQwLjEuMS51dG1jc3I9KGRpcmVjdCl8dXRtY2NuPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgLSBFZGl0b3IgbWl0IFN5bnRheGhlcnZvcmhlYnVuZyc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RhcyBDb2RlTWlycm9yLU1vZHVsIHd1cmRlIGluc3RhbGxpZXJ0Lic7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1NpZSBiZW4mb3VtbDt0aWdlbiBkaWUgJiMwMzk7JXMmIzAzOTstQmVyZWNodGlndW5nLCB1bSBkaWVzZSBGdW5rdGlvbiBhdXN6dWYmdXVtbDtocmVuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0VpbnN0ZWxsdW5nZW4nOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnRWluc3RlbGx1bmdlbiBzcGVpY2hlcm4nOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0VpbnN0ZWxsdW5nZW4gZ2VzcGVpY2hlcnQnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MLVN5bnRheC1UZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MtU3ludGF4LVRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUC1TeW50YXgtVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0LVN5bnRheC1UZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1plaWxlbm51bW1lcm4gYW56ZWlnZW4nOwokbGFuZ1snYWxsb3dmdWxsc2NyZWVuJ10gPSAnVm9sbGJpbGRtb2R1cyBlcmxhdWJlbiAoRjExKSc7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdBdXRvbWF0aXNjaGUgS2xhbW1lci1Fcmtlbm51bmcnOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdXYXMgc29sbCBiZWltIERyJnV1bWw7Y2tlbiBkZXIgVEFCLVRhc3RlIHBhc3NpZXJlbic7CiRsYW5nWyd0YWJkZWZhdWx0J10gPSAnQnJvd3NlciBlbnRzY2hlaWRlbiBsYXNzZW4nOwokbGFuZ1sndGFiaW5kZW50J10gPSAnRWluciZ1dW1sO2NrZW4nOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnTGVlcnplaWNoZW4gZWluZiZ1dW1sO2dlbic7CiRsYW5nWyd0YWJzaGlmdCddID0gJ1NoaWZ0IG5hY2ggcmVjaHRzLCBTaGlmdC1UQUIgdmVyc2NoaWVidCBzaWNoIG5hY2ggbGlua3MnOwokbGFuZ1sndGFic2l6ZSddID0gJ0dyJm91bWw7JnN6bGlnO2UgZGVyIFJlZ2lzdGVya2FydGVuJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ1p1cyZhdW1sO3R6ZSB6dXIgQ29kZU1pcnJvci1DU1MuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGhlbWUgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2FzIG1hY2h0IGRpZXNlcyBNb2R1bD88L2gzPg0KPHA+RGFzIENvZGVNaXJyb3ItTW9kdWwgaXN0IGVpbiBFZGl0b3IgbWl0IFN5bnRheGhlcnZvcmhlYnVuZywgbWl0IGRlbSBTaWUgZGllIEluaGFsdGUsIGRpZSBUZW1wbGF0ZXMgdW5kIGRpZSBTdHlsZXNoZWV0cyBiZWFyYmVpdGVuIGsmb3VtbDtubmVuLiBEYXMgTW9kdWwga2FubiBzb3dvaGwgZGllIFdZU0lXWUctRWRpdG9yZW4gZXJzZXR6ZW4gYWxzIGF1Y2ggc2VwYXJhdCB6dW0gQmVhcmJlaXRlbiB2b24gVGVtcGxhdGVzIHVuZCBTdHlsZXNoZWV0cyB2ZXJ3ZW5kZXQgd2VyZGVuICh1bnRlcnN0JnV1bWw7dHp0IGFiIENNU01TLVZlcnNpb24gMS4xKS48L3A+DQo8aDM+V2llIHdpcmQgZXMgZWluZ2VzZXR6dD88L2gzPg0KPHA+SW5zdGFsbGllcmVuIFNpZSBkYXMgTW9kdWwgdW5kIGFrdGl2aWVyZW4gU2llIGVzIGFuc2NobGllJnN6bGlnO2VuZCBpbiBkZW4gYmVudXR6ZXJzcGV6aWZpc2NoZW4gRWluc3RlbGx1bmdlbi48L3A+DQo8cD5CZWFjaHRlbiBTaWUsIGRhc3MgU2llIGFiIENNU01TLVZlcnNpb24gMS4xIHVuZCBoJm91bWw7aGVyIENvZGVNaXJyb3Igc293b2hsIGFscyBXWVNJV1lHLUVkaXRvciBhbHMgYXVjaCBhbHMgRWRpdG9yIG1pdCBTeW50YXhoZXJ2b3JoZWJ1bmcgYXVzdyZhdW1sO2hsZW4gayZvdW1sO25uZW4uPC9wPic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEyNDQyMzIzODEuMTMyNjgzMjc5NS4xMzI2ODMyNzk1LjEzMjY4MzI3OTUuMSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMjY4MzI3OTUuMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/es_ES.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRvciBkZSByZXNhbHRhZG8gZGUgc2ludGF4aXMgQ29kZU1pcnJvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0VsIG0mYW1wO29hY3V0ZTtkdWxvIENvZGVNaXJyb3IgZnVlIHNhdGlzZmFjdG9yaWFtZW50ZSBpbnN0YWxhZG8nOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtTZSBuZWNlc2l0YSBlbCBwZXJtaXNvIGRlICYjMDM5OyVzJiMwMzk7IHBhcmEgcmVhbGl6YXIgZXN0YSBmdW5jaSZhbXA7b2FjdXRlO24uJzsKJGxhbmdbJ3NldHRpbmdzdGFiJ10gPSAnQWp1c3Rlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYWx2YXIgYWp1c3Rlcyc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnQWp1c3RlcyBndWFyZGFkb3MnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdQcnVlYmEgZGUgc2ludGF4aXMgSFRNTCc7CiRsYW5nWydjc3N0ZXN0J10gPSAnUHJ1ZWJhIGRlIHNpbnRheGlzIENTUyc7CiRsYW5nWydwaHB0ZXN0J10gPSAnUHJ1ZWJhIGRlIHNpbnRheGlzIFBIUCc7CiRsYW5nWydleGFtcGxlc3ludGF4J10gPSAnU3ludGF4aXMgdXNhZGEgcGFyYSBwcm9iYXInOwokbGFuZ1snY2hhbmdlJ10gPSAnQ2FtYmlhci4uLic7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdNb3N0YXIgZWwgbiZhbXA7dWFjdXRlO21lcm8gZGUgbCZhbXA7aWFjdXRlO25lYXMnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnQXV0by1hanVzdGFyIGxpbmVhcyBsYXJnYXMnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+UXUmYW1wO2VhY3V0ZTsgaGFjZSBlc3RlIG0mYW1wO29hY3V0ZTtkdWxvPzwvc3Ryb25nPg0KPGJyLz4NCkVsIG0mYW1wO29hY3V0ZTtkdWxvIENvZGVNaXJyb3IgbGUgcGVybWl0ZSBlZGl0YXIgY29udGVuaWRvLCBwbGFudGlsbGFzIHkgaG9qYXMgZGUgZXN0aWxvIHVzYW5kbyB1biBlZGl0b3IgZGUgcmVzYWx0YWRvIGRlIHNpbnRheGlzIGRlbnRybyBkZSBzdSBuYXZlZ2Fkb3IuDQpFc3RlIHRhbWJpdSZhbXA7ZWFjdXRlO24gcHVlZGUgIHJlZW1wbGF6YXIgZWwgbSZhbXA7b2FjdXRlO2R1bG8gZGUgd3lzaXd5ZywgeSBhY3R1YXIgc29sbyBwYXJhIGVkaWNpJmFtcDtvYWN1dGU7biBkZSBwbGFudGlsbGFzL2hvamFzIGRlIGVzdGlsbyB0ZW1wbGF0ZS9zdHlsZXNoZWV0ICAoc29sbyBzb3BvcnRhZG8gZW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+QyZhbXA7b2FjdXRlO21vIHVzbyBlc3RlIG0mYW1wO29hY3V0ZTtkdWxvPzwvc3Ryb25nPg0KVXN0ZWQgc2ltcGxlbWVudGUgbG8gaW5zdGFsYSwgeSBsbyBzZWxlY2Npb25hIGVuIGxhcyBwcmVmZXJlY2lhcyBkZSBsYSBhZG1pbmlzdHJhY2kmYW1wO29hY3V0ZTtuLiBOb3RlIHF1ZSwgc2kgdXN0ZWQgdXNhIENNU21zIDEuMSBvIHN1cGVyaW9yIGEgZXN0ZSB1c3RlZCBwdWVkZSBzZWxlY2Npb25hciBDb2RlTWlycm9yIGp1bnRvIGNvbiBXWVNJV1lHIHBhcmEgZWwgcmVzYWx0YWRvIGRlIHNpbnRheGlzLic7CiRsYW5nWydxY2EnXSA9ICdQMC0yMDk2MDU0MzcwLTEyNTk4MDM2MTU5MzknOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4yMzg2MDY4NTQuMTI1OTgwNDM2OC4xMjY3NjUyNDU5LjEyNjc2NTk3NzMuNTcnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjY3NjUyNDU5LjU2LjI4LnV0bWNjbj0ocmVmZXJyYWwpfHV0bWNzcj1mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L2luZGV4LnBocC90b3BpYywxOTkyOS4wLmh0bWx8dXRtY21kPXJlZmVycmFsJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRldXIgZGUgc3ludGF4ZSBjb2xvciZlYWN1dGU7IENvZGVNaXJyb3InOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdMZSBtb2R1bGUgQ29kZU1pcnJvciBhICZlYWN1dGU7dCZlYWN1dGU7IGluc3RhbGwmZWFjdXRlOyBhdmVjIHN1Y2MmZWdyYXZlO3MnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtWb3VzIGF2ZXogYmVzb2luIGRlIGwmIzAzOTthdXRvcmlzYXRpb24gJiMwMzk7JXMmIzAzOTsgIHBvdXIgY2V0dGUgZm9uY3Rpb24nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdQYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYXV2ZWdhcmRlciBsZXMgcGFyYW0mZWdyYXZlO3RyZXMnOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ1BhcmFtJmVncmF2ZTt0cmVzIHNhdXZlZ2FyZCZlYWN1dGU7cyc7CiRsYW5nWydodG1sdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBIVE1MICc7CiRsYW5nWydjc3N0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIENTUyAnOwokbGFuZ1sncGhwdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIEphdmFTY3JpcHQnOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnQWZmaWNoZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyc7CiRsYW5nWydhbGxvd2Z1bGxzY3JlZW4nXSA9ICdBdXRvcmlzZXIgbGUgbW9kZSBwbGVpbiAmZWFjdXRlO2NyYW4gKEYxMSknOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQWZmaWNoZXIgbGVzIGNvcnJlc3BvbmRhbmNlcyBkZSBwYXJlbnRoJmVncmF2ZTtzZXMnOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdDb21tZW50IGcmZWFjdXRlO3JlciBsZSBjbGljIHN1ciBsYSB0b3VjaGUgVEFCJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMYWlzc2VyIGxlIG5hdmlnYXRldXIgZCZlYWN1dGU7Y2lkZXInOwokbGFuZ1sndGFiaW5kZW50J10gPSAnSW5kZW50ZXInOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnSW5zJmVhY3V0ZTtyZXIgZGVzIGVzcGFjZXMnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTaGlmdCB2ZXJzIGxhIGRyb2l0ZSwgc2hpZnQtVEFCIHNoaWZ0cyB2ZXJzIGxhIGdhdWNoZSc7CiRsYW5nWyd0YWJzaXplJ10gPSAnVGFpbGxlIGRlcyBvbmdsZXRzJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0Fqb3V0cyAmYWdyYXZlOyBsYSBmZXVpbGxlIGRlIHN0eWxlIGRlIENvZGVNaXJyb3IuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGgmZWdyYXZlO21lJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPlF1ZSBmYWl0IGNlIG1vZHVsZSZuYnNwOz88L3N0cm9uZz4NCjxici8+DQpMZSBtb2R1bGUgQ29kZU1pcnJvciB2b3VzIHBlcm1ldCBkZSBtb2RpZmllciBsZSBjb250ZW51LCBsZXMgZ2FiYXJpdHMgZXQgbGVzIGZldWlsbGVzIGRlIHN0eWxlIGVuIHV0aWxpc2FudCB1biAmZWFjdXRlO2RpdGV1ciBkZSBzeW50YXhlIGNvbG9yJmVhY3V0ZTsgbCYjMDM5O2ludCZlYWN1dGU7cmlldXIgZGUgdm90cmUgbmF2aWdhdGV1ci4gDQpJbCBwZXV0IGF1c3NpIGJpZW4gcmVtcGxhY2VyIGwmIzAzOTsmZWFjdXRlO2RpdGV1ciBXWVNJV1lHLCBldCBwZXJtZXR0cmUgZGUgdmlzdWFsaXNlci0mZWFjdXRlO2RpdGVyIGxlcyBnYWJhcml0cywgZmV1aWxsZXMgZGUgc3R5bGUuIChVbmlxdWVtZW50IHBvdXIgdmVyc2lvbiBDTVNNUyAxLjEgb3UgcGx1cykNCjxici8+PGJyLz4NCjxzdHJvbmc+Q29tbWVudCBsJiMwMzk7dXRpbGlzZXImbmJzcDs/PC9zdHJvbmc+PGJyLz4NCklsIHZvdXMgc3VmZml0IGRlIGwmIzAzOTtpbnN0YWxsZXIsIGV0IGRhbnMgJnF1b3Q7TWVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMgLyBQciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzIGRlIGwmIzAzOTt1dGlsaXNhdGV1ciZxdW90OyBjaG9pc2lyIGF2ZWMgbGUgbWVudSBkJmVhY3V0ZTtyb3VsYW50IENvZGVNaXJyb3IgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9ubmVyIGxhIHN5bnRheGUgc3VybGlnbiZlYWN1dGU7ZSZxdW90OyBldC9vdSAmZWFjdXRlO3ZlbnR1ZWxsZW1lbnQgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9uIGR1IFdZU0lXWUcgJmFncmF2ZTsgdXRpbGlzZXImcXVvdDsuDQonOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGFrc2ZyZW1oZXZpbmdzcmVkaWdlcmVyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQ29kZU1pcnJvciBtb2R1bGVuIGJsZSBpbnN0YWxsZXJ0JzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnRHUgdHJlbmdlciAmIzAzOTslcyYjMDM5OyB0aWxsYXRlbHNlIGZvciAmYXJpbmc7IHV0ZiZvc2xhc2g7cmUgZGVubmUgZnVua3Nqb25lbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gJ0xhZ3JlIGlubnN0aWxsaW5nZXInOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0lubnN0aWxsaW5nZXIgbGFncmV0JzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAnSFRNTCBzeW50YWtzIHRlc3QnOwokbGFuZ1snY3NzdGVzdCddID0gJ0NTUyBzeW50YWtzIHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YWtzIHRlc3QnOwokbGFuZ1snanN0ZXN0J10gPSAnSmF2YVNjcmlwdCBzeW50YWtzdGVzdCc7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdWaXMgbGluamVudW1tZXInOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlza2UgcGFyYW50ZXNlcic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ0h2b3JkYW4gc2thbCB0cnlrayBhdiBUQUItdGFzdGVuIGgmYXJpbmc7bnRlcmVzJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMYSBuZXR0bGVzZXJlbiBhdmdqJm9zbGFzaDtyZSc7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdMYWcgaW5ucnlrayc7CiRsYW5nWyd0YWJzcGFjZXMnXSA9ICdTZXR0IGlubiBtZWxsb21yb20nOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTZW5kZXIgdGlsIGgmb3NsYXNoO3lyZSwgc2hpZnQtVEFCIHNlbmRlciB0aWwgdmVuc3RyZSc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdDb2RlTWlycm9yLWNzcyB0aWxsZWdnLic7CiRsYW5nWyd0aGVtZSddID0gJ1RlbWEnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvc3Ryb25nPg0KPGJyLz4NClRoZSBDb2RlTWlycm9yIG1vZHVsZSBhbGxvd3MgeW91IHRvIGVkaXQgY29udGVudCwgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyB1c2luZyBhIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IgaW5zaWRlIHlvdXIgYnJvd3Nlci4NCkl0IGNhbiBib3RoIHJlcGxhY2UgYSB3eXNpd3lnLW1vZHVsZSwgYW5kIGFjdCBzdGFuZGFsb25lIGZvciB0ZW1wbGF0ZS9zdHlsZXNoZWV0IGVkaXRpbmcgKG9ubHkgc3VwcG9ydGVkIGluIENNU21zIDEuMSspDQo8YnIvPjxici8+DQo8c3Ryb25nPkhvdyBkbyBJIHVzZSB0aGlzIG1vZHVsZT88L3N0cm9uZz4NCllvdSBzaW1wbHkgaW5zdGFsbCBpdCwgYW5kIGNob29zZSBpdCBpbiB5b3VyIGFkbWluIHVzZXIgcHJlZmVyZW5jZXMuIE5vdGUsIHRoYXQgaWYgeW91IHVzZSBDTVNtcyAxLjEgb3IgYWJvdmUgeW91IGNhbg0Kc2VsZWN0IENvZGVBcmVhIGJvdGggYXMgYSBXWVNJV1lHIGFuZCBhcyBhIHN5bnRheCBoaWdobGlnaHRpbmcgZWRpdG9yLic7CiRsYW5nWydxY2EnXSA9ICdQMC01MzY4NDkxMTUtMTMwNzk4MzQ5NTIxMCc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEwMDU2MDYwODQuMTMwOTA0NzQ3Mi4xMzA5MDQ3NDcyLjEzMDkxMjIyMjEuMic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDc5ODM0OTUuMS4xLnV0bWNzcj0oZGlyZWN0KXx1dG1jY249KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuNS4xMC4xMzA5MTIyMjIxJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgU3ludGF4aGlnaGxpZ2h0aW5nIEVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RlIENvZGVNaXJyb3IgTW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1UgaGVlZnQgJiMwMzk7JXMmIzAzOTsgcmVjaHRlbiBub2RpZyBvbSBkZXplIGZ1bmN0aWUgdGUgZ2VicnVpa2VuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdJbnN0ZWxsaW5nZW4gb3BzbGFhbic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5zdGVsbGluZ2VuIG9wZ2VzbGFnZW4nOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIFN5bnRheCBUZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MgU3ludGF4IFRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBTeW50YXggVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IFN5bnRheCBUZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1JlZ2VsbnVtbWVycyB0b25lbic7CiRsYW5nWydhbGxvd2Z1bGxzY3JlZW4nXSA9ICdTdGEgZnVsbHNjcmVlbiBtb2R1cyB0b2UgKEYxMSknOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlzY2ggYmlqIGVsa2FhciBob3JlbmRlIHRhZ3Mga2xldXJlbic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ1dhdCB0ZSBkb2VuIGJpaiBoZXQgaW5kcnVra2VuIHZhbiBUQUIgdG9ldHMnOwokbGFuZ1sndGFiZGVmYXVsdCddID0gJ0xhYXQgZGUgYnJvd3NlciBoZXQgYmVwYWxlbic7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdNYWFrIHJlZ2VsIGluc3ByaW5naW5nJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ1ZvZWcgc3BhdGllcyB0b2UnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdWZXJwbGFhdHN0IG5hYXIgcmVjaHRzLCBzaGlmdC1UQUIgdmVycGxhYXRzdCBuYWFyIGxpbmtzJzsKJGxhbmdbJ3RhYnNpemUnXSA9ICdBZm1ldGluZ2VuIHZhbiBkZSB0YWJzJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0FhbnBhc3NpbmdlbiBhYW4gZGUgQ29kZU1pcnJvci1jc3MuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGhlbWUgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz8gPC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTIzNTc2ODgzOC0xMzE4ODU5OTM1NzY1JzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuNjc0Mjg5OTc4LjEzMjcyNTgyMTcuMTMyNzI1ODIxNy4xMzI3MjU4MjE3LjEnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzI3MjU4MjE3LjEuMS51dG1jY249KGRpcmVjdCl8dXRtY3NyPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ro_RO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRvcnVsIENvZGVNaXJyb3IgY3UgZXZpZGVudGlhdG9yIGRlIHNpbnRheGEnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdNb2R1bHVsIENvZGVNaXJyb3IgYSBmb3N0IGluc3RhbGF0IGN1IHN1Y2Nlcyc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ0F2ZXRpIG5ldm9pZSBkZSBwZXJtaXNpdW5lYSAmIzAzOTslcyYjMDM5OyBwZW50cnUgYWNlYXN0YSBmdW5jdGllLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ1NldGFyaSc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYWx2YXJlIHNldGFyaSc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnU2V0YXJpbGUgYXUgZm9zdCBzYWx2YXRlJzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAndGVzdCBzaW50YXhhIEhUTUwnOwokbGFuZ1snY3NzdGVzdCddID0gJ3Rlc3Qgc2ludGF4YSBDU1MnOwokbGFuZ1sncGhwdGVzdCddID0gJ3Rlc3Qgc2ludGF4YSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAndGVzdCBzaW50YXhhIEphdmFTY3JpcHQnOwokbGFuZ1snZXhhbXBsZXN5bnRheCddID0gJ1N5bnRheCB0byB0ZXN0IGN1JzsKJGxhbmdbJ2NoYW5nZSddID0gJ1NjaGltYmEnOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnQWZpc2FyZSBudW1lcmUgZGUgbGluaWUnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnU3RyYW5nZSBsaW5paWxlIGx1bmdpJzsKJGxhbmdbJ2F1dG9tYXRjaHBhcmVucyddID0gJ0F1dG9wb3RyaXZpcmUgcGFyYW50ZXplJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPkNlIGZhY2UgYWNlc3QgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KTW9kdWx1bCBDb2RlTWlycm9yIHZhIHBlcm1pdGUgc2EgZWRpdGF0aSBjb250aW51dCwgdGVtcGxhdGUtdXJpIHNpIHN0eWxlc2hlZXQtdXJpIGZvbG9zaW5kIHVuIGVkaXRvciBjdSBldmlkZW50aWF0b3IgZGUgc2ludGF4YSBkaW4gYnJvd3Nlci4NClBvYXRlIGlubG9jdWkgYXRhdCB1biBtb2R1bCB3eXNpd3lnLCBzaSBzYSBmdW5jdGlvbmV6ZSBkZSBzaW5lIHN0YXRhdG9yIHBlbnRydSBlZGl0YXJlIGRlIHRlbXBsYXRlL3N0eWxlc2hlZXQuDQo8YnIvPjxici8+DQo8c3Ryb25nPkN1bSBzZSBmb2xvc2VzZSBhY2VzdCBtb2R1bD88L3N0cm9uZz4NCkluc3RhbGF0aS1sLCBzaSBhbGVnZXRpLWwgaW4gcHJlZmVyaW50ZWxlIGRlIHV0aWxpemF0b3IgZGluIGFkbWluLic7CiRsYW5nWydxY2EnXSA9ICdQMC0xODM4MjE1MDQzLTEyODI4MDc1MzM5MzQnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjgyODA3OTcyLjEuMi51dG1jc3I9Z29vZ2xlfHV0bWNjbj0ob3JnYW5pYyl8dXRtY21kPW9yZ2FuaWN8dXRtY3RyPWNtc21zJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTE5MTg3MzgxNy4xMjgyODA3NTM0LjEyODI4MDc1MzQuMTI4MjgwNzUzNC4xJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4xMi45LjEyODI4MDc2MTUzNjgnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sv_SE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvZGVNaXJyb3ItbW9kdWxlbiBpbnN0YWxsZXJhZGVzIHV0YW4gbiZhcmluZztncmEgcHJvYmxlbSc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJyYjMDM5O1lvdSBuZWVkIHRoZSAmIzAzOTslcyYjMDM5OyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXInOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnU3BhcmEgaW5zdCZhdW1sO2xsbmluZ2FyJzsKJGxhbmdbJ3NldHRpbmdzc2F2ZWQnXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXIgc3BhcmFkZXMnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIHN5bnRheCB0ZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1Mgc3ludGF4IHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YXggdGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IHN5bnRheCB0ZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YXggYXR0IHRlc3RhIG1lZCc7CiRsYW5nWydjaGFuZ2UnXSA9ICcmQXVtbDtuZHJhLi4uJzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1Zpc2EgcmFkbnVtbWVyJzsKJGxhbmdbJ3RleHR3cmFwcGluZyddID0gJ1dyYXAgbG9uZyBsaW5lcyc7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5XaGF0IGRvZXMgdGhpcyBtb2R1bGUgZG8/PC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTEyMzE4NzIzMjUtMTI2OTM1OTMyMTE5NSc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEyNjk3Nzc2MDMuMTI2OTM1OTM0Mi4xMjY5MzU5MzQyLjEyNjkzNTkzNDIuMSc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzLjEuMTAuMTI2OTM1OTM0Mic7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI2OTM1OTM0Mi4xLjEudXRtY3NyPWdvb2dsZXx1dG1jY249KG9yZ2FuaWMpfHV0bWNtZD1vcmdhbmljfHV0bWN0cj1jbXNtcyc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInVzZWF1dG9jb21wbGV0ZSIsMSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsMCkKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsKICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsKICAvL1JlbW92ZSBvbGQgc3BlY2lmaWsgcGVybWlzc2lvbgogICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCJtb2RpZnllZGl0YXJlYXNldHRpbmdzIik7Cj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT4yLjMuMSAtIEFwcGx5LWJ1dHRvbiBpbiBlZGl0IGNzcyBhcmUgZml4ZWQsIHRlbXBsYXRlcyBzdGlsbCBoYXZlIGNvcmUgYnVnIDooPC9saT4KICA8bGk+Mi4zLjAgLSBSZWltcGxlbWVudGVkIGxpbmV3cmFwcGluZywgYXV0b21hdGVkIHRoZW1lIGRldGVjdGlvbjwvbGk+CiAgPGxpPjIuMi4zIC0gVXBkYXRlZCB0byBDTSAyLjIuMzwvbGk+CiAgPGxpPjIuMi4yIC0gVXBkYXRlZCB0byBDTSAyLjIuMTwvbGk+CiAgPGxpPjIuMi4xIC0gVXBkYXRlZCB0byBDTSAyLjIuMCwgYWRkZWQgdGFiLXdpZHRoIHNldHRpbmc8L2xpPgogIDxsaT4yLjIuMCAtIFVwZGF0ZWQgdG8gQ00gMi4xNSwgYWRkZWQgb3B0aW9uYWwgZnVsbHNjcmVlbiBtb2RlPC9saT4KICA8bGk+Mi4xLjIgLSBVcGRhdGVkIHRvIENNIDIuMTIsIGNsZWFuZXIgd2F5IG9mIHNhdmluZyBlZGl0b3IgY29udGVudCB0byB0ZXh0YXJlYTwvbGk+CiAgPGxpPjIuMS4wIC0gVXBkYXRlZCB0byBDTSAyLjEuMSwgb25jZSBhZ2FpbiBjaGFuZ2UgdGVzdG1vZGUuLi4gPC9saT4KICA8bGk+Mi4wLjEgLSBVcGRhdGVkIHRvIENNIDIuMC4xPC9saT4KICA8bGk+Mi4wIC0gVXBkYXRlZCB0byBDTSAyLjAgYW5kIHJld29ya2VkIGp1c3QgYWJvdXQgZXZlcnl0aGluZyB0byBtYWtlIHRoaXMgd29yazwvbGk+CiAgPGxpPjAuMS45IC0gVXBkYXRlZCB0byBDTSAwLjkzPC9saT4KICA8bGk+MC4xLjggLSBVcGRhdGVkIHRvIENNIDAuOSwgYWRkZWQgb3B0aW9uIG9uIGhvdyB0byBoYW5kbGUgVEFCPC9saT4KICA8bGk+MC4xLjcgLSBVcGRhdGVkIHRvIENNIDAuODA8L2xpPgogIDxsaT4wLjEuNiAtIFVwZGF0ZWQgdG8gQ00gMC43MCwgQWRkZWQgb3B0aW9uIHRvIG1hdGNoIHBhcmVudGhlc2lzPC9saT4KICA8bGk+MC4xLjUgLSBVcGRhdGVkIHRvIENNIDAuNjYsIHJlbW92ZWQgYSBzdHJhbmdlIFxuIGNoYXIgZnJvbSBoZWFkZXJvdXRwdXQsIG1hZGUgdGFiYmluZyB3b3JrPC9saT4KICA8bGk+MC4xLjQgLSBGaXhlZCBDUFUgaG9nZ2luZyBwcm9ibGVtcyBieSByZXdyaXRpbmcgdGVzdGFyZWEtY29kZTwvbGk+CiAgPGxpPjAuMS4zIC0gVXBkYXRlZCB0byBDTSAwLjY1LCBhZGRlZCBvcHRpb24gdG8gdG9nZ2xlIHdvcmR3cmFwPC9saT4KICA8bGk+MC4xLjIgLSBVcGRhdGVkIHRvIENNIDAuNjM8L2xpPgogIDxsaT4wLjEuMSAtIFVwZGF0ZWQgdG8gQ00gMC42MiwgZml4ZWQgZXhhbXBsZXMgYW5kIHByb2JhYmx5IGZ1bmN0aW9uYWxpdHkgYXMgd2VsbDwvbGk+CiAgPGxpPjAuMS4wIC0gSW5pdGlhbCByZWxlYXNlIDwvbGk+CjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/codemirror2area.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjazsiID4KPHRleHRhcmVhIGlkPSJ7JHRleHRhcmVhaWR9IiBuYW1lPSJ7JHRleHRhcmVhbmFtZX0iPnskY29udGVudH08L3RleHRhcmVhPgo8L2Rpdj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiAgdmFyIHskdGV4dGFyZWFpZH0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneyR0ZXh0YXJlYWlkfScpOwogIHZhciBjb2RlbWlycm9yZWRpdG9yeyRpZH0gPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSh7JHRleHRhcmVhaWR9LCB7bGl0ZXJhbH17ey9saXRlcmFsfQoKICAgIG1vZGUgOiAneyRtb2RlfScsCiAgICBpbmRlbnRVbml0IDogeyR0YWJzaXplfSwKICAgIGxpbmVOdW1iZXJzOiB7JGxpbmVudW1iZXJzfSwKICAgIGxpbmVXcmFwcGluZzogeyR0ZXh0d3JhcHBpbmd9LAoKICAgIHRhYk1vZGUgOiAneyR0YWJoYW5kbGluZ30nLAogICAgdGhlbWUgOiAneyR0aGVtZX0nLAogICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogIHtpZiAkYWxsb3dmdWxsc2NyZWVuPT0nMSd9CiAge2xpdGVyYWx9CiAgLG9uS2V5RXZlbnQ6IGZ1bmN0aW9uKGksIGUpIHsKCiAgICAgICAgICAgIGlmICgoZS5rZXlDb2RlID09IDEyMiB8fCBlLmtleUNvZGUgPT0gMjcpICYmIGUudHlwZSA9PSAna2V5ZG93bicpIHsKICAgICAgICAgICAgICBlLnN0b3AoKTsKICAgICAgICAgICAgICByZXR1cm4gdG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogIHsvbGl0ZXJhbH0KICB7L2lmfQoKICB7bGl0ZXJhbH19KTt7L2xpdGVyYWx9Cjwvc2NyaXB0PgoK]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHNob3dsaW5lbnVtYmVyc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2hvd2xpbmVudW1iZXJzaW5wdXR9PC9wPgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRhbGxvd2Z1bGxzY3JlZW50ZXh0fTwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGFsbG93ZnVsbHNjcmVlbmlucHV0fTwvcD4KCTwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0ZXh0d3JhcHBpbmd0ZXh0fTwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRleHR3cmFwcGluZ2lucHV0fTwvcD4KCTwvZGl2Pgp7KgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGF1dG9tYXRjaHBhcmVuc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskYXV0b21hdGNocGFyZW5zaW5wdXR9PC9wPgoJPC9kaXY+Cip9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGFiaGFuZGxpbmd0ZXh0fTwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRhYmhhbmRsaW5naW5wdXR9PC9wPgoJPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGFic2l6ZXRleHR9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0YWJzaXplaW5wdXR9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGNzc2FkZGl0aW9uc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskY3NzYWRkaXRpb25zaW5wdXR9PC9wPgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aGVtZXRleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGhlbWVpbnB1dH08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
</module>
