<?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>NeoDataStorage</name>
	<version>0.1.0</version>
  <mincmsversion>1.7-beta1</mincmsversion>
	<help>PHN0cm9uZz5Ob3RpY2UhIFRoaXMgaXMgYSBtb2R1bGUtZGV2ZWxvcGVyLW9ubHkgbW9kdWxlLiBJZiB5b3UgYXJlIG5vdCBhIGRldmVsb3Blcgp5b3UnbGwgcHJvYmFibHkganVzdCB3YW50IHRvIHNraXAgdGhlIGdvcnkgZGV0YWlscyBvZiB0aGlzIHBhZ2UgYW5kIHJlbHkgb24gdGhhdAp0aGUgbW9kdWxlIGp1c3QgZG9lcyBpdCdzIHdvcmsuPC9zdHJvbmc+Cjxici8+PGJyLz4KPGgzPlB1cnBvc2Ugb2YgdGhlIG1vZHVsZTwvaDM+ClRoZSBwdXJwb3NlIG9mIHRoaXMgbW9kdWxlIGlzIHRvIHByb3ZpZGUgYSBuaWNlIGFuZCBjbGVhbiB3YXkgZm9yIG1vZHVsZXMKdG8gc3RvcmUgZGF0YSBpbiBhIHRhYmxlLWxpa2UgbWFubmVyIGJ1dCB3aXRob3V0IHRoZSBoYXp6bGUgb2YgY3JlYXRpbmcKc3BlY2lmaWMgdGFibGVzIGZvciBpdHNlbGYgYW5kIG1haW50YWluaW5nIHRoZXNlLgoKPGgzPkJ1dCBiZXdhcmUhPC9oMz4KSXQgc2hvdWxkIGJlIGVtcGhhc2l6ZWQKdGhhdCB0aGlzIG1vZHVsZSBpcyBub3QgaW50ZW5kZWQgZm9yIGV4dHJlbWVseSBkYXRhLWludGVuc2l2ZSBvcGVyYXRpb25zCmFzIGl0IHVzZXMgKGEgbG90KSBtb3JlIGRhdGFiYXNlLWNhbGxzIHRoYW4gY3VzdG9tLXdyaXR0ZW4gZGF0YSBhY2Nlc3MgZG9lcywKYnV0IGZvciBub24taW50ZW5zaXZlIHN0dWZmIGl0IHdpbGwgaG9wZWZ1bGx5IGN1dCBvZmYgc29tZSBvZiB0aGUgdGVkaW91cwoiaG91c2VrZWVwaW5nIiB3aGljaCBJIGdvdCByZWFsbHkgZmVkIHVwIHdpdGggaW4gYWxtb3N0IGV2ZXJ5IG1vZHVsZSBJJ3ZlIGRvbmUuCjxici8+ClNvLCB0aGF0J3MgaXQgZm9yIHRoZSBkaXNjbGFpbWVyLCBub3cgZm9yIHRoZSBBUEkgOi0pCjxici8+Cjxici8+CjxoMz5CYXNpYyB1c2Ugb2YgdGhlIG1vZHVsZTwvaDM+ClVzYWdlIG9mIHRoaXMgbW9kdWxlIGFsd2F5cyBzdGFydHMgb2ZmIHdpdGggZ2V0dGluZyBhbiBhY2Nlc3MgdG8gYW4gaW5zdGFuY2UKb2YgdGhlIG1vZHVsZS4gVGhlIG1vc3QgY29tbW9uIHdheSBvZiBkb2luZyB0aGlzIGlzIGNhbGxpbmcgc29tZXRoaW5nIGxpa2UKPHByZT4KCiRuZHM9JHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCJOZW9EYXRhU3RvcmFnZSIpOwoKPC9wcmU+CllvdSdsbCBwcm9iYWJseSB3YW50IHRvIG1ha2UgeW91ciBtb2R1bGUgZGVwZW5kYW50IG9mIHRoaXMgbW9kdWxlLCBidXQgeW91CnNob3VsZCBrbm93IGhvdyB0byBkbyB0aGlzLi4uCjxici8+CkFmdGVyIGFzc2lnbmluZyB0aGUgbW9kdWxlIHRvIGEgdmFyaWFibGUsIHlvdSBjYW4gc3RhcnQgdXNpbmcgaXQgd2l0aCBBUEktZnVuY3Rpb25zCmxpa2U6CjxwcmU+CgokbXlyZWNvcmQ9JG5kcy0+R2V0RW50aXRpZXMoIm15bW9kdWxlbmFtZSIsICJteXRhYmxlaWQiKTsKCjwvcHJlPgpXaGVyZSAibXltb2R1bGVuYW1lIiBpcyB0aGUgdW5pcXVlIGlkZW50aWZ5ZXIgb2YgeW91ciBtb2R1bGUsIGNvdWxkIGJlCnJlcGxhY2VkIHdpdGggJyR0aGlzLT5HZXROYW1lKCknLCBhbmQgIm15dGFibGVpZCIgaXMgYW4gaWRlbnRpZnllciBvZiB0aGUKdGFibGUgb2YgZGF0YSB3aGljaCB5b3Ugd2FudCB0byBhY2Nlc3MgaW4gdGhlIGRhdGFzdG9yYWdlIGZvciB5b3VyIG1vZHVsZS4KVGhpcyBjYW4gYmUgbGVmdCBibGFuayBpZiBvbmx5IG9uZSB0YWJsZSBpcyBuZWVkZWQgZm9yIHRoZSBtb2R1bGUuCjxici8+CkZvciBhIGNvbXBsZXRlIChyZWFkOiBzb210aW1lcyBjb21wbGV0ZSkgbGlzdCBvZiBtZXRob2RzIHNlZSBsaXN0IGJlbG93LgoKPGgzPlRoZSBOZW9Nb2R1bGUtc2lzdGVyPC9oMz4KQW5vdGhlciwgYW5kIGV2ZW4gZWFzaWVyLCB3YXkgdG8gdXNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgbW9kdWxlCmlzIHRvIGxldCB5b3VyIG1vZHVsZSBkZXNjZW5kIGZyb20gYW5vdGhlciBwcm9qZWN0IG9mIG1pbmUsIHRoZSBOZW9Nb2R1bGUsCndoaWNoIHdyYXBzIGFsbCB0aGUgZnVuY3Rpb25zIG9mIE5lb0RhdGFTdG9yYWdlIGJ1dCByZW1vdmluZyB0aGUgbmVlZCBvZgpjb25zdGFudGx5IHN1cHBseWluZyB0aGUgJG1vZHVsZW5hbWUuIEl0IGFsc28gcHJvdmlkZXMgYSBzdGlsbC1ncm93aW5nIGxpc3Qgb2YKb3RoZXIgaGVscGVyLWZ1bmN0aW9ucyB3aGljaCBoYXMgdG8gZG8gd2l0aCBvdGhlciBzdHVmZiB0aGFuIERhdGFTdG9yYWdlLgo8YnIvPgpGb3IgZnVydGhlciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHVzZSB0aGUgTmVvTW9kdWxlLCBwbGVhc2UgaW5zdGFsbCBpdCBhbmQKY2hlY2sgb3V0IGl0J3MgaGVscC1wYWdlLgoKPGgzPkhvdyB0byBnZXQgaGVscDwvaDM+Ckkgd2lsbCByZXBlYXQsIHRoaXMgbW9kdWxlIGlzIGZvciBkZXZlbG9wZXJzIG9ubHkuIElmIHlvdSBjYW5ub3QgcmVhZCBwaHAtc291cmNlIGNvZGUsCnlvdSBzaG91bGQgdXNlIGl0IGZvciBkZXZlbG9wbWVudCBhbnl3YXkuIElmIHlvdSBjYW4sIGFsd2F5cyBjaGVjayBvdXQgdGhlIGNvZGUKZm9yIGhpbnRzIG9uIGhvdyB0byBtYWtlIGl0IHdvcmsuIElmIHlvdSBzdGlsbCBoYXZlIHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucyBmb3IKZml4ZXMvaW1wcm92ZW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNhdGNoIG1lIChTaWxtYXJpbGxpb24pIGluIHRoZSBmb3J1bSBvZyAjaXJjLgoKCjxoMz5MaXN0IG9mIG1ldGhvZHM8L2gzPgo8cHJlPgovKgogKgogKiBFbnRpdHkgZnVuY3Rpb25zCiAqCiAqLwpmdW5jdGlvbiBBZGRFbnRpdHkoJG1vZHVsZSwgJHRhYmxlLCAkcHJvcHM9YXJyYXkoKSkKZnVuY3Rpb24gRGVsZXRlRW50aXR5KCRpZCkKZnVuY3Rpb24gR2V0RW50aXR5V2l0aFR5cGUoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpKQpmdW5jdGlvbiBHZXRFbnRpdHkoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpLCAkd2l0aHR5cGU9ZmFsc2UpCmZ1bmN0aW9uIEdldEVudGl0aWVzKCRtb2R1bGUsICR0YWJsZT0iIiwgJGNyaXRlcmlhPWFycmF5KCkpCmZ1bmN0aW9uIEdldE9uZUVudGl0eSgkbW9kdWxlLCAkdGFibGUsICRjcml0ZXJpYT1hcnJheSgpLCAkZmFpbGlmbXVsdGlwbGU9ZmFsc2UpCmZ1bmN0aW9uIEdldEVudGl0aWVzRnVsbCgkbW9kdWxlLCAkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpKQpmdW5jdGlvbiBFbnRpdGllc0NvdW50KCRtb2R1bGUsICR0YWJsZT0iIiwgJGNyaXRlcmlhPWFycmF5KCkpCmZ1bmN0aW9uIFNldEVudGl0eVByb3AoJGlkLCRwcm9wbmFtZSwkcHJvcHZhbHVlLCRwcm9wdHlwZT0idW5kZWZpbmVkIikKZnVuY3Rpb24gQ2xlYXJFbnRpdHkoJGlkKQpmdW5jdGlvbiBDbGVhck1vZHVsZUVudGl0aWVzKCRtb2R1bGUpCmZ1bmN0aW9uIENsZWFyRW50aXR5UHJvcCgkaWQsICRwcm9wbmFtZSkKZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wcygkaWQpCmZ1bmN0aW9uIFNldEVudGl0eVByb3BzKCRpZCwgJHByb3BzLCAkY2xlYXI9dHJ1ZSkKZnVuY3Rpb24gU2V0RW50aXR5UHJvcHNPbkNyaXRlcmlhKCRtb2R1bGUsJHRhYmxlLCAkcHJvcHMsICRjcml0ZXJpYSwgJGNyZWF0ZT10cnVlLCAkY2xlYXI9ZmFsc2UpIC8vRG9lcyBub3Qgd29yayEKZnVuY3Rpb24gUmVzZXRFbnRpdHlQcm9wcygkaWQsICRuZXdwcm9wcz1hcnJheSgpKQpmdW5jdGlvbiBSZW1vdmVNb2R1bGVFbnRpdGllcygkbW9kdWxlbmFtZSkKCi8qCiAqCiAqIFNvcnRpbmcgZnVuY3Rpb25zCiAqCiAqLwpmdW5jdGlvbiBDb21wYXJlRW50aXRpZXMoJGVudGl0eTEsICRlbnRpdHkyLCAkc29ydGZpZWxkKQpmdW5jdGlvbiBDb21wYXJlRW50aXRpZXNDb21wbGV4KCRlbnRpdHkxLCAkZW50aXR5MiwgJHNvcnRmaWVsZHM9YXJyYXkoKSkgLy9Eb2VzIG5vdCB3b3JrCmZ1bmN0aW9uIFNvcnRFbnRpdGllcygkbGlzdCwgJHNvcnRmaWVsZHM9YXJyYXkoKSBvciBzdHJpbmcpIC8vT25seSB3b3JrcyBvbiBzdHJpbmdzCmZ1bmN0aW9uIE1ha2VTaW1wbGVBcnJheSgkbW9kdWxlLCAkdGFibGUsICRmaWVsZCkKZnVuY3Rpb24gTWFrZUFzc29jQXJyYXkoJG1vZHVsZSwgJHRhYmxlLCAkZmllbGRzKQoKLyoKICoKICogRmllbGRzZXQgZnVuY3Rpb25zCiAqCiAqLwpmdW5jdGlvbiBBZGRGaWVsZFNldCgkbW9kdWxlLCRuYW1lLCRmaWVsZHMpCmZ1bmN0aW9uIEdldEZpZWxkU2V0KCRtb2R1bGUsICRuYW1lKQoKLyoKICoKICogQ29ubmVjdGlvbiBmdW5jdGlvbnMKICoKICovCmZ1bmN0aW9uIFNldEVudGl0eUNvbm5lY3Rpb24oJGlkMSwgJGlkMiwgJHR5cGU9IiIpCmZ1bmN0aW9uIENsZWFyRW50aXR5Q29ubmVjdGlvbnMoJGlkMSwgJGlkMj0tMSwgJHR5cGU9IiIpCmZ1bmN0aW9uIENsZWFyRW50aXR5Q29ubmVjdGlvbigkaWQxLCAkaWQyLCAkdHlwZT0iIikKZnVuY3Rpb24gQ2hlY2tFbnRpdHlDb25uZWN0aW9uKCRpZDEsJGlkMiwkdHlwZT0iIikKZnVuY3Rpb24gR2V0RW50aXR5Q29ubmVjdGlvbnMoJGlkMT0tMSwgJGlkMj0tMSwgJGJvdGh3YXlzPXRydWUsICR0eXBlPSIiKSAvL0RvZXMgbm90IHdvcmsKCi8qCiAqCiAqIEVycm9yIGhhbmRsaW5nCiAqCiAqLwpmdW5jdGlvbiBFcnJvcigkZXJyb3J0ZXh0LCRyZXR1cm52YWx1ZT1mYWxzZSwkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIEdldEVycm9ycygkbmwyYnI9dHJ1ZSwkY2xlYXI9dHJ1ZSkKZnVuY3Rpb24gU2hvd0Vycm9ycygkY2xlYXI9dHJ1ZSkKZnVuY3Rpb24gSW5FcnJvcigpIDogYm9vbAo8L3ByZT48aDM+UGFyYW1ldHJlPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldHJldCBhbmdpdmVyIGh2aWxrZXQgc3Byb2cgZGVyIHNrYWwgYnJ1Z2VzIHRpbCB2aXNuaW5nIGZvciBiZXMmb3NsYXNoO2dlbmRlLiBJa2tlIGFsbGUgbW9kdWxlciB1bmRlcnN0Jm9zbGFzaDt0dGVyIGVsbGVyIGJlaCZvc2xhc2g7dmVyIGRldHRlLjwvbGk+PC91bD4=</help>
	<about>PGJyIC8+TGF2ZXQgYWY6IE1vcnRlbiBwb3Vsc2VuICZsdDttb3J0ZW5AcG91bHNlbi5vcmcmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC4xLjA8YnIgLz48YnIgLz5IaXN0b3JpayBvdmVyICZhZWxpZztuZHJpbmdlcjo8YnIgLz48dWw+CjxsaT4wLjEuMCAtIEluaXRpYWwgcmVsZWFzZTwvbGk+CjwvdWw+PGJyIC8+</about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQppZiAoISR0aGlzLT5WaXNpYmxlVG9BZG1pblVzZXIoKSkgZXhpdDsNCg0KaWYgKGlzc2V0KCRwYXJhbXNbImFwcGx5ZmlsdGVyIl0pKSB7DQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJpZGZpbHRlciIsJHBhcmFtc1siaWRmaWx0ZXIiXSk7DQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJtb2R1bGVmaWx0ZXIiLCRwYXJhbXNbIm1vZHVsZWZpbHRlciJdKTsNCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRhYmxlZmlsdGVyIiwkcGFyYW1zWyJ0YWJsZWZpbHRlciJdKTsNCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInByb3BmaWx0ZXIiLCRwYXJhbXNbInByb3BmaWx0ZXIiXSk7DQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ2YWx1ZWZpbHRlciIsJHBhcmFtc1sidmFsdWVmaWx0ZXIiXSk7DQp9DQppZiAoaXNzZXQoJHBhcmFtc1sicmVzZXRnYWxsZXJ5ZmlsdGVyIl0pKSB7DQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJpZGZpbHRlciIsIiIpOw0KICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgibW9kdWxlZmlsdGVyIiwiIik7DQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0YWJsZWZpbHRlciIsIiIpOw0KICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgicHJvcGZpbHRlciIsIiIpOw0KICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidmFsdWVmaWx0ZXIiLCIiKTsNCn0NCg0KDQokZGI9JHRoaXMtPkdldERiKCk7DQokc3FsPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2UiOw0KJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHNxbCk7DQokcm93cz1hcnJheSgpOw0KJHRvdGFsY291bnQ9JHJlc3VsdC0+UmVjb3JkQ291bnQoKTsNCmlmICgkcmVzdWx0ICYmICgkcmVzdWx0LT5SZWNvcmRDb3VudCgpPjApKSB7DQoNCiAgd2hpbGUoJHJvdz0kcmVzdWx0LT5GZXRjaFJvdygpKSB7DQogICAgJHByb3BzPSR0aGlzLT5HZXRFbnRpdHkoJHJvd1siZW50aXR5aWQiXSk7DQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJpZGZpbHRlciIpIT0iIikgew0KICAgICAgaWYgKCFlcmVnaSgkdGhpcy0+R2V0UHJlZmVyZW5jZSgiaWRmaWx0ZXIiKSwkcm93WyJlbnRpdHlpZCJdKSkgY29udGludWU7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgibW9kdWxlZmlsdGVyIikhPSIiKSB7DQogICAgICBpZiAoIWVyZWdpKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJtb2R1bGVmaWx0ZXIiKSwkcm93WyJlbnRpdHltb2R1bGUiXSkpIGNvbnRpbnVlOw0KICAgIH0NCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmxlZmlsdGVyIikhPSIiKSB7DQogICAgICBpZiAoIWVyZWdpKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0YWJsZWZpbHRlciIpLCRyb3dbImVudGl0eXRhYmxlIl0pKSBjb250aW51ZTsNCiAgICB9DQoNCg0KICAgIGZvcmVhY2ggKCRwcm9wcyBhcyAkcHJvcG5hbWU9PiRwcm9wdmFsdWUpIHsNCiAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgicHJvcGZpbHRlciIpIT0iIikgew0KICAgICAgICBpZiAoIWVyZWdpKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJwcm9wZmlsdGVyIiksJHByb3BuYW1lKSkgY29udGludWU7DQogICAgICB9DQogICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoInZhbHVlZmlsdGVyIikhPSIiKSB7DQogICAgICAgIGlmICghZXJlZ2koJHRoaXMtPkdldFByZWZlcmVuY2UoInZhbHVlZmlsdGVyIiksJHByb3B2YWx1ZSkpIGNvbnRpbnVlOw0KICAgICAgfQ0KICAgICAgJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOw0KICAgICAgJG9uZXJvdy0+aWQ9JHJvd1siZW50aXR5aWQiXTsNCiAgICAgICRvbmVyb3ctPm1vZHVsZT0kcm93WyJlbnRpdHltb2R1bGUiXTsNCiAgICAgICRvbmVyb3ctPnRhYmxlPSRyb3dbImVudGl0eXRhYmxlIl07DQogICAgICAkb25lcm93LT5wcm9wbmFtZT0kcHJvcG5hbWU7DQogICAgICAkb25lcm93LT5wcm9wdmFsdWU9JHByb3B2YWx1ZTsNCiAgICAgIGFycmF5X3B1c2goJHJvd3MsICRvbmVyb3cpOw0KICAgIH0NCiAgICBpZiAoY291bnQoJHJvd3MpPjUwMCkgew0KICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJ0b29tYW55cm93cyIsJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoInRvb21hbnlyb3dzIikpKTsNCiAgICAgIGJyZWFrOw0KICAgIH0NCiAgfQ0KfQ0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignaXRlbXMnLCAkcm93cyk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdtb2QnLCAkdGhpcyk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dzKSk7DQoNCg0KLypGaWx0ZXIqLw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJmb3Jtc3RhcnQiLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oImZvcm1lbmQiLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCRpZCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhcHBseWZpbHRlciIsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwiYXBwbHlmaWx0ZXIiLCR0aGlzLT5MYW5nKCJhcHBseWZpbHRlciIpKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oInJlc2V0ZmlsdGVyIiwkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCJyZXNldGZpbHRlciIsJHRoaXMtPkxhbmcoInJlc2V0ZmlsdGVyIikpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigiaWRmaWx0ZXJpbnB1dCIsJHRoaXMtPkNyZWF0ZUlucHV0dGV4dCgkaWQsImlkZmlsdGVyIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiaWRmaWx0ZXIiKSkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJtb2R1bGVmaWx0ZXJpbnB1dCIsJHRoaXMtPkNyZWF0ZUlucHV0dGV4dCgkaWQsIm1vZHVsZWZpbHRlciIsJHRoaXMtPkdldFByZWZlcmVuY2UoIm1vZHVsZWZpbHRlciIpKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oInRhYmxlZmlsdGVyaW5wdXQiLCR0aGlzLT5DcmVhdGVJbnB1dHRleHQoJGlkLCJ0YWJsZWZpbHRlciIsJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmxlZmlsdGVyIikpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigicHJvcGZpbHRlcmlucHV0IiwkdGhpcy0+Q3JlYXRlSW5wdXR0ZXh0KCRpZCwicHJvcGZpbHRlciIsJHRoaXMtPkdldFByZWZlcmVuY2UoInByb3BmaWx0ZXIiKSkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJ2YWx1ZWZpbHRlcmlucHV0IiwkdGhpcy0+Q3JlYXRlSW5wdXR0ZXh0KCRpZCwidmFsdWVmaWx0ZXIiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ2YWx1ZWZpbHRlciIpKSk7DQoNCi8vJHRoaXMtPlNtYXJ0eUZvcm1TdGFydCgiZGVmYXVsdGFkbWluIixhcnJheSgibmFtZSI9PiJzdWJtaXRmaWx0ZXIiLCJ2YWx1ZSI9PiR0aGlzLT5MYW5nKCJhcHBseWZpbHRlciIpKSk7DQovLyR0aGlzLT5TbWFydHlGb3JtU3RhcnQoImRlZmF1bHRhZG1pbiIsYXJyYXkoIm5hbWUiPT4icmVzZXRmaWx0ZXIiLCJ2YWx1ZSI9PiR0aGlzLT5MYW5nKCJyZXNldGZpbHRlciIpKSk7DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnc2hvd2RhdGEudHBsJyk7DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbImZyaWVuZGx5bmFtZSJdPSJOZW8gRGF0YSBTdG9yYWdlIjsKJGxhbmdbImluc3RhbGxlZCJdPSJOZW8gRGF0YSBTdG9yYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQiOwokbGFuZ1sidW5pbnN0YWxsZWQiXT0iTmVvIERhdGEgU3RvcmFnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQiOwokbGFuZ1sibm9kYXRhIl09Ik5vIGRhdGEiOwoKJGxhbmdbImlkZmlsdGVyIl09IkVudGl0eSBJRCBpcyI7CiRsYW5nWyJtb2R1bGVmaWx0ZXIiXT0iTW9kdWxlIGlzIjsKJGxhbmdbInRhYmxlZmlsdGVyIl09IlRhYmxlbmFtZSBjb250YWlucyI7CiRsYW5nWyJwcm9wZmlsdGVyIl09IlByb3BlcnR5bmFtZSBjb250YWlucyI7CiRsYW5nWyJ2YWx1ZWZpbHRlciJdPSJWYWx1ZSBjb250YWlucyI7CiRsYW5nWyJhcHBseWZpbHRlciJdPSJBcHBseSBmaWx0ZXIiOwokbGFuZ1sicmVzZXRmaWx0ZXIiXT0iUmVzZXQgZmlsdGVyIjsKJGxhbmdbInNob3dmaWx0ZXJzIl09IlNob3cgZmlsdGVycyI7CiRsYW5nWyJmaWx0ZXJzIl09IkZpbHRlcnMiOwokbGFuZ1sicm93c2ZvdW5kIl09InJvd3MgZm91bmQiOwokbGFuZ1sidG9vbWFueXJvd3MiXT0iVG9vIG1hbnkgcm93cyBmb3VuZCwgbmFycm93IGl0IGRvd24gdXNpbmcgZmlsdGVycyI7CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/da_DK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ05FTyBEYXRhIFN0b3JhZ2UnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTkVPIERhdGEgU3RvcmFnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTkVPIERhdGEgU3RvcmFnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQnOwokbGFuZ1snaGVscCddID0gJ0FQSS1kb2N1bWVudGF0aW9uIHdpbGwgZW1lcmdlIGhlcmUnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My40NjEyNjM1NzIzNzQyOTIxMDAuMTIzNzMwMzU4NC4xMjM3MzAzNTg0LjEyMzgwMzEyOTAuMic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEyMzczMDM1ODQuMS4xLnV0bWNzcj0oZGlyZWN0KXx1dG1jY249KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ05FTyBEYXRhIFN0b3JhZ2UgJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ05FTyBEYXRhIFN0b3JhZ2UgaGFyIGJsaXR0IGluc3RhbGxlcnQnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdORU8gRGF0YSBTdG9yYWdlIGhhciBibGl0dCBhdmluc3RhbGxlcnQnOwokbGFuZ1snbm9kYXRhJ10gPSAnSW5nZW4gZGF0YSc7CiRsYW5nWydpZGZpbHRlciddID0gJ0VudGl0ZXRzIElEJiMwMzk7ZW4gZXInOwokbGFuZ1snbW9kdWxlZmlsdGVyJ10gPSAnTW9kdWxlbiBlcic7CiRsYW5nWyd0YWJsZWZpbHRlciddID0gJ1RhYmJlbGxuYXZuZXQgaW5uZWhvbGRlcic7CiRsYW5nWydwcm9wZmlsdGVyJ10gPSAnRWdlbnNrYXBzbmF2bmV0IGlubmVob2xkZXInOwokbGFuZ1sndmFsdWVmaWx0ZXInXSA9ICdWZXJkaSBpbm5laG9sZGVyJzsKJGxhbmdbJ2FwcGx5ZmlsdGVyJ10gPSAnU2wmYXJpbmc7IHAmYXJpbmc7IGZpbHRlcic7CiRsYW5nWydyZXNldGZpbHRlciddID0gJ1RpbGJha2VzdGlsbCBmaWx0ZXInOwokbGFuZ1snc2hvd2ZpbHRlcnMnXSA9ICdWaXMgZmlsdHJlJzsKJGxhbmdbJ2ZpbHRlcnMnXSA9ICdGaWx0cmUnOwokbGFuZ1sncm93c2ZvdW5kJ10gPSAncmFkZXIgZnVubmV0JzsKJGxhbmdbJ3Rvb21hbnlyb3dzJ10gPSAnRm9yIG1hbmdlIHJhZGVyIGZ1bm5ldCwgYmVncmVucyBkZXR0ZSB2ZWQgJmFyaW5nOyBiZW55dHRlIGZpbHRyZSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEyNDUxOTAxOTYuMTQ0NC4zNi51dG1jc3I9dGhlbWVzLmNtc21hZGVzaW1wbGUub3JnfHV0bWNjbj0ocmVmZXJyYWwpfHV0bWNtZD1yZWZlcnJhbHx1dG1jY3Q9L2Rvd25sb2FkX3RoZW1lcy5odG1sJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTc5MDUyNjIzMDg0MTEwMTAwLjEyMTA0MjM1NzcuMTI0NzM4Mjg2MC4xMjQ3Mzk0MjE5LjE1NjMnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ05FTyBEYXRhIFN0b3JhZ2UgJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ05FTyBEYXRhIFN0b3JhZ2UgbW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ05FTyBEYXRhIFN0b3JhZ2UgbW9kdWxlIGlzIHZlcndpamRlcmQnOwokbGFuZ1snbm9kYXRhJ10gPSAnR2VlbiBkYXRhJzsKJGxhbmdbJ2lkZmlsdGVyJ10gPSAnRW50aXR5IElkIGlzJzsKJGxhbmdbJ21vZHVsZWZpbHRlciddID0gJ01vZHVsZSBpcyAnOwokbGFuZ1sndGFibGVmaWx0ZXInXSA9ICdUYWJlbG5hYW0gYmV2YXQnOwokbGFuZ1sncHJvcGZpbHRlciddID0gJ0VpZ2Vuc2NoYXBuYWFtIGJldmF0JzsKJGxhbmdbJ3ZhbHVlZmlsdGVyJ10gPSAnV2FhcmRlIGJldmF0JzsKJGxhbmdbJ2FwcGx5ZmlsdGVyJ10gPSAnRmlsdGVyIHRvZXBhc3Nlbic7CiRsYW5nWydyZXNldGZpbHRlciddID0gJ0ZpbHRlciBoZXJzdGVsbGVuJzsKJGxhbmdbJ3Nob3dmaWx0ZXJzJ10gPSAnVG9vbiBmaWx0ZXJzJzsKJGxhbmdbJ2ZpbHRlcnMnXSA9ICdGaWx0ZXJzICc7CiRsYW5nWydyb3dzZm91bmQnXSA9ICdyZWdlbHMgZ2V2b25kZW4nOwokbGFuZ1sndG9vbWFueXJvd3MnXSA9ICdUZSB2ZWVsIHJlZ2VscyBnZXZvbmRlbiwgcGFzIGVlbiBmaWx0ZXIgdG9lJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuNzA2NzkyMTcyMzc0MDYxMjAwLjEyNDU3MDMzMjkuMTI0NzQzMTUzNC4xMjQ3NDY1Nzc3LjI1JzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI0NTcwMzMyOS4xLjEudXRtY3NyPShkaXJlY3QpfHV0bWNjbj0oZGlyZWN0KXx1dG1jbWQ9KG5vbmUpJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ro_RO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ05lbyBTdG9jYXJlIERhdGUnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTmVvIFN0b2NhcmUgRGF0ZSBhIGZvc3QgaW5zdGFsYXQgY3Ugc3VjY2VzJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTmVvIFN0b2NhcmUgRGF0ZSBhIGZvc3QgZGV6aW5zdGFsYXQnOwokbGFuZ1snbm9kYXRhJ10gPSAnRmFyYSBkYXRlJzsKJGxhbmdbJ2lkZmlsdGVyJ10gPSAnSUQtdWwgZW50aXRhdGlpIGVzdGUnOwokbGFuZ1snbW9kdWxlZmlsdGVyJ10gPSAnTW9kdWx1bCBlc3RlJzsKJGxhbmdbJ3RhYmxlZmlsdGVyJ10gPSAnTnVtZSB0YWJlbCBjb250aW5lJzsKJGxhbmdbJ3Byb3BmaWx0ZXInXSA9ICdOdW1lIHByb3ByaWV0YXRlIGNvbnRpbmUnOwokbGFuZ1sndmFsdWVmaWx0ZXInXSA9ICdWYWxvYXJlYSBjb250aW5lJzsKJGxhbmdbJ2FwcGx5ZmlsdGVyJ10gPSAnQXBsaWNhcmUgZmlsdHJ1JzsKJGxhbmdbJ3Jlc2V0ZmlsdGVyJ10gPSAnUmVzZXRhcmUgZmlsdHJ1JzsKJGxhbmdbJ3Nob3dmaWx0ZXJzJ10gPSAnQWZpc2FyZSBmaWx0cmUnOwokbGFuZ1snZmlsdGVycyddID0gJ0ZpbHRyZSc7CiRsYW5nWydyb3dzZm91bmQnXSA9ICdyYW5kdXJpIGdhc2l0ZSc7CiRsYW5nWyd0b29tYW55cm93cyddID0gJ1ByZWEgbXVsdGUgcmFuZHVyaSBnYXNpdGUsIG1pY3NvcmF0aSBudW1hcnVsIGZvbG9zaW5kIGZpbHRyZWxlJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTUyNjAzNzM1MC4xMjUxOTU5MzQzLjEyNTE5ODExOTIuMTI1MTk4NTY4OC41JzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjUxOTU5MzQzLjEuMS51dG1jc3I9Z29vZ2xlfHV0bWNjbj0ob3JnYW5pYyl8dXRtY21kPW9yZ2FuaWN8dXRtY3RyPWNtc21hZGVzaW1wbGUnOwokbGFuZ1sncWNhJ10gPSAnUDAtOTAxNjUzNDczLTEyNTE5NTkzNDI3MjknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAkZGI9JHRoaXMtPkdldERiKCk7CiAgJGZsZHMgPSAiCgkJCWVudGl0eWlkIEkgS0VZLAoJCQllbnRpdHltb2R1bGUgQyg4MCksCiAgICAgIGVudGl0eXRhYmxlIEMoNDApLAogICAgICBlbnRpdHlleHRyYWtleSBDKDgwKQoJIjsKCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2UiLCRmbGRzLCAkdGFib3B0YXJyYXkpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZV9zZXEiKTsKCiAgJGZsZHMgPSAiCgkJCWVudGl0eWlkIEksCgkJCXByb3BuYW1lIEMoODApLAogICAgICBwcm9wdHlwZSBDKDQwKSwKCQkJcHJvcHZhbHVlIFgKCSI7CgkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX25lb2RhdGFzdG9yYWdlX3Byb3BzIiwkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCiAgJGZsZHMgPSAiCgkJCWVudGl0eWlkMSBJLAoJCQllbnRpdHlpZDIgSSwKICAgICAgdHlwZSBDKDQwKQoJIjsKCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2VfY29ubmVjdGlvbnMiLCRmbGRzLCAkdGFib3B0YXJyYXkpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKICAkdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignYWNjZXNzbmVvZGF0YXN0b3JhZ2UnLCdBY2Nlc3MgdG8gdGhlIE5lb0RhdGFTdG9yYWdlLXBhZ2UnKTsKICAKICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoKTsKCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2UiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX25lb2RhdGFzdG9yYWdlX3NlcSIgKTsKCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX25lb2RhdGFzdG9yYWdlX3Byb3BzIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZV9jb25uZWN0aW9ucyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignYWNjZXNzbmVvZGF0YXN0b3JhZ2UnKTsKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCj8+]]></data>
	</file>
	<file>
	  <filename>/NeoDataStorage.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogIyBOZW9EYXRhU3RvcmFnZS4gQW4gZ2VuZXJhbCBwdXJwb3NlIGRhdGFzdG9yYWdlIG1vZHVsZWNsYXNzIGZvciBDTVMgTWFkZSBTaW1wbGUNCiAjIChjKTIwMDkgYnkgTW9ydGVuIFBvdWxzZW4gKG1vcnRlbkBwb3Vsc2VuLm9yZykNCiAjDQogI0NNUyAtIENNUyBNYWRlIFNpbXBsZQ0KICMoYykyMDA0LTA5IGJ5IFRlZCBLdWxwICh3aXNoeUB1c2Vycy5zZi5uZXQpDQogI1RoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vY21zbWFkZXNpbXBsZS5zZi5uZXQNCiAjDQogI1RoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQogIw0KICNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KICNpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICN0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KICMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICMNCiAjVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogI01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiAjR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAjWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAjYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAjRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KICMNCiAjJElkJA0KICMNCiAqLw0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImlzX2Fzc29jIikpIHsNCiAgZnVuY3Rpb24gaXNfYXNzb2MoJGFycmF5KSB7DQogICAgcmV0dXJuIChpc19hcnJheSgkYXJyYXkpICYmIDAgIT09IGNvdW50KGFycmF5X2RpZmZfa2V5KCRhcnJheSwgYXJyYXlfa2V5cyhhcnJheV9rZXlzKCRhcnJheSkpKSkpOw0KICB9DQp9DQoNCmNsYXNzIE5lb0RhdGFTdG9yYWdlIGV4dGVuZHMgQ01TTW9kdWxlIHsNCiAgdmFyICRfc29ydGZpZWxkczsNCiAgdmFyICRfZmllbGRzZXRzPWFycmF5KCk7DQogIHZhciAkX2Vycm9ycz0iIjsNCg0KICBmdW5jdGlvbiBHZXROYW1lKCkgew0KICAgIHJldHVybiAnTmVvRGF0YVN0b3JhZ2UnOw0KICB9DQoNCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygiZnJpZW5kbHluYW1lIik7DQogIH0NCg0KICBmdW5jdGlvbiBIYXNBZG1pbigpIHsNCiAgICByZXR1cm4gdHJ1ZTsNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQl7DQogICAgcmV0dXJuICcwLjEuMCc7DQogIH0NCg0KICBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zPWFycmF5KCkpIHsNCiAgICBpZiAoJGNhcGFiaWxpdHk9PSJkYXRhc3RvcmFnZSIpIHJldHVybiB0cnVlOw0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldEhlbHAoKSB7DQogICAgcmV0dXJuICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2hlbHAudHBsJyk7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRBdXRob3IoKSB7DQogICAgcmV0dXJuICdNb3J0ZW4gcG91bHNlbic7DQogIH0NCg0KDQogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgew0KICAgIHJldHVybiAnbW9ydGVuQHBvdWxzZW4ub3JnJzsNCiAgfQ0KDQoNCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgew0KICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjaGFuZ2Vsb2cudHBsJyk7DQogIH0NCg0KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKSB7DQogICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ2FjY2Vzc25lb2RhdGFzdG9yYWdlJyk7DQogIH0NCg0KICAvKg0KICAgKg0KICAgKiBBUEktZnVuY3Rpb25zDQogICAqDQogICAqLw0KDQogIGZ1bmN0aW9uIEFkZEVudGl0eSgkbW9kdWxlLCAkdGFibGUsICRwcm9wcz1hcnJheSgpKSB7DQogICAgJGRiPSR0aGlzLT5HZXREYigpOw0KICAgICRuZXdpZD0kZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX25lb2RhdGFzdG9yYWdlX3NlcSIpOw0KDQogICAgJHNxbD0iSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZSAoZW50aXR5aWQsZW50aXR5bW9kdWxlLGVudGl0eXRhYmxlKSBWQUxVRVMgKD8sPyw/KSI7DQogICAgJHZhbHVlcz1hcnJheSgkbmV3aWQsJG1vZHVsZSwkdGFibGUpOw0KICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRzcWwsJHZhbHVlcyk7DQogICAgaWYgKCEkcmVzdWx0KSByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBBZGRFbnRpdHk6IGVycm9yIGFkZGluZyBlbnRpdHkiLGZhbHNlLGFycmF5KCRwcm9wcykpOw0KDQogICAgaWYgKCFlbXB0eSgkcHJvcHMpKSB7DQogICAgICAvL2VjaG8gImhlcmUiOw0KICAgICAgJHRoaXMtPlNldEVudGl0eVByb3BzKCRuZXdpZCwgJHByb3BzLCBmYWxzZSk7DQogICAgfQ0KDQogICAgcmV0dXJuICRuZXdpZDsNCiAgfQ0KDQogIGZ1bmN0aW9uIERlbGV0ZUVudGl0eSgkaWQpIHsNCiAgICAkdGhpcy0+Q2xlYXJFbnRpdHlQcm9wcygkaWQpOw0KICAgICR0aGlzLT5DbGVhckVudGl0eUNvbm5lY3Rpb25zKCRpZCk7DQogICAgJGRiPSR0aGlzLT5HZXREYigpOw0KDQogICAgJHNxbD0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZSBXSEVSRSBlbnRpdHlpZD0/IjsNCiAgICAkdmFsdWVzPWFycmF5KCRpZCk7DQogICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsNCiAgICBpZiAoISRyZXN1bHQpICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gRGVsZXRlRW50aXR5OiBlcnJvciBkZWxldGluZyBlbnRpdHkiLGZhbHNlLGFycmF5KCJpZCI9PiRpZCkpOw0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQoNCiAgZnVuY3Rpb24gR2V0RW50aXR5V2l0aFR5cGUoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpKSB7DQogICAgcmV0dXJuICR0aGlzLT5HZXRFbnRpdHkoJGlkLCAkb3ZlcnJpZGVwcm9wcywgdHJ1ZSk7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRFbnRpdHkoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpLCAkd2l0aHR5cGU9ZmFsc2UpIHsNCiAgICAkZGI9JHRoaXMtPkdldERiKCk7DQoNCiAgICAkc3FsPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2VfcHJvcHMgV0hFUkUgZW50aXR5aWQ9PyI7DQogICAgJHZhbHVlcz1hcnJheSgkaWQpOw0KICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsNCiAgICBpZiAoISRkYnJlc3VsdCB8fCAoJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPT0wKSkgew0KICAgICAgaWYgKCEkcmVzdWx0KSAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIEdldEVudGl0eTogZXJyb3IgZ2V0dGluZyBlbnRpdHkiLGZhbHNlLGFycmF5KCJpZCI9PiRpZCkpOw0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICAkcmVzdWx0PWFycmF5KCk7DQogICAgd2hpbGUoJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCkpIHsNCiAgICAgIGlmICgkd2l0aHR5cGUpIHsNCiAgICAgICAgJHJlc3VsdFskcm93WyJwcm9wbmFtZSJdXT1hcnJheSgidmFsdWUiPT4kcm93WyJwcm9wdmFsdWUiXSwidHlwZSI9PiRyb3dbInByb3B0eXBlIl0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgJHJlc3VsdFskcm93WyJwcm9wbmFtZSJdXT0kcm93WyJwcm9wdmFsdWUiXTsNCiAgICAgIH0NCiAgICAgIGlmIChpc3NldCgkb3ZlcnJpZGVwcm9wc1skcm93WyJwcm9wbmFtZSJdXSkpIHsNCg0KICAgICAgICBpZiAoJHdpdGh0eXBlKSB7DQogICAgICAgICAgLy9Ob3cgdGhpcyBpcyBqdXN0IGJlYXRpZnVsDQogICAgICAgICAgJHJlc3VsdFskcm93WyJwcm9wbmFtZSJdXT0kb3ZlcnJpZGVwcm9wc1skcm93WyJwcm9wbmFtZSJdXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAkcmVzdWx0WyRyb3dbInByb3BuYW1lIl1dPWFycmF5KCJ2YWx1ZSI9PiRvdmVycmlkZXByb3BzWyRyb3dbInByb3BuYW1lIl1dLCJ0eXBlIj0+InVua25vd24iKTsNCiAgICAgICAgfQ0KDQogICAgICB9DQogICAgfQ0KICAgICRyZXN1bHRbImlkIl09JGlkOw0KICAgICRyZXN1bHRbImVudGl0eWlkIl09JGlkOw0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQoNCiAgZnVuY3Rpb24gR2V0RW50aXRpZXMoJG1vZHVsZSwgJHRhYmxlPSIiLCAkY3JpdGVyaWE9YXJyYXkoKSkgew0KICAgICRkYj0kdGhpcy0+R2V0RGIoKTsNCiAgICAvL2VjaG8gJG1vZHVsZTsgZWNobyAkdGFibGU7ZGllKCk7DQogICAgJHNxbD0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX25lb2RhdGFzdG9yYWdlIFdIRVJFIGVudGl0eW1vZHVsZT0/IjsNCiAgICAkdmFsdWVzPWFycmF5KCRtb2R1bGUpOw0KICAgIGlmICgkdGFibGUhPSIiKSB7DQogICAgICAkc3FsLj0iIEFORCBlbnRpdHl0YWJsZT0/IjsNCiAgICAgICR2YWx1ZXM9YXJyYXkoJG1vZHVsZSwkdGFibGUpOw0KICAgIH0NCg0KICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsNCiAgICBpZiAoISRkYnJlc3VsdCB8fCAoJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPT0wKSkgew0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICAkcmVzdWx0PWFycmF5KCk7DQogICAgd2hpbGUoJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCkpIHsNCiAgICAgICRmYWlsZWQ9ZmFsc2U7DQogICAgICBpZiAoIWVtcHR5KCRjcml0ZXJpYSkpIHsNCiAgICAgICAgJGVudGl0eT0kdGhpcy0+R2V0RW50aXR5KCRyb3dbImVudGl0eWlkIl0pOw0KICAgICAgICBmb3JlYWNoKCRjcml0ZXJpYSBhcyAkY3Byb3A9PiRjdmFsdWUpIHsNCiAgICAgICAgICBpZiAoIWlzc2V0KCRlbnRpdHlbJGNwcm9wXSkgfHwoaXNzZXQoJGVudGl0eVskY3Byb3BdKSAmJiAkZW50aXR5WyRjcHJvcF0hPSRjdmFsdWUpKSB7DQogICAgICAgICAgICAkZmFpbGVkPXRydWU7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRmYWlsZWQpIGNvbnRpbnVlOyAvL0NyaXRlcmlhIGZhaWxlZA0KICAgICAgfQ0KICAgICAgJHJvd1siaWQiXT0kcm93WyJlbnRpdHlpZCJdOw0KICAgICAgJHJlc3VsdFtdPSRyb3c7DQogICAgfQ0KICAgIGlmIChjb3VudCgkcmVzdWx0KT09MCkgcmV0dXJuIGZhbHNlOw0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQoNCiAgZnVuY3Rpb24gR2V0T25lRW50aXR5KCRtb2R1bGUsICR0YWJsZSwgJGNyaXRlcmlhPWFycmF5KCksICRmYWlsaWZtdWx0aXBsZT1mYWxzZSkgew0KICAgIC8vZWNobyAkbW9kdWxlO2VjaG8gJHRhYmxlOw0KICAgIC8vcHJpbnRfcigkY3JpdGVyaWEpO2RpZSgpOy8vDQogICAgJGVudGl0aWVzPSR0aGlzLT5HZXRFbnRpdGllc0Z1bGwoJG1vZHVsZSwgJHRhYmxlLCAkY3JpdGVyaWEpOw0KDQogICAgaWYgKCEkZW50aXRpZXMpIHJldHVybiBmYWxzZTsNCg0KICAgIGlmIChjb3VudCgkZW50aXRpZXMpPjEgJiYgJGZhaWxpZm11bHRpcGxlKSByZXR1cm4gZmFsc2U7DQogICAgLy9wcmludF9yKCRlbnRpdGllcyk7DQogICAgZm9yZWFjaCAoJGVudGl0aWVzIGFzICRlbnRpdHkpIHsNCiAgICAgIHJldHVybiAkZW50aXR5OyAvL0htbSwgdGhpcyBpcyB1Z2x5IHJpZ2h0PyBidXQgd29ya3MgOikNCiAgICB9DQoNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldEVudGl0aWVzRnVsbCgkbW9kdWxlLCAkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpKSB7DQogICAgJHNpbXBsZWVudGl0aWVzPSR0aGlzLT5HZXRFbnRpdGllcygkbW9kdWxlLCAkdGFibGUsICRjcml0ZXJpYSk7DQogICAgaWYgKCEkc2ltcGxlZW50aXRpZXMgfHwgZW1wdHkoJHNpbXBsZWVudGl0aWVzKSkgcmV0dXJuIGZhbHNlOw0KDQogICAgJGZ1bGxlbnRpdGllcz1hcnJheSgpOw0KICAgIGZvcmVhY2ggKCRzaW1wbGVlbnRpdGllcyBhcyAkc2ltcGxlZW50aXR5KSB7DQogICAgICAkZW50aXR5PSR0aGlzLT5HZXRFbnRpdHkoJHNpbXBsZWVudGl0eVsiZW50aXR5aWQiXSk7DQogICAgICBpZiAoJGVudGl0eSE9PWZhbHNlKSB7DQogICAgICAgIC8vcHJpbnRfcigkZW50aXR5KTtkaWUoKTsNCiAgICAgICAgJGVudGl0eVsiaWQiXT0kZW50aXR5WyJlbnRpdHlpZCJdOw0KICAgICAgICAkZnVsbGVudGl0aWVzW109JGVudGl0eTsNCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICRmdWxsZW50aXRpZXM7DQogIH0NCg0KICBmdW5jdGlvbiBFbnRpdGllc0NvdW50KCRtb2R1bGUsICR0YWJsZT0iIiwgJGNyaXRlcmlhPWFycmF5KCkpIHsNCiAgICAkZW50aXRpZXM9JHRoaXMtPkdldEVudGl0aWVzKCRtb2R1bGUsICR0YWJsZSwgJGNyaXRlcmlhKTsNCiAgICByZXR1cm4gY291bnQoJGVudGl0aWVzKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIFNldEVudGl0eVByb3AoJGlkLCRwcm9wbmFtZSwkcHJvcHZhbHVlLCRwcm9wdHlwZT0idW5kZWZpbmVkIikgew0KICAvLyAgZWNobyAkcHJvcG5hbWU7DQogICAgJGRiPSR0aGlzLT5HZXREYigpOw0KICAgICRzcWw9IklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2VfcHJvcHMgKGVudGl0eWlkLHByb3BuYW1lLHByb3B2YWx1ZSxwcm9wdHlwZSkgVkFMVUVTICg/LD8sPyw/KSI7DQogICAgJHZhbHVlcz1hcnJheSgkaWQsJHByb3BuYW1lLCRwcm9wdmFsdWUsJHByb3B0eXBlKTsNCg0KICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRzcWwsJHZhbHVlcyk7DQogICAgaWYgKCEkcmVzdWx0KSAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIFNldEVudGl0eVByb3A6IGVycm9yIHNldHRpbmcgZW50aXR5LXByb3AiLGZhbHNlLGFycmF5KCJlbnRpdHlpZCI9PiRpZCwicHJvcHR5cGUiPT4kcHJvcHR5cGUpKTsNCiAgICByZXR1cm4gJHJlc3VsdDsNCiAgfQ0KDQogIGZ1bmN0aW9uIENsZWFyRW50aXR5KCRpZCkgew0KICAgICR0aGlzLT5DbGVhckVudGl0eUNvbm5lY3Rpb25zKCRpZCwkaWQpOw0KICAgICR0aGlzLT5DbGVhckVudGl0eVByb3BzKCRpZCk7DQogICAgJGRiPSR0aGlzLT5HZXREYigpOw0KICAgICRzcWw9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2UgV0hFUkUgZW50aXR5aWQ9PyI7DQogICAgJHZhbHVlcz1hcnJheSgkaWQpOw0KICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRzcWwsJHZhbHVlcyk7DQogICAgaWYgKCEkcmVzdWx0KSAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIENsZWFyRW50aXR5OiBlcnJvciBjbGVhcmluZyBlbnRpdHkiLGZhbHNlLGFycmF5KCJpZCI9PiRpZCkpOw0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQoNCiAgZnVuY3Rpb24gQ2xlYXJNb2R1bGVFbnRpdGllcygkbW9kdWxlKSB7DQoNCiAgICAkZW50aXRpZXM9JHRoaXMtPkdldEVudGl0aWVzKCRtb2R1bGUpOw0KDQogICAgaWYgKCEkZW50aXRpZXMpIHJldHVybjsNCi8vZGllKCk7DQogICAgZm9yZWFjaCAoJGVudGl0aWVzIGFzICRlbnRpdHkpIHsNCiAgICAgICR0aGlzLT5DbGVhckVudGl0eSgkZW50aXR5WyJlbnRpdHlpZCJdKTsNCiAgICB9DQogIH0NCg0KICBmdW5jdGlvbiBDbGVhckVudGl0eVByb3AoJGlkLCAkcHJvcG5hbWUpIHsNCiAgICAkZGI9JHRoaXMtPkdldERiKCk7DQogICAgJHNxbD0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZV9wcm9wcyBXSEVSRSBlbnRpdHlpZD0/IEFORCBwcm9wbmFtZT0/IjsNCiAgICAkdmFsdWVzPWFycmF5KCRpZCwkcHJvcG5hbWUpOw0KICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRzcWwsJHZhbHVlcyk7DQogICAgaWYgKCEkcmVzdWx0KSAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIENsZWFyRW50aXR5UHJvcDogZXJyb3IgY2xlYXJpbmcgZW50aXR5cHJvcCIsZmFsc2UsYXJyYXkoImlkIj0+JGlkLCJwcm9wbmFtZSI9PiRwcm9wbmFtZSkpOw0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQoNCiAgZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wcygkaWQpIHsNCiAgICAkZGI9JHRoaXMtPkdldERiKCk7DQogICAgJHNxbD0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZV9wcm9wcyBXSEVSRSBlbnRpdHlpZD0/IjsNCiAgICAkdmFsdWVzPWFycmF5KCRpZCk7DQogICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsNCiAgICBpZiAoISRyZXN1bHQpICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wczogZXJyb3IgY2xlYXJpbmcgZW50aXR5cHJvcHMiLGZhbHNlLGFycmF5KCJpZCI9PiRpZCkpOw0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQoNCiAgZnVuY3Rpb24gU2V0RW50aXR5UHJvcHNGcm9tQXJyYXkoJGlkLCAkcHJvcHMsICR2YWx1ZXMsICRjbGVhcj10cnVlKSB7ICAgIA0KICAgIGlmICghaXNfYXJyYXkoJHByb3BzKSB8fCAhaXNfYXJyYXkoJHZhbHVlcykpIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIFNldEVudGl0eVByb3BzRnJvbUFycmF5OiBcJHByb3BzIGFuZCBcJHZhbHVlcyBtdXN0IGJlIGFuIGFycmF5cyIpOw0KICAgIA0KICAgIGZvcmVhY2ggKCRwcm9wcyBhcyAkcHJvcG5hbWUpIHsgICAgICANCiAgICAgIGlmIChpc3NldCgkdmFsdWVzWyRwcm9wbmFtZV0pKSB7DQogICAgICAgICR2YWx1ZT0kdmFsdWVzWyRwcm9wbmFtZV07DQogICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7ICAgICAgICANCiAgICAgICAgICAkdGhpcy0+U2V0RW50aXR5UHJvcCgkaWQsICRwcm9wbmFtZSwgJHZhbHVlWyJ2YWx1ZSJdLCR2YWx1ZVsidHlwZSJdKTsNCiAgICAgICAgfSBlbHNlIHsgICAgICAgIA0KICAgICAgICAgICR0aGlzLT5TZXRFbnRpdHlQcm9wKCRpZCwgJHByb3BuYW1lLCAkdmFsdWUpOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBpZiAoJGNsZWFyKSAkdGhpcy0+Q2xlYXJFbnRpdHlQcm9wKCRpZCwgJHByb3BuYW1lKTsNCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICRpZDsNCiAgfQ0KICANCg0KICBmdW5jdGlvbiBTZXRFbnRpdHlQcm9wcygkaWQsICRwcm9wcy8qLCAkY2xlYXI9dHJ1ZSovKSB7DQogICAgLy9wcmludF9yKCRwcm9wcyk7ICBlY2hvICJoaTIiOyBkaWUoKTsNCiAgICAvL3ByaW50X3IoJHByb3BzKTtlY2hvIjxici8+PGJyLz4iOw0KICAgICAgICAvL2VjaG8gJGlkO2RpZSgpDQogICAgaWYgKCFpc19hcnJheSgkcHJvcHMpIHx8ICFpc19hc3NvYygkcHJvcHMpKSByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBTZXRFbnRpdHlQcm9wczogXCRwcm9wcyBtdXN0IGJlIGFuIGFzc29jIGFycmF5Iik7DQogICAgZm9yZWFjaCAoJHByb3BzIGFzICRwcm9wbmFtZT0+JHByb3B2YWx1ZSkgew0KICAgICAgLy9pZiAoJGNsZWFyKSAkdGhpcy0+Q2xlYXJFbnRpdHlQcm9wKCRpZCwgJHByb3BuYW1lKTsNCiAgICAgIGlmIChpc19hcnJheSgkcHJvcHZhbHVlKSkgew0KICAgICAgICAvLyAgcHJpbnRfcigkcHJvcHZhbHVlKTtkaWUoKTsNCiAgICAgICAgJHRoaXMtPlNldEVudGl0eVByb3AoJGlkLCAkcHJvcG5hbWUsICRwcm9wdmFsdWVbInZhbHVlIl0sJHByb3B2YWx1ZVsidHlwZSJdKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIC8vZWNobyAkcHJvcG5hbWU7DQogICAgICAgIC8vZWNobyAiaGkyIjsgZGllKCk7DQogICAgICAgICR0aGlzLT5TZXRFbnRpdHlQcm9wKCRpZCwgJHByb3BuYW1lLCAkcHJvcHZhbHVlKTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4gJGlkOw0KDQogIH0NCg0KICAvL0RvZXMgbm90IHdvcmshDQogIGZ1bmN0aW9uIFNldEVudGl0eVByb3BzT25Dcml0ZXJpYSgkbW9kdWxlLCR0YWJsZSwgJHByb3BzLCAkY3JpdGVyaWEsICRjcmVhdGU9dHJ1ZSwgJGNsZWFyPWZhbHNlKSB7DQogICAgLypwcmludF9yKCRwcm9wcyk7ZWNobyI8YnIvPjxici8+IjsNCiAgICBwcmludF9yKCRjcml0ZXJpYSk7ZGllKCk7Ki8NCiAgICAkZW50aXRpZXM9JHRoaXMtPkdldEVudGl0aWVzKCRtb2R1bGUsJHRhYmxlLCAkY3JpdGVyaWEpOw0KICAgIGlmICghJGVudGl0aWVzKSB7DQogICAgICBpZiAoJGNyZWF0ZSkgew0KICAgICAgICByZXR1cm4gJHRoaXMtPkFkZEVudGl0eSgkbW9kdWxlLCAkdGFibGUsICRwcm9wcyk7DQogICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICRjb3VudD0wOw0KICAgICAgZm9yZWFjaCgkZW50aXRpZXMgYXMgJGVudGl0eSkgew0KICAgICAgICAvKnByaW50X3IoJHByb3BzKTtlY2hvIjxici8+PGJyLz4iOw0KICAgICAgICBwcmludF9yKCRlbnRpdHkpO2RpZSgpOyovDQogICAgICAgICRjb3VudCsrOw0KICAgICAgICAkdGhpcy0+U2V0RW50aXR5UHJvcHMoJGVudGl0eVsiaWQiXSwkcHJvcHMsJGNsZWFyKTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4gJGNvdW50Ow0KICB9DQoNCiAgZnVuY3Rpb24gUmVzZXRFbnRpdHlQcm9wcygkaWQsICRuZXdwcm9wcz1hcnJheSgpKSB7DQogICAgJHRoaXMtPkNsZWFyRW50aXR5UHJvcHMoJGlkKTsNCiAgICAkdGhpcy0+U2V0RW50aXR5UHJvcHMoJGlkLCAkbmV3cHJvcHMsIGZhbHNlKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIFJlbW92ZU1vZHVsZUVudGl0aWVzKCRtb2R1bGVuYW1lKSB7DQogICAgJGVudGl0aWVzPSR0aGlzLT5HZXRFbnRpdGllcygkbW9kdWxlbmFtZSk7DQogICAgZm9yZWFjaCAoJGVudGl0aWVzIGFzICRlbnRpdHkpIHsNCiAgICAgICR0aGlzLT5EZWxldGVFbnRpdHkoJGVudGl0eVsiaWQiXSk7DQogICAgfQ0KICB9DQoNCg0KDQoNCiAgZnVuY3Rpb24gQ29tcGFyZUVudGl0aWVzKCRlbnRpdHkxLCAkZW50aXR5MiwgJHNvcnRmaWVsZCkgew0KICAgIGlmICghaXNzZXQoJGVudGl0eTFbJHNvcnRmaWVsZF0pKSByZXR1cm4gMDsNCiAgICBpZiAoIWlzc2V0KCRlbnRpdHkyWyRzb3J0ZmllbGRdKSkgcmV0dXJuIDA7DQogICAgaWYgKGlzX251bWVyaWMoJGVudGl0eTFbJHNvcnRmaWVsZF0pICYmIGlzX251bWVyaWMoJGVudGl0eTJbJHNvcnRmaWVsZF0pKSB7DQogICAgICBpZiAoJGVudGl0eTFbJHNvcnRmaWVsZF09PSRlbnRpdHkyWyRzb3J0ZmllbGRdKSByZXR1cm4gMDsNCiAgICAgIGlmICgkZW50aXR5MVskc29ydGZpZWxkXTwkZW50aXR5Mlskc29ydGZpZWxkXSkgcmV0dXJuIC0xOw0KICAgICAgcmV0dXJuIDE7DQogICAgfSBlbHNlIHsNCiAgICAgIHJldHVybiBzdHJjbXAoJGVudGl0eTFbJHNvcnRmaWVsZF0sJGVudGl0eTJbJHNvcnRmaWVsZF0pOw0KICAgIH0NCiAgfQ0KDQogIC8vRG9lcyBub3Qgd29yaw0KICBmdW5jdGlvbiBDb21wYXJlRW50aXRpZXNDb21wbGV4KCRlbnRpdHkxLCAkZW50aXR5MiwgJHNvcnRmaWVsZHMpIHsNCiAgICBpZiAoIWlzc2V0KCRlbnRpdHkxWyRzb3J0ZmllbGRdKSkgcmV0dXJuIDA7DQogICAgaWYgKCFpc3NldCgkZW50aXR5Mlskc29ydGZpZWxkXSkpIHJldHVybiAwOw0KICAgIGlmIChpc19udW1lcmljKCRlbnRpdHkxWyRzb3J0ZmllbGRdKSAmJiBpc19udW1lcmljKCRlbnRpdHkyWyRzb3J0ZmllbGRdKSkgew0KICAgICAgaWYgKCRlbnRpdHkxWyRzb3J0ZmllbGRdPT0kZW50aXR5Mlskc29ydGZpZWxkXSkgcmV0dXJuIDA7DQogICAgICBpZiAoJGVudGl0eTFbJHNvcnRmaWVsZF08JGVudGl0eTJbJHNvcnRmaWVsZF0pIHJldHVybiAtMTsNCiAgICAgIHJldHVybiAxOw0KICAgIH0gZWxzZSB7DQogICAgICByZXR1cm4gc3RyY21wKCRlbnRpdHkxWyRzb3J0ZmllbGRdLCRlbnRpdHkyWyRzb3J0ZmllbGRdKTsNCiAgICB9DQogIH0NCg0KICBmdW5jdGlvbiBJbnRlcm5hbENvbXBhcmVFbnRpdGllcygkZW50aXR5MSwgJGVudGl0eTIpIHsNCiAgICBpZiAoIWlzX2FycmF5KCR0aGlzLT5fc29ydGZpZWxkcykpIHsNCiAgICAgIHJldHVybiAkdGhpcy0+Q29tcGFyZUVudGl0aWVzKCRlbnRpdHkxLCAkZW50aXR5MiwgJHRoaXMtPl9zb3J0ZmllbGRzKTsNCiAgICB9IGVsc2Ugew0KICAgICAgcmV0dXJuICR0aGlzLT5Db21wYXJlRW50aXRpZXNDb21wbGV4KCRlbnRpdHkxLCAkZW50aXR5MiwgJHRoaXMtPl9zb3J0ZmllbGRzKTsNCiAgICB9DQogIH0NCg0KICBmdW5jdGlvbiBTb3J0RW50aXRpZXMoJGxpc3QsICRzb3J0ZmllbGRzKSB7DQogICAgJHRoaXMtPl9zb3J0ZmllbGRzPSRzb3J0ZmllbGRzOw0KICAgIHVzb3J0KCRsaXN0LCBhcnJheSgkdGhpcywiSW50ZXJuYWxDb21wYXJFbnRpdGllcyIpKTsNCiAgICByZXR1cm4gJGxpc3Q7DQogIH0NCg0KICBmdW5jdGlvbiBNYWtlU2ltcGxlQXJyYXkoJG1vZHVsZSwgJHRhYmxlLCRmaWVsZCkgew0KDQogIH0NCg0KICBmdW5jdGlvbiBNYWtlQXNzb2NBcnJheSgkbW9kdWxlLCAkdGFibGUsICRmaWVsZHMpIHsNCiAgICAkZW50aXRpZXM9JHRoaXMtPkdldEVudGl0aWVzRnVsbCgkbW9kdWxlLCR0YWJsZSk7DQogICAgaWYgKCEkZW50aXRpZXMpIHJldHVybiBmYWxzZTsNCiAgICAkcmVzdWx0PWFycmF5KCk7DQoNCiAgICBmb3JlYWNoICgkZW50aXRpZXMgYXMgJGVudGl0eSkgew0KICAgICAgZm9yZWFjaCAoJGZpZWxkcyBhcyAkaW5kZXg9PiR2YWx1ZSkgew0KICAgICAgICBpZiAoIWlzc2V0KCRlbnRpdHlbJGluZGV4XSkgfHwgIWlzc2V0KCRlbnRpdHlbJHZhbHVlXSkpIGNvbnRpbnVlOw0KDQogICAgICAgICRyZXN1bHRbJGVudGl0eVskaW5kZXhdXT0kZW50aXR5WyR2YWx1ZV07DQogICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQoNCiAgLyoNCiAgICoNCiAgICogRmllbGRzZXQgZnVuY3Rpb25zDQogICAqDQogICAqLw0KICBmdW5jdGlvbiBBZGRGaWVsZFNldCgkbW9kdWxlLCRuYW1lLCRmaWVsZHMpIHsNCiAgICBpZiAoIWlzX2FycmF5KCRmaWVsZHMpKSByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBBZGRGaWVsZFNldDogXCRmaWVsZHMgaXMgbm90IGFuIGFycmF5IiwgZmFsc2UsIGFycmF5KCJuYW1lIj0+JG5hbWUpKTsNCiAgICBpZiAoZW1wdHkoJGZpZWxkcykpIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIEFkZEZpZWxkU2V0OiBcJGZpZWxkcyBpcyBhbiBlbXB0eSBhcnJheSIsIGZhbHNlLCBhcnJheSgibmFtZSI9PiRuYW1lKSk7DQogICAgJHRoaXMtPl9maWVsZHNldHNbJG1vZHVsZS4iXyIuJG5hbWVdPSRmaWVsZHM7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRGaWVsZFNldCgkbW9kdWxlLCAkbmFtZSkgew0KICAgIGlmICghaXNzZXQoJHRoaXMtPl9maWVsZHNldHNbJG1vZHVsZS4iXyIuJG5hbWVdKSkgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gR2V0RmllbGRTZXQ6IGZpZWxkc2V0IGlzIG5vdCBwcmVzZW50IiwgZmFsc2UsIGFycmF5KCJuYW1lIj0+JG5hbWUpKTsgICAgDQogICAgcmV0dXJuICR0aGlzLT5fZmllbGRzZXRzWyRtb2R1bGUuIl8iLiRuYW1lXTsNCiAgfQ0KDQogIC8qDQogICAqDQogICAqIENvbm5lY3Rpb24gZnVuY3Rpb25zDQogICAqDQogICAqLw0KDQogIGZ1bmN0aW9uIFNldEVudGl0eUNvbm5lY3Rpb24oJGlkMSwgJGlkMiwgJHR5cGU9IiIpIHsNCiAgICBpZiAoJHRoaXMtPkNoZWNrRW50aXR5Q29ubmVjdGlvbigkaWQxLCRpZDIsJHR5cGUpKSByZXR1cm4gdHJ1ZTsNCiAgICAkZGI9JHRoaXMtPkdldERiKCk7DQogICAgJHNxbD0iSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZV9jb25uZWN0aW9ucyAoZW50aXR5aWQxLGVudGl0eWlkMix0eXBlKSBWQUxVRVMgKD8sPyw/KSI7DQogICAgJHZhbHVlcz1hcnJheSgkaWQxLCAkaWQyLCAkdHlwZSk7DQogICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsNCiAgICBpZiAoISRyZXN1bHQpICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gU2V0RW50aXR5Q29ubmVjdGlvbjogZXJyb3Igc2V0dGluZyBlbnRpdHkgY29ubmVjdGlvbiIsZmFsc2UsYXJyYXkoImlkMSI9PiRpZDEsImlkMiI9PiRpZDIpKTsNCiAgICByZXR1cm4gJHJlc3VsdDsNCiAgfQ0KDQogIGZ1bmN0aW9uIENsZWFyRW50aXR5Q29ubmVjdGlvbnMoJGlkMSwgJGlkMj0tMSwgJHR5cGU9IiIpIHsNCiAgICAkZGI9JHRoaXMtPkdldERiKCk7DQogICAgaWYgKCR0eXBlPT0iIikgew0KICAgICAgJHNxbD0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZV9jb25uZWN0aW9ucyBXSEVSRSBlbnRpdHlpZDE9PyBPUiBlbnRpdHlpZDI9PyI7DQogICAgICAkdmFsdWVzPWFycmF5KCRpZDEsICRpZDIpOw0KICAgICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsNCiAgICB9IGVsc2Ugew0KICAgICAgJHNxbD0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZV9jb25uZWN0aW9ucyBXSEVSRSAoZW50aXR5aWQxPT8gQU5EIHR5cGU9PykgT1IgKGVudGl0eWlkMj0/IEFORCB0eXBlPT8pIjsNCiAgICAgICR2YWx1ZXM9YXJyYXkoJGlkMSwgJHR5cGUsICRpZDIsICR0eXBlKTsNCiAgICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRzcWwsJHZhbHVlcyk7DQogICAgfQ0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQoNCiAgZnVuY3Rpb24gQ2xlYXJFbnRpdHlDb25uZWN0aW9uKCRpZDEsICRpZDIsICR0eXBlPSIiKSB7DQogICAgJGRiPSR0aGlzLT5HZXREYigpOw0KICAgIGlmICgkdHlwZT09IiIpIHsNCiAgICAgICRzcWw9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2VfY29ubmVjdGlvbnMgV0hFUkUgZW50aXR5aWQxPT8gQU5EIGVudGl0eWlkMj0/IjsNCiAgICAgICR2YWx1ZXM9YXJyYXkoJGlkMSwkaWQyKTsNCiAgICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRzcWwsJHZhbHVlcyk7DQogICAgfSBlbHNlIHsNCiAgICAgICRzcWw9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbmVvZGF0YXN0b3JhZ2VfY29ubmVjdGlvbnMgV0hFUkUgZW50aXR5aWQxPT8gQU5EIGVudGl0eWlkMj0/IEFORCB0eXBlPT8iOw0KICAgICAgJHZhbHVlcz1hcnJheSgkaWQxLCRpZDIsJHR5cGUpOw0KICAgICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsNCiAgICB9DQogICAgcmV0dXJuICRyZXN1bHQ7DQogIH0NCg0KICBmdW5jdGlvbiBDaGVja0VudGl0eUNvbm5lY3Rpb24oJGlkMSwkaWQyLCR0eXBlPSIiKSB7DQogICAgJGRiPSR0aGlzLT5HZXREYigpOw0KICAgICRzcWw9IiI7ICR2YWx1ZXM9IiI7DQogICAgaWYgKCR0eXBlPT0iIikgew0KICAgICAgJHNxbD0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX25lb2RhdGFzdG9yYWdlX2Nvbm5lY3Rpb25zIFdIRVJFIGVudGl0eWlkMT0/IEFORCBlbnRpdHlpZDI9PyI7DQogICAgICAkdmFsdWVzPWFycmF5KCRpZDEsJGlkMik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzcWw9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZW9kYXRhc3RvcmFnZV9jb25uZWN0aW9ucyBXSEVSRSBlbnRpdHlpZDE9PyBBTkQgZW50aXR5aWQyPT8gQU5EIHR5cGU9PyI7DQogICAgICAkdmFsdWVzPWFycmF5KCRpZDEsJGlkMiwkdHlwZSk7DQogICAgfQ0KICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRzcWwsJHZhbHVlcyk7DQogICAgaWYgKCRyZXN1bHQgJiYgKCRyZXN1bHQtPlJlY29yZENvdW50KCk+MCkpIHsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICByZXR1cm4gZmFsc2U7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRFbnRpdHlDb25uZWN0aW9ucygkaWQxPS0xLCAkaWQyPS0xLCAkYm90aHdheXM9dHJ1ZSwgJHR5cGU9IiIpIHsNCg0KICB9DQoNCiAgLyoNCiAgICoNCiAgICogRXJyb3IgaGFuZGxpbmcNCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIEVycm9yKCRlcnJvcnRleHQsJHJldHVybnZhbHVlPWZhbHNlLCRwYXJhbXM9YXJyYXkoKSkgew0KICAgICR0aGlzLT5fZXJyb3JzLj0kZXJyb3J0ZXh0Ow0KICAgIGlmICghZW1wdHkoJHBhcmFtcykgJiYgaXNfYXJyYXkoJHBhcmFtcykpIHsNCiAgICAgICR0aGlzLT5fZXJyb3JzLj0iICgiOw0KICAgICAgJGZpcnN0PXRydWU7IC8vSGFuZGxpbmcgdGhlIGNvbW1hDQogICAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRwYXJhbT0+JHZhbHVlKSB7DQogICAgICAgIGlmICgkZmlyc3QpICRmaXJzdD1mYWxzZTsgZWxzZSAkdGhpcy0+X2Vycm9ycy49IiwiOw0KICAgICAgICAkdGhpcy0+X2Vycm9ycy49JHBhcmFtLiI9PiIuJHZhbHVlLiIsIjsNCiAgICAgIH0NCiAgICAgICR0aGlzLT5fZXJyb3JzLj0iKSI7DQogICAgfQ0KICAgICR0aGlzLT5fZXJyb3JzLj0iXG4iOw0KICAgIHJldHVybiAkcmV0dXJudmFsdWU7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRFcnJvcnMoJG5sMmJyPXRydWUsJGNsZWFyPXRydWUpIHsNCiAgICAkZXJyb3JzPSR0aGlzLT5fZXJyb3JzOw0KICAgIGlmICgkbmwyYnIpIHsNCiAgICAgICRlcnJvcnM9bmwyYnIoJGVycm9ycyk7DQogICAgfQ0KICAgIGlmICgkY2xlYXIpIHsNCiAgICAgICR0aGlzLT5fZXJyb3JzPSIiOw0KICAgIH0NCiAgICByZXR1cm4gJGVycm9yczsNCiAgfQ0KDQogIGZ1bmN0aW9uIE91dHB1dEVycm9ycygkY2xlYXI9dHJ1ZSkgew0KICAgIGVjaG8gIlxuXG48ZGl2IHN0eWxlPSdib3JkZXI6M3B4IHNvbGlkIHJlZD5cbiI7DQogICAgZWNobyAkdGhpcy0+R2V0RXJyb3JzKHRydWUsJGNsZWFyKTsNCiAgICBlY2hvICJcbjwvZGl2PlxuXG4iOw0KICB9DQoNCiAgZnVuY3Rpb24gSW5FcnJvcigpIHsNCiAgICByZXR1cm4gKCR0aGlzLT5fZXJyb3JzIT0iIik7DQogIH0NCg0KfQ0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgo8bGk+MC4xLjAgLSBJbml0aWFsIHJlbGVhc2U8L2xpPgo8L3VsPg==]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0cm9uZz5Ob3RpY2UhIFRoaXMgaXMgYSBtb2R1bGUtZGV2ZWxvcGVyLW9ubHkgbW9kdWxlLiBJZiB5b3UgYXJlIG5vdCBhIGRldmVsb3Blcgp5b3UnbGwgcHJvYmFibHkganVzdCB3YW50IHRvIHNraXAgdGhlIGdvcnkgZGV0YWlscyBvZiB0aGlzIHBhZ2UgYW5kIHJlbHkgb24gdGhhdAp0aGUgbW9kdWxlIGp1c3QgZG9lcyBpdCdzIHdvcmsuPC9zdHJvbmc+Cjxici8+PGJyLz4KPGgzPlB1cnBvc2Ugb2YgdGhlIG1vZHVsZTwvaDM+ClRoZSBwdXJwb3NlIG9mIHRoaXMgbW9kdWxlIGlzIHRvIHByb3ZpZGUgYSBuaWNlIGFuZCBjbGVhbiB3YXkgZm9yIG1vZHVsZXMKdG8gc3RvcmUgZGF0YSBpbiBhIHRhYmxlLWxpa2UgbWFubmVyIGJ1dCB3aXRob3V0IHRoZSBoYXp6bGUgb2YgY3JlYXRpbmcKc3BlY2lmaWMgdGFibGVzIGZvciBpdHNlbGYgYW5kIG1haW50YWluaW5nIHRoZXNlLgoKPGgzPkJ1dCBiZXdhcmUhPC9oMz4KSXQgc2hvdWxkIGJlIGVtcGhhc2l6ZWQKdGhhdCB0aGlzIG1vZHVsZSBpcyBub3QgaW50ZW5kZWQgZm9yIGV4dHJlbWVseSBkYXRhLWludGVuc2l2ZSBvcGVyYXRpb25zCmFzIGl0IHVzZXMgKGEgbG90KSBtb3JlIGRhdGFiYXNlLWNhbGxzIHRoYW4gY3VzdG9tLXdyaXR0ZW4gZGF0YSBhY2Nlc3MgZG9lcywKYnV0IGZvciBub24taW50ZW5zaXZlIHN0dWZmIGl0IHdpbGwgaG9wZWZ1bGx5IGN1dCBvZmYgc29tZSBvZiB0aGUgdGVkaW91cwoiaG91c2VrZWVwaW5nIiB3aGljaCBJIGdvdCByZWFsbHkgZmVkIHVwIHdpdGggaW4gYWxtb3N0IGV2ZXJ5IG1vZHVsZSBJJ3ZlIGRvbmUuCjxici8+ClNvLCB0aGF0J3MgaXQgZm9yIHRoZSBkaXNjbGFpbWVyLCBub3cgZm9yIHRoZSBBUEkgOi0pCjxici8+Cjxici8+CjxoMz5CYXNpYyB1c2Ugb2YgdGhlIG1vZHVsZTwvaDM+ClVzYWdlIG9mIHRoaXMgbW9kdWxlIGFsd2F5cyBzdGFydHMgb2ZmIHdpdGggZ2V0dGluZyBhbiBhY2Nlc3MgdG8gYW4gaW5zdGFuY2UKb2YgdGhlIG1vZHVsZS4gVGhlIG1vc3QgY29tbW9uIHdheSBvZiBkb2luZyB0aGlzIGlzIGNhbGxpbmcgc29tZXRoaW5nIGxpa2UKPHByZT4KCiRuZHM9JHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCJOZW9EYXRhU3RvcmFnZSIpOwoKPC9wcmU+CllvdSdsbCBwcm9iYWJseSB3YW50IHRvIG1ha2UgeW91ciBtb2R1bGUgZGVwZW5kYW50IG9mIHRoaXMgbW9kdWxlLCBidXQgeW91CnNob3VsZCBrbm93IGhvdyB0byBkbyB0aGlzLi4uCjxici8+CkFmdGVyIGFzc2lnbmluZyB0aGUgbW9kdWxlIHRvIGEgdmFyaWFibGUsIHlvdSBjYW4gc3RhcnQgdXNpbmcgaXQgd2l0aCBBUEktZnVuY3Rpb25zCmxpa2U6CjxwcmU+CgokbXlyZWNvcmQ9JG5kcy0+R2V0RW50aXRpZXMoIm15bW9kdWxlbmFtZSIsICJteXRhYmxlaWQiKTsKCjwvcHJlPgpXaGVyZSAibXltb2R1bGVuYW1lIiBpcyB0aGUgdW5pcXVlIGlkZW50aWZ5ZXIgb2YgeW91ciBtb2R1bGUsIGNvdWxkIGJlCnJlcGxhY2VkIHdpdGggJyR0aGlzLT5HZXROYW1lKCknLCBhbmQgIm15dGFibGVpZCIgaXMgYW4gaWRlbnRpZnllciBvZiB0aGUKdGFibGUgb2YgZGF0YSB3aGljaCB5b3Ugd2FudCB0byBhY2Nlc3MgaW4gdGhlIGRhdGFzdG9yYWdlIGZvciB5b3VyIG1vZHVsZS4KVGhpcyBjYW4gYmUgbGVmdCBibGFuayBpZiBvbmx5IG9uZSB0YWJsZSBpcyBuZWVkZWQgZm9yIHRoZSBtb2R1bGUuCjxici8+CkZvciBhIGNvbXBsZXRlIChyZWFkOiBzb210aW1lcyBjb21wbGV0ZSkgbGlzdCBvZiBtZXRob2RzIHNlZSBsaXN0IGJlbG93LgoKPGgzPlRoZSBOZW9Nb2R1bGUtc2lzdGVyPC9oMz4KQW5vdGhlciwgYW5kIGV2ZW4gZWFzaWVyLCB3YXkgdG8gdXNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgbW9kdWxlCmlzIHRvIGxldCB5b3VyIG1vZHVsZSBkZXNjZW5kIGZyb20gYW5vdGhlciBwcm9qZWN0IG9mIG1pbmUsIHRoZSBOZW9Nb2R1bGUsCndoaWNoIHdyYXBzIGFsbCB0aGUgZnVuY3Rpb25zIG9mIE5lb0RhdGFTdG9yYWdlIGJ1dCByZW1vdmluZyB0aGUgbmVlZCBvZgpjb25zdGFudGx5IHN1cHBseWluZyB0aGUgJG1vZHVsZW5hbWUuIEl0IGFsc28gcHJvdmlkZXMgYSBzdGlsbC1ncm93aW5nIGxpc3Qgb2YKb3RoZXIgaGVscGVyLWZ1bmN0aW9ucyB3aGljaCBoYXMgdG8gZG8gd2l0aCBvdGhlciBzdHVmZiB0aGFuIERhdGFTdG9yYWdlLgo8YnIvPgpGb3IgZnVydGhlciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHVzZSB0aGUgTmVvTW9kdWxlLCBwbGVhc2UgaW5zdGFsbCBpdCBhbmQKY2hlY2sgb3V0IGl0J3MgaGVscC1wYWdlLgoKPGgzPkhvdyB0byBnZXQgaGVscDwvaDM+Ckkgd2lsbCByZXBlYXQsIHRoaXMgbW9kdWxlIGlzIGZvciBkZXZlbG9wZXJzIG9ubHkuIElmIHlvdSBjYW5ub3QgcmVhZCBwaHAtc291cmNlIGNvZGUsCnlvdSBzaG91bGQgdXNlIGl0IGZvciBkZXZlbG9wbWVudCBhbnl3YXkuIElmIHlvdSBjYW4sIGFsd2F5cyBjaGVjayBvdXQgdGhlIGNvZGUKZm9yIGhpbnRzIG9uIGhvdyB0byBtYWtlIGl0IHdvcmsuIElmIHlvdSBzdGlsbCBoYXZlIHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucyBmb3IKZml4ZXMvaW1wcm92ZW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNhdGNoIG1lIChTaWxtYXJpbGxpb24pIGluIHRoZSBmb3J1bSBvZyAjaXJjLgoKCjxoMz5MaXN0IG9mIG1ldGhvZHM8L2gzPgo8cHJlPgovKgogKgogKiBFbnRpdHkgZnVuY3Rpb25zCiAqCiAqLwpmdW5jdGlvbiBBZGRFbnRpdHkoJG1vZHVsZSwgJHRhYmxlLCAkcHJvcHM9YXJyYXkoKSkKZnVuY3Rpb24gRGVsZXRlRW50aXR5KCRpZCkKZnVuY3Rpb24gR2V0RW50aXR5V2l0aFR5cGUoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpKQpmdW5jdGlvbiBHZXRFbnRpdHkoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpLCAkd2l0aHR5cGU9ZmFsc2UpCmZ1bmN0aW9uIEdldEVudGl0aWVzKCRtb2R1bGUsICR0YWJsZT0iIiwgJGNyaXRlcmlhPWFycmF5KCkpCmZ1bmN0aW9uIEdldE9uZUVudGl0eSgkbW9kdWxlLCAkdGFibGUsICRjcml0ZXJpYT1hcnJheSgpLCAkZmFpbGlmbXVsdGlwbGU9ZmFsc2UpCmZ1bmN0aW9uIEdldEVudGl0aWVzRnVsbCgkbW9kdWxlLCAkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpKQpmdW5jdGlvbiBFbnRpdGllc0NvdW50KCRtb2R1bGUsICR0YWJsZT0iIiwgJGNyaXRlcmlhPWFycmF5KCkpCmZ1bmN0aW9uIFNldEVudGl0eVByb3AoJGlkLCRwcm9wbmFtZSwkcHJvcHZhbHVlLCRwcm9wdHlwZT0idW5kZWZpbmVkIikKZnVuY3Rpb24gQ2xlYXJFbnRpdHkoJGlkKQpmdW5jdGlvbiBDbGVhck1vZHVsZUVudGl0aWVzKCRtb2R1bGUpCmZ1bmN0aW9uIENsZWFyRW50aXR5UHJvcCgkaWQsICRwcm9wbmFtZSkKZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wcygkaWQpCmZ1bmN0aW9uIFNldEVudGl0eVByb3BzKCRpZCwgJHByb3BzLCAkY2xlYXI9dHJ1ZSkKZnVuY3Rpb24gU2V0RW50aXR5UHJvcHNPbkNyaXRlcmlhKCRtb2R1bGUsJHRhYmxlLCAkcHJvcHMsICRjcml0ZXJpYSwgJGNyZWF0ZT10cnVlLCAkY2xlYXI9ZmFsc2UpIC8vRG9lcyBub3Qgd29yayEKZnVuY3Rpb24gUmVzZXRFbnRpdHlQcm9wcygkaWQsICRuZXdwcm9wcz1hcnJheSgpKQpmdW5jdGlvbiBSZW1vdmVNb2R1bGVFbnRpdGllcygkbW9kdWxlbmFtZSkKCi8qCiAqCiAqIFNvcnRpbmcgZnVuY3Rpb25zCiAqCiAqLwpmdW5jdGlvbiBDb21wYXJlRW50aXRpZXMoJGVudGl0eTEsICRlbnRpdHkyLCAkc29ydGZpZWxkKQpmdW5jdGlvbiBDb21wYXJlRW50aXRpZXNDb21wbGV4KCRlbnRpdHkxLCAkZW50aXR5MiwgJHNvcnRmaWVsZHM9YXJyYXkoKSkgLy9Eb2VzIG5vdCB3b3JrCmZ1bmN0aW9uIFNvcnRFbnRpdGllcygkbGlzdCwgJHNvcnRmaWVsZHM9YXJyYXkoKSBvciBzdHJpbmcpIC8vT25seSB3b3JrcyBvbiBzdHJpbmdzCmZ1bmN0aW9uIE1ha2VTaW1wbGVBcnJheSgkbW9kdWxlLCAkdGFibGUsICRmaWVsZCkKZnVuY3Rpb24gTWFrZUFzc29jQXJyYXkoJG1vZHVsZSwgJHRhYmxlLCAkZmllbGRzKQoKLyoKICoKICogRmllbGRzZXQgZnVuY3Rpb25zCiAqCiAqLwpmdW5jdGlvbiBBZGRGaWVsZFNldCgkbW9kdWxlLCRuYW1lLCRmaWVsZHMpCmZ1bmN0aW9uIEdldEZpZWxkU2V0KCRtb2R1bGUsICRuYW1lKQoKLyoKICoKICogQ29ubmVjdGlvbiBmdW5jdGlvbnMKICoKICovCmZ1bmN0aW9uIFNldEVudGl0eUNvbm5lY3Rpb24oJGlkMSwgJGlkMiwgJHR5cGU9IiIpCmZ1bmN0aW9uIENsZWFyRW50aXR5Q29ubmVjdGlvbnMoJGlkMSwgJGlkMj0tMSwgJHR5cGU9IiIpCmZ1bmN0aW9uIENsZWFyRW50aXR5Q29ubmVjdGlvbigkaWQxLCAkaWQyLCAkdHlwZT0iIikKZnVuY3Rpb24gQ2hlY2tFbnRpdHlDb25uZWN0aW9uKCRpZDEsJGlkMiwkdHlwZT0iIikKZnVuY3Rpb24gR2V0RW50aXR5Q29ubmVjdGlvbnMoJGlkMT0tMSwgJGlkMj0tMSwgJGJvdGh3YXlzPXRydWUsICR0eXBlPSIiKSAvL0RvZXMgbm90IHdvcmsKCi8qCiAqCiAqIEVycm9yIGhhbmRsaW5nCiAqCiAqLwpmdW5jdGlvbiBFcnJvcigkZXJyb3J0ZXh0LCRyZXR1cm52YWx1ZT1mYWxzZSwkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIEdldEVycm9ycygkbmwyYnI9dHJ1ZSwkY2xlYXI9dHJ1ZSkKZnVuY3Rpb24gU2hvd0Vycm9ycygkY2xlYXI9dHJ1ZSkKZnVuY3Rpb24gSW5FcnJvcigpIDogYm9vbAo8L3ByZT4=]]></data>
	</file>
	<file>
	  <filename>/templates/showdata.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGlucHV0IGlkPSJmaWx0ZXJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiB7aWYgJGZpbHRlcnN2aXNpYmxlPT0idHJ1ZSJ9Y2hlY2tlZD0iMSJ7L2lmfSBuYW1lPSJzaG93ZmlsdGVyb3B0aW9ucyIgb25DbGljaz0iaWYgKHRoaXMuY2hlY2tlZCkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbHRlcicpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyBlbHNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAiPg0KPGxhYmVsIGZvcj0iZmlsdGVydG9nZ2xlIj57JG1vZC0+TGFuZygic2hvd2ZpbHRlcnMiKX08L2xhYmVsPg0KDQo8ZGl2IGlkPSJmaWx0ZXIiIHN0eWxlPSJkaXNwbGF5OiBub25lIi8+DQp7JGZvcm1zdGFydH0NCjxmaWVsZHNldD4NCjxsZWdlbmQ+eyRtb2QtPkxhbmcoImZpbHRlcnMiKX08L2xlZ2VuZD4NCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygiaWRmaWx0ZXIiKX08L3A+DQogPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpZGZpbHRlcmlucHV0fTwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCJtb2R1bGVmaWx0ZXIiKX08L3A+DQogPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRtb2R1bGVmaWx0ZXJpbnB1dH08L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygidGFibGVmaWx0ZXIiKX08L3A+DQogPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0YWJsZWZpbHRlcmlucHV0fTwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCJwcm9wZmlsdGVyIil9PC9wPg0KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskcHJvcGZpbHRlcmlucHV0fTwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCJ2YWx1ZWZpbHRlciIpfTwvcD4NCiA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHZhbHVlZmlsdGVyaW5wdXR9PC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPg0KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskYXBwbHlmaWx0ZXJ9eyRyZXNldGZpbHRlcn08L3A+PGJyLz4NCjwvZGl2Pg0KeyRmb3JtZW5kfQ0KPC9maWVsZHNldD4NCjwvZGl2Pg0KDQp7aWYgJGl0ZW1jb3VudCA+IDB9DQo8YnIvPg0Ke2lmICR0b29tYW55cm93cyE9IiJ9DQo8c3Ryb25nPnskdG9vbWFueXJvd3N9PC9zdHJvbmc+DQo8YnIvPg0Key9pZn0NCg0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4NCgk8dGhlYWQ+DQoJCTx0cj4NCiAgICAgIDx0aD5JZDwvdGg+DQoJCQk8dGg+TW9kdWxlPC90aD4NCgkJCTx0aD5UYWJsZTwvdGg+DQoJCQk8dGg+UHJvcG5hbWU8L3RoPg0KICAgICAgPHRoPlByb3B2YWx1ZTwvdGg+DQoJCTwvdHI+DQoJPC90aGVhZD4NCgk8dGJvZHk+DQp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQ0Ke2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIiBhc3NpZ249cm93Y2xhc3N9DQoJCTx0ciBjbGFzcz0ieyRyb3djbGFzc30iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc30nOyI+CQkJDQoJCQk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4NCgkJCTx0ZD57JGVudHJ5LT5tb2R1bGV9PC90ZD4NCgkJCTx0ZD57JGVudHJ5LT50YWJsZX08L3RkPg0KICAgICAgPHRkPnskZW50cnktPnByb3BuYW1lfTwvdGQ+DQogICAgICA8dGQ+eyRlbnRyeS0+cHJvcHZhbHVlfHRydW5jYXRlfTwvdGQ+CQkJDQoJCTwvdHI+DQp7L2ZvcmVhY2h9DQoJPC90Ym9keT4NCjwvdGFibGU+DQp7ZWxzZX0NCjxoND57JG1vZC0+TGFuZygnbm9kYXRhJyl9PC9oND4NCnsvaWZ9DQoNCg==]]></data>
	</file>
</module>
