<?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>CSSPreprocessor</name>
	<version>2.1</version>
  <mincmsversion>1.12.1</mincmsversion>
	<help><![CDATA[PGgyPldoYXQgZG9lcyB0aGlzIGRvPzwvaDI+CiA8cD5UaGlzIG1vZHVsZSBhZGRzIHRvIHRoZSBDTVNNUyBTdHlsZXNoZWV0cyAvIERlc2lnbiBtYW5hZ2VyIHNvbWUgQ1NTIFByZXByb2Nlc3NvcnMsIGluIG9yZGVyIHRvIGNvbXBpbGUgTEVTUyBvciBTQVNTIGxhbmd1YWdlcyAob3Igb3RoZXIgbWF5YmUgbGF0ZXIpLjwvcD4KCiA8aDI+SG93IGRvZXMgaXQgd29yayBhbmQgaW50ZWdyYXRlIGluIENNU01TPC9oMj4KIDxwPgoJVGhpcyBtb2R1bGUgdXNlcyB0aGUgc3RhbmRhcmQgc3R5bGVzaGVldHMgb2YgQ01TIE1hZGUgU2ltcGxlLiBJdCBpcyBsYXVuY2hlZCBhZnRlciBhbGwgdGhlIHN0eWxlc2hlZXRzIGhhdmUgYmVlbiBjb21iaW5lZCwgYW5kIGl0IHRha2VzIGFsbCB0aGUgQ1NTIGNvbnRlbnQgdG8gZ2l2ZSBpdCB0byB0aGUgUHJlcHJvY2Vzc29yIG9mIHlvdXIgY2hvaWNlLgogPC9wPgogPHA+CgkJPHN0cm9uZz5Gb3IgQ01TTVMgMS4xMjwvc3Ryb25nPiA6IEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgbW9kdWxlIHByb2Nlc3NlcyB0aGUgZW50aXJlIHN0eWxlc2hlZXQgYWZ0ZXIgdGhlaXIgY29tYmluYXRpb24uIE5vIG1hdHRlciBpZiB5b3UgdXNlIDEgb3IgMTAgc3R5bGVzaGVldHMgaW4geW91ciBkZXNpZ24sIHRoZSBwcmVwcm9jZXNzb3Igd2lsbCBvbmx5IGdldCBvbmUgc3RyaW5nLgogIDwvcD4KICA8cD4KICAgIDxzdHJvbmc+Rm9yIENNU01TIDIrPC9zdHJvbmc+IDogdGhlIG5ldyB7Y21zX3N0eWxlc2hlZXR9IGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvdXIuIEV2ZXJ5IHN0eWxlc2hlZXQgaXMgcHJvY2Vzc2VkIHNlcGVyYXRlbHksIGFuZCB0aGUgQ1NTUHJlcHJvY2Vzc29yIG1vZHVsZSB3aWxsIG5vdCB3b3JrIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiAxIExFU1MgLyBTQVNTIFN0eWxlc3NoZWV0IGluIHRoZSBkZXNpZ24uIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGRlZmluZSBhIHZhcmlhYmxlIGluIG9uZSBzdHlsZXNoZWV0LCBhbmQgdGhlbiB1c2UgaXQgaW4gYW5vdGhlciBvbmUuPGJyPgogICAgPHN0cm9uZz5Tb2x1dGlvbjo8L3N0cm9uZz4gOiBwdXQgeW91ciBMRVNTIC8gU0FTUyBjb2RlIGluIGZpbGVzIGFuZCBsaW5rIHRoZSBtYWluIGZpbGUgd2l0aCB0aGUgbW9kdWxlIHRocm91Z2ggdGhlICJpbXBvcnQgZGlycyIgcGFyYW1ldGVyLgogPC9wPgoKPGgyPkhvdyBEbyBJIFVzZSBJdDwvaDI+CjxoMz5DTVNNUyAxLjEyPC9oMz4KPHVsPgoJPGxpPlVzZSB0aGUgImNvbWJpbmUiIG9wdGlvbiAoZGVmYXVsdCBpbiB7Y21zX3N0eWxlc2hlZXR9KTwvbGk+Cgk8bGk+SW4gb3JkZXIgdG8gcmVjb2duaXplIHdoaWNoIHRlbXBsYXRlIGlzIGEgc3R5bGVzaGVldCwgeW91IE1VU1QgcHV0IHRoYXQgc3RyaW5nIGluIG9uZSBvZiB5b3VyIHN0eWxlc2hlZXRzOiA8c3Ryb25nPkBAQ1NTUHJlcHJvY2Vzc29yQEA8L3N0cm9uZz4gLSBJIHN1Z2dlc3QgcHV0dGluZyBpdCBpbiBhIHNpbXBsZSBjb21tZW50PC9saT4KCTxsaT4KCQlEZWZpbmUgeW91ciBpbXBvcnQgZGlyZWN0b3JpZXMsIGlmIHlvdSB1c2UgaXQuIEZvciBleGVtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgQm9vdHN0cmFwLCB5b3UgY2FuIDoKCQk8b2w+CgkJCTxsaT5QdXQgeW91ciBCb290c3RyYXAgTEVTUyBzb3VyY2UgZmlsZXMgaW4gdXBsb2Fkcy9ib290c3RyYXAvPC9saT4KCQkJPGxpPlR5cGUgPHN0cm9uZz48ZW0+dXBsb2Fkcy9ib290c3RyYXA8L2VtPjwvc3Ryb25nPiBpbiB0aGUgIkRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgTEVTUy9TQVNTIGZpbGVzIHRvIGluY2x1ZGUgaW4gY29tcGlsYXRpb24iIC0gTm8gc2xhc2ggYXQgYmVnaW5uaW5nIG9yIGVuZDwvbGk+CgkJPC9vbD4KCTwvbGk+Cgk8bGk+U3RhcnQgdXNpbmcgTEVTUyBjb2RlIGluIHlvdXIgc3R5bGVzaGVldHMhPC9saT4KPC91bD4KCjxoMz5DTVNNUyAyKzwvaDM+Cjx1bD4KCTxsaT5JbiBvcmRlciB0byByZWNvZ25pemUgd2hpY2ggdGVtcGxhdGUgaXMgYSBzdHlsZXNoZWV0LCB5b3UgTVVTVCBwdXQgdGhhdCBzdHJpbmcgaW4gb25lIG9mIHlvdXIgc3R5bGVzaGVldHM6IDxzdHJvbmc+QEBDU1NQcmVwcm9jZXNzb3JAQDwvc3Ryb25nPiAtIEkgc3VnZ2VzdCBwdXR0aW5nIGl0IGluIGEgc2ltcGxlIGNvbW1lbnQ8L2xpPgoJPGxpPgoJCURlZmluZSB5b3VyIGltcG9ydCBkaXJlY3RvcmllcywgaWYgeW91IHVzZSBpdC4gRm9yIGV4ZW1wbGUsIGlmIHlvdSB3YW50IHRvIGludGVncmF0ZSBCb290c3RyYXAsIHlvdSBjYW4gOgoJCTxvbD4KCQkJPGxpPlB1dCB5b3VyIEJvb3RzdHJhcCBMRVNTIHNvdXJjZSBmaWxlcyBpbiB1cGxvYWRzL2Jvb3RzdHJhcC88L2xpPgoJCQk8bGk+VHlwZSA8c3Ryb25nPjxlbT51cGxvYWRzL2Jvb3RzdHJhcDwvZW0+PC9zdHJvbmc+IGluIHRoZSAiRGlyZWN0b3JpZXMgY29udGFpbmluZyBMRVNTL1NBU1MgZmlsZXMgdG8gaW5jbHVkZSBpbiBjb21waWxhdGlvbiIgLSBObyBzbGFzaCBhdCBiZWdpbm5pbmcgb3IgZW5kPC9saT4KICAgICAgPGxpPkNyZWF0ZSBhICJjdXN0b20iIHN0eWxlc2hlZXQgKG9ubHkgb25lIHN0eWxlc2hlZXQpIGFuZCBsaW5rIGl0IHRvIHlvdXIgZGVzaWduLjwvbGk+CgkJPC9vbD4KCTwvbGk+CiAgPGxpPgoJCVNhbWUgY2FuIGJlIGRvbmUgZm9yIEZvdW5kYXRpb246CgkJPG9sPgoJCQk8bGk+UHV0IHlvdXIgRm91bmRhdGlvbiBTQVNTIHNvdXJjZSBmaWxlcyBpbiB1cGxvYWRzL2ZvdW5kYXRpb24vc2NzczwvbGk+CgkJCTxsaT5UeXBlIDxzdHJvbmc+PGVtPnVwbG9hZHMvZm91bmRhdGlvbi9zY3NzPC9lbT48L3N0cm9uZz4gaW4gdGhlICJEaXJlY3RvcmllcyBjb250YWluaW5nIExFU1MvU0FTUyBmaWxlcyB0byBpbmNsdWRlIGluIGNvbXBpbGF0aW9uIiAtIE5vIHNsYXNoIGF0IGJlZ2lubmluZyBvciBlbmQ8L2xpPgoJCTwvb2w+Cgk8L2xpPgoJPGxpPlN0YXJ0IHVzaW5nIExFU1MgY29kZSBpbiB5b3VyIHN0eWxlc2hlZXRzITwvbGk+CjwvdWw+CgoKPGgyPlVwZGF0aW5nIHN0eWxlc2hlZXRzPC9oMj4KPHA+CglJZiB5b3UgbWFrZSBhbiB1cGRhdGUgb24gYSBDTVNNUyBzdHlsZXNoZWV0LCBldmVyeXRoaW5nIGlzIGZpbmUgYW5kIHRoZSBtb2R1bGUgd2lsbCBwcm9jZXNzIHRoZSBzdHlsZXNoZWV0IGFnYWluIG9uIHRoZSBuZXh0IHBhZ2UgcmVmcmVzaC4KPC9wPgo8cD4KCUhvd2V2ZXIsIGlmIHlvdSBkaWQgbWFrZSBhIGNoYW5nZSBpbiB5b3VyIGltcG9ydGVkIGxlc3MgZmlsZXMsIHRoZSBzeXN0ZW0gd2lsbCBub3QgcGVyZm9ybSBhbnkgdXBkYXRlIC0gaW4gdGhpcyBjYXNlLCB5b3UgbXVzdCBjbGVhciB0aGUgY2FjaGUgb3Igc2ltcGx5IHJlbW92ZSB0aGUgc3R5bGVzaGVldCBmcm9tIHRoZSBjYWNoZSBkaXJlY3RvcnkuCjwvcD4KCgoKPGgyPlNtYXJ0eSBzdXBwb3J0PC9oMj4KPHA+WW91IGNhbiB1c2UgU21hcnR5IHRhZ3Mgd2l0aCBbWyBhbmQgXV0gLSBTbWFydHkgd2lsbCBiZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBDU1MgUHJlUHJvY2Vzc29yLjwvcD4KCjxoMj5Vc2luZyBTb3VyY2VtYXBzPC9oMj4KPHA+CglTb21lIHByZXByb2Nlc3NvcnMgY2FuIGNyZWF0ZSBzb3VyY2VtYXAgZmlsZXMsIGluIG9yZGVyIHRvIGhlbHAgeW91IGR1cmluZyBpbnRlZ3JhdGlvbi4gRG9uJ3QgZm9yZ2V0IHRvIGNvbmZpZ3VyZSB5b3VyIGJyb3dzZXIgdG8gdXNlIHRoYXQgZnVuY3Rpb24uIE5vdGUgdGhhdCBvbmx5IGltcG9ydGVkIGZpbGVzIHdpbGwgYmUgbWFwcGVkIGluIHRoZSBzb3VyY2VtYXBzICh0aGlzIG1heSBjaGFuZ2UgaW4gYSBmdXJ0aGVyIHZlcnNpb24pLgo8L3A+Cgo8aDI+RGVhY3RpdmF0ZSB0aGUgbW9kdWxlPC9oMj4KPHA+CglJZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgYW55IG9mIHRoZSBwcmVwcm9jZXNzb3JzLCBwbGVhc2UgcmVtb3ZlIGl0IG9yIGRpc2FibGUgaXQgaW4gdGhlIE1vZHVsZXMgTWFuYWdlciAtIFRoZXJlIGFyZSBubyAiZGVhY3RpdmF0ZSIgZnVuY3Rpb24gYnVpbHQgaW4gdGhlIG1vZHVsZS4KPC9wPgoKPGgyPlByZXByb2Nlc3NvciBzd2l0Y2g8L2gyPgo8cD4KCVlvdSBtYXkgd2FudCB0byBzd2l0Y2ggZnJvbSBvbmUgcHJlcHJvY2Vzc29yIHRvIGFub3RoZXIgLSBEb24ndCBmb3JnZXQgdG8gY2xlYXIgeW91ciBjYWNoZSBhZnRlciB0aGF0IGJlY2F1c2UgdGhlIG1vZHVsZSB3aWxsIG5vdCBkbyBpdC4KPC9wPgoKPGgyPkV4dGVuZCB3aXRoIGFub3RoZXIgcHJlcHJvY2Vzc29yPC9oMj4KPHA+CglZb3UgY2FuIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgaW4gdGhlICJwcmVwcm9jZXNzb3JzIiBkaXJlY3RvcnksIGFuZCBjcmVhdGUgeW91ciBvd24gY2xhc3MgLSBDaGVjayBob3cgdGhlIGJ1bmRsZWQgcHJlcHJvY2Vzc29ycyBhcmUgaW50ZWdyYXRlZC4KPC9wPgo8cD5Eb24ndCBmb3JnZXQgdG8gPGEgaHJlZj0ibWFpbHRvOmNvbnRhY3RAYWlyZWxpYnJlLmZyIj5lbWFpbCBtZTwvYT4gaWYgeW91IHdhbnQgeW91ciBwcmVwcm9jZXNzb3IgdG8gYmUgYWRkZWQgdG8gdGhlIHByb2plY3QhPC9wPgoKPGgyPlN1cHBvcnQ8L2gyPgoJPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCTxwPgoJCUlmIHlvdSB3YW50IHRvIGNvbnRhY3QgbWU6IDxhIGhyZWY9Im1haWx0bzpjb250YWN0QGFpcmVsaWJyZS5mciI+Y29udGFjdEBhaXJlbGlicmUuZnI8L2E+Cgk8L3A+Cgo8aDI+UHJvamVjdCBvbiB0aGUgd2ViPC9oMj4KPHA+WW91IGNhbiBmb2xsb3cgdGhlIHByb2plY3Qgb24gOiA8L3A+Cgk8dWw+CgkJPGxpPkdpdEh1YjogPGEgaHJlZj0iaHR0cHM6I2dpdGh1Yi5jb20vYWlyZWxpYnJlL0NTU1ByZXByb2Nlc3NvciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOiNnaXRodWIuY29tL2FpcmVsaWJyZS9DU1NQcmVwcm9jZXNzb3I8L2E+PC9saT4KCQk8bGk+Q01TTVMgRm9yZ2U6IDxhIGhyZWY9Imh0dHA6I2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jc3NwcmVwcm9jZXNzb3IiIHRhcmdldD0iX2JsYW5rIj5odHRwOiNkZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY3NzcHJlcHJvY2Vzc29yPC9hPjwvbGk+Cgk8L3VsPgoKPGgyPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDI+Cgk8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTQsIEFpcmVMaWJyZSA8YSBocmVmPSJtYWlsdG86Y29udGFjdEBhaXJlbGlicmUuZnIiPmNvbnRhY3RAYWlyZWxpYnJlLmZyPC9hPiAvIDxhIGhyZWY9Imh0dHA6I3d3dy5haXJlbGlicmUuZnIiIHRhcmdldD0iX2JsYW5rIj53d3cuYWlyZWxpYnJlLmZyPC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgoJPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6I3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgoKCTxoMz5QcmVwcm9jZXNzb3JzIGNvcHlyaWdodDwvaDM+Cgk8cD4KCQlUaGUgYXV0aG9yIG9mIHRoaXMgbW9kdWxlIGRvZXMgbm90IG93biB0aGUgcHJlcHJvY2Vzc29ycyBidW5kbGVkIHdpdGggaXQgLSBQbGVhc2Ugc2VlIGV2ZXJ5IHByZXByb2Nlc3NvcnMgc291cmNlIGNvZGUgLyB3ZWJzaXRlIHRvIGdldCBpbmZvcm1hdGlvbnMgYWJvdXQgbGljZW5jZSBhbmQgY29weXJpZ2h0LgoJPC9wPgoJPHA+SSBqdXN0IHdhbnRlZCB0byB0aGFuayBhbGwgdGhlIGRldmVsb3BlcnMgdGhhdCBjb250cmlidXRlIHRvIHRoZXNlIHByZXByb2Nlc3NvcnMgd2hpY2ggYXJlIGdyZWF0IHRvb2xzIGZvciBkZXNpZ25lcnMhPC9wPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBBaXJlTGlicmUgLSBNYXRoaWV1IE11dGhzICZsdDtjb250YWN0QGFpcmVsaWJyZS5mciZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAyLjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CiAgPGxpPgogICAgPHN0cm9uZz4yLjE8L3N0cm9uZz4gLSAyMDE2LTA1LTA5IDogYnVnIGZpeGVzIHdydCBhZG1pbiBwYW5lbCBsb29rCiAgPC9saT4KICA8bGk+CiAgICA8c3Ryb25nPjIuMDwvc3Ryb25nPiAtIDIwMTYtMDEtMjU6IHNheSBoZWxsbyB0byBTQVNTIHRocm91Z2ggY29tbWFuZCBsaW5lIGFuZCBzY3NzcGhwIQogICAgPHVsPgogICAgICA8bGk+QWRkZWQgU2FzcyBmcm9tIGNvbW1hbmQgbGluZSArIFNjc3NQSFA8L2xpPgogICAgICA8bGk+QnVnIGZpeGVzPC9saT4KICAgICAgPGxpPkRvY3VtZW50YXRpb24gdXBkYXRlIGZvciBDTVNNUzIgLSBOb3RlOiBvbmx5IG9uZSBzdHlsc2hlZXQgaXMgYWxsb3dlZCBpbiBvcmRlciB0byB3b3JrIGluIENNU01TIDI8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT4KICAgIDxzdHJvbmc+MS40LjE8L3N0cm9uZz4gLSAyMDE2LTAxLTE4OiBidWcgZml4IHJlbGF0ZWQgdG8gc21hcnR5IGRlbGltaXRlcnMgKCJbWyIgYW5kICJdXSIpCiAgPC9saT4KICA8bGk+CiAgICA8c3Ryb25nPjEuNDwvc3Ryb25nPiAtIDIwMTYtMDEtMDg6CiAgIDx1bD4KICAgICAgPGxpPk1pbmltYWwgQ01TIHZlcnNpb24gPSAyLjEuMTwvbGk+CiAgICAgIDxsaT5Ob3cgdXNlcyB0aGUgU3R5bGVzaGVldFByZUNvbXBpbGUgZXZlbnQgaW5zdGVhZCBvZiB0aGUgU21hcnR5UHJlQ29tcGlsZTwvbGk+CiAgICAgIDxsaT5Tb21lIGJ1ZyBmaXhlIChkZWZhdWx0IFByZVByb2Nlc3NvciBiZWNvbWUgT3llam9yZ2VzIG9uZSk8L2xpPgogICAgICA8bGk+VXBkYXRlZCB0byBPeWVqb3JnZSdzIExlc3MucGhwIHYuIDEuNy4wLjEwIC0gcGxlYXNlIHRlc3QhPC9saT4KICAgICAgPGxpPlJlbW92ZWQgdGhlIC14IChjb21wcmVzcykgb3B0aW9uIGZyb20gTGVzcyBjb21tYW5kIGxpbmUgY29tcGlsZXIgUHJlcHJvY2Vzc29yIGFzIGl0J3Mgbm93IGRlcHJlY2F0ZWQgLSB5b3UgY2FuIHVzZSB0aGUgZW1iZWRlZCBtaW5pZmllcjwvbGk+CiAgICA8L3VsPgogIDwvbGk+Cgk8bGk+PHN0cm9uZz4xLjM8L3N0cm9uZz4gLSAyMDE1LTAxLTIwOiBhZGQgc3VwcG9ydCBmb3IgQXV0b3ByZWZpeCBmb3IgdGhlIExlc3NjIGNvbW1hbmQgbGluZSAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcG9zdGNzcy9hdXRvcHJlZml4ZXIgLSBjaGVjayBvdXQgbmV3IG9wdGlvbnMgb24gdGhlIGFkbWluIHBhbmVsIC0gcGxlYXNlIHRlc3Qgd2l0aCB5b3VyIHZlcnNpb24gb2YgTGVzc2M8L2xpPgoJPGxpPjxzdHJvbmc+MS4yPC9zdHJvbmc+IC0gMjAxNC0wOS0yNTogdXBkYXRlIHRvIHRoZSBwYXRocyAvIE5vdyB0aGUgaW5jbHVkZSBkaXIgaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgcGF0aCAobm90IHRoZSB1cGxvYWRzIGFueW1vcmUpIC0gUGxlYXNlIHVwZGF0ZSB5b3VyIGNvbmZpZ3VyYXRpb24gdG8gYWRkIDxzdHJvbmc+dXBsb2Fkcy88L3N0cm9uZz4gaWYgbmVlZGVkITxicj4KCQlUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgcGxhY2UgeW91ciBsZXNzIGZpbGVzIGluIGFub3RoZXIgZGlyIHRoYXQgdGhlIHVwbG9hZHMvIG9uZQoJPC9saT4KCTxsaT48c3Ryb25nPjEuMTwvc3Ryb25nPiAtIDIwMTQtMDktMDM6IEFkZCBTbWFydHkgc3VwcG9ydCAtIE5vdGUgdGhhdCB0aGUgbW9kdWxlIG5vdyBwbHVncyBvbiB0aGUgU21hcnR5UHJlQ29tcGlsZSBldmVudCAoYmVmb3JlIGl0IHdhcyBTbWFydHlQb3N0Q29tcGlsZSkgLSBUaGlzIG5lZWRzIHRlc3RzPC9saT4KCTxsaT48c3Ryb25nPjEuMC4xPC9zdHJvbmc+IC0gMjAxNC0wOS0wMzogQnVnIGZpeGVzPC9saT4KCTxsaT48c3Ryb25nPjEuMDwvc3Ryb25nPiAtIDIwMTQtMDktMDI6IEluaXRpYWwgMS4wIHJlbGVhc2UgLSBQbGVhc2UgdGVzdCBhbmQgZ2l2ZSBtZSBmZWVkYmFjazwvbGk+CjwvdWw+CjxiciAvPg==]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwppZiAoISR0aGlzLT5WaXNpYmxlVG9BZG1pblVzZXIoKSkgcmV0dXJuOwoKCgppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pKQp7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncHJlcHJvY2Vzc29yJywgJHBhcmFtc1sncHJlcHJvY2Vzc29yJ10pOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ltcG9ydF9kaXJzJywgJHBhcmFtc1snaW1wb3J0X2RpcnMnXSk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWluaWZ5JywgJHBhcmFtc1snbWluaWZ5J10pOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2dlbmVyYXRlX3NvdXJjZW1hcCcsICRwYXJhbXNbJ2dlbmVyYXRlX3NvdXJjZW1hcCddKTsKCQoJLy8gQXV0b3ByZWZpeGVyCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlX2F1dG9wcmVmaXhlcicsICRwYXJhbXNbJ3VzZV9hdXRvcHJlZml4ZXInXSk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnYXV0b3ByZWZpeGVyX2Jyb3dzZXJzJywgJHBhcmFtc1snYXV0b3ByZWZpeGVyX2Jyb3dzZXJzJ10pOwoJCgkkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ3ByZWZlcmVuY2VzX3NldCcpKTsKfQoKCgoKCi8vIFJldHJpZXZlIHRoZSBhdmFpbGFibGUgcHJlcHJvY2Vzc29ycyBpbiB0aGUgZGlyZWN0b3J5ICJwcmVwcm9jZXNzb3JzIgokcHJlcHJvY2Vzc29ycyA9IGFycmF5KCk7Cgokcm9vdCA9IGNtc19qb2luX3BhdGgoJHRoaXMtPkdldE1vZHVsZVBhdGgoKSwgJ3ByZXByb2Nlc3NvcnMnKTsKJHNlYXJjaCA9IGNtc19qb2luX3BhdGgoJHJvb3QsICcqJyk7CiRkaXJzID0gZ2xvYigkc2VhcmNoLCBHTE9CX09OTFlESVIpOwoKaWYgKCRkaXJzKQp7Cglmb3JlYWNoICgkZGlycyBhcyAkb25lKQoJewoJCSRwcmVwcm9jZXNzb3IgPSBiYXNlbmFtZSgkb25lKTsKCQkKCQkvLyBTZWFyY2ggaW5mbyA6IG5hbWUsIGxvZ28sIC4uLgoJCSRjbGFzc19uYW1lID0gJ1ByZXByb2Nlc3Nvcl8nLiRwcmVwcm9jZXNzb3I7CgkJcmVxdWlyZV9vbmNlKGNtc19qb2luX3BhdGgoJHJvb3QsICRwcmVwcm9jZXNzb3IsICdjbGFzcy4nLiRjbGFzc19uYW1lLicucGhwJykpOwoJCQoJCSRvYmogPSBuZXcgc3RkQ2xhc3M7CgkJJG9iai0+ZGlyID0gJHByZXByb2Nlc3NvcjsKCQkkb2JqLT5mcmllbmRseV9uYW1lID0gJGNsYXNzX25hbWU6OkZSSUVORExZX05BTUU7CgkJJG9iai0+ZGVzY3JpcHRpb24gPSAkY2xhc3NfbmFtZTo6REVTQ1JJUFRJT047CgkJJG9iai0+YXV0aG9yID0gJGNsYXNzX25hbWU6OkFVVEhPUjsKCQkkb2JqLT53ZWJzaXRlID0gJGNsYXNzX25hbWU6OldFQlNJVEU7CgkJCgkJJGxvZ28gPSAkY2xhc3NfbmFtZTo6TE9HTzsKCQlpZiAoIWVtcHR5KCRsb2dvKSkKCQkJJG9iai0+bG9nbyA9ICRsb2dvOwoJCQoJCSRub3RlID0gJGNsYXNzX25hbWU6Ok5PVEU7CgkJaWYgKCFlbXB0eSgkbm90ZSkpCgkJCSRvYmotPm5vdGUgPSAkbm90ZTsKCQkKCQkkcHJlcHJvY2Vzc29yc1skcHJlcHJvY2Vzc29yXSA9ICRvYmo7Cgl9CgkKCSRhc3NpZ25bJ3ByZXByb2Nlc3NvcnMnXSA9ICRwcmVwcm9jZXNzb3JzOwp9CgovLyBDdXJyZW50IHByZXByb2Nlc3NvcgokYXNzaWduWydjdXJyZW50X3ByZXByb2Nlc3NvciddID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3ByZXByb2Nlc3NvcicsICdJTGVzcycpOwokYXNzaWduWydpbXBvcnRfZGlycyddID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ltcG9ydF9kaXJzJywgJycpOwokYXNzaWduWydtaW5pZnknXSA9ICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWluaWZ5JywgMCk7CiRhc3NpZ25bJ2dlbmVyYXRlX3NvdXJjZW1hcCddID0gICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnZW5lcmF0ZV9zb3VyY2VtYXAnLCAwKTsKCi8vIEF1dG9wcmVmaXhlcgokYXNzaWduWyd1c2VfYXV0b3ByZWZpeGVyJ10gPSAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VzZV9hdXRvcHJlZml4ZXInLCAwKTsKJGFzc2lnblsnYXV0b3ByZWZpeGVyX2Jyb3dzZXJzJ10gPSAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2F1dG9wcmVmaXhlcl9icm93c2VycycsICcnKTsKCgovLyBDTVNNUyAxLjExIGNvbXBhdGliaWxpdHkKJGFzc2lnblsnbW9kJ10gPSAkdGhpczsKJGFzc2lnblsnZm9ybV9zdGFydCddID0gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdkZWZhdWx0YWRtaW4nKTsKJGFzc2lnblsnZm9ybV9lbmQnXSA9ICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgpjbXNtcygpLT5HZXRTbWFydHkoKS0+YXNzaWduKCRhc3NpZ24pOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdwcmVmZXJlbmNlcy50cGwnKTsKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/admin_css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/admin_css/csspreprocessor.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CgoucHJlcHJvY2Vzc29yIHtkaXNwbGF5OiBibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjsgd2lkdGg6IGF1dG87IGJhY2tncm91bmQ6ICNkZGQ7IGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luOiAwIDAgMTBweH0KLnByZXByb2Nlc3NvciBsYWJlbCwKLnByZXByb2Nlc3NvciBkaXYuZGVzY3JpcHRpb24ge3Bvc2l0aW9uOiByZWxhdGl2ZTsgZmxvYXQ6IGxlZnQ7IHBhZGRpbmctdG9wOiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogMTBweH0KCgovKi5wcmVwcm9jZXNzb3IgbGFiZWwge3dpZHRoOiAyMTBweDsgcmlnaHQ6IDIxMHB4OyBfcmlnaHQ6IDBweDsgbWFyZ2luOiAwIDAgMCAtMTAwJX0KLnByZXByb2Nlc3NvciBsYWJlbCAuaW5wdXRfcmFkaW8ge3RvcDogNXB4fSovCgoucHJlcHJvY2Vzc29yIC5pbnB1dF9yYWRpbyB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CglwYWRkaW5nLXRvcDogMzBweDsKfQoucHJlcHJvY2Vzc29yIC5sb2dvIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoucHJlcHJvY2Vzc29yIGltZyB7CgltYXgtd2lkdGg6IDgwJTsKCWhlaWdodDogYXV0bzsKCW1hcmdpbjogMTVweCAwOwp9CgoucHJlcHJvY2Vzc29yIGgyIHttYXJnaW4tdG9wOiAwfQo=]]></data>
	</file>
	<file>
	  <filename>/admin_css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/CSSPreprocessor.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENTU1ByZXByb2Nlc3NvcgojIEF1dGhvcjogQWlyZWxpYnJlIC8gTWF0aGlldSBNdXRocyAtIHd3dy5haXJlbGlicmUuZnIKIyBBIG1vZHVsZSB0byBoZWxwIGRlc2lnbmVycyB0byB1c2UgQ1NTIFByZXByb2Nlc3NvciBpbiBvcmRlciB0byBwcm9jZXNzCiMgTEVTUyBvciBTQVNTIChsYXRlcikgY29kZS4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2N1c3RvbWdzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgpjbGFzcyBDU1NQcmVwcm9jZXNzb3IgZXh0ZW5kcyBDTVNNb2R1bGUKewoKCWZ1bmN0aW9uIEdldFZlcnNpb24oKSB7cmV0dXJuICcyLjEnO30KCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkge3JldHVybiAnMS4xMi4xJzt9CglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7cmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTt9CglmdW5jdGlvbiBHZXRIZWxwKCl7cmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7fQoKCWZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdBaXJlTGlicmUgLSBNYXRoaWV1IE11dGhzJzsgfQogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgeyByZXR1cm4gJ2NvbnRhY3RAYWlyZWxpYnJlLmZyJzsgfQoKICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7CgkJcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKGRpcm5hbWUoX19GSUxFX18pLicvZG9jL2NoYW5nZWxvZy5odG1sJyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIExhenlMb2FkRnJvbnRlbmQoKSB7IHJldHVybiB0cnVlOyB9CiAgcHVibGljIGZ1bmN0aW9uIExhenlMb2FkQWRtaW4oKSB7IHJldHVybiB0cnVlOyB9CgogIC8vIEFkbWluIHBhcmFtcwogIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gdHJ1ZTsgfQogIHB1YmxpYyBmdW5jdGlvbiBJc0FkbWluT25seSgpIHsgcmV0dXJuIHRydWU7IH0KICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7IHJldHVybiAnbGF5b3V0JzsgfQogIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsKCQlyZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIFN0eWxlc2hlZXRzJyk7CiAgfQoKCiAgZnVuY3Rpb24gR2V0SGVhZGVySFRNTCgpIHsKCQkkaGVhZGVyID0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbW9kdWxlcy9DU1NQcmVwcm9jZXNzb3IvYWRtaW5fY3NzL2Nzc3ByZXByb2Nlc3Nvci5jc3MiPic7CgoJCXJldHVybiAkaGVhZGVyOwogIH0KCgoKICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgLy8gTk9OLUFQSSBDVVNUT00gRlVOQ1RJT05TCiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICBwdWJsaWMgZnVuY3Rpb24gR2V0UHJlcHJvY2Vzc29yKCkKICB7CgkJJHByZXByb2Nlc3Nvcl9uYW1lID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3ByZXByb2Nlc3NvcicsICdMZXNzUEhQT3llam9yZ2UnKTsKCgkJcmVxdWlyZV9vbmNlKGNtc19qb2luX3BhdGgoX19ESVJfXywgJ3ByZXByb2Nlc3NvcnMnLCAkcHJlcHJvY2Vzc29yX25hbWUsICdjbGFzcy5QcmVwcm9jZXNzb3JfJyAuICRwcmVwcm9jZXNzb3JfbmFtZSAuICcucGhwJykpOwoKCQkkY2xhc3NfbmFtZSA9ICdQcmVQcm9jZXNzb3JfJyAuICRwcmVwcm9jZXNzb3JfbmFtZTsKCQkkb2JqID0gbmV3ICRjbGFzc19uYW1lKCk7CgoJCSRvYmotPkxvYWQoKTsKCgkJcmV0dXJuICRvYmo7CiAgfQoKICAvLyBTbWFydHkgZmV0Y2ggLSBkbyBpdCAibWFudWFsbHkiIGJlY2F1c2UgdGhlIHBvc3RmaWx0ZXIgZG9lcyBub3QgZ2l2ZSBhIGNsZWFuIHNtYXJ0eSBjb2RlIChnaXZlcyAiPD9waHAgIiBldGMuCiAgcHVibGljIGZ1bmN0aW9uIEZldGNoU21hcnR5KCRjb250ZW50KQogIHsKCQkkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CgoJCSRzbWFydHktPmxlZnRfZGVsaW1pdGVyID0gJ1tbJzsKCQkkc21hcnR5LT5yaWdodF9kZWxpbWl0ZXIgPSAnXV0nOwoKCQkkY29udGVudCA9ICRzbWFydHktPmZldGNoKCdzdHJpbmc6JyAuICRjb250ZW50KTsKCgkJLy8kc21hcnR5LT5sZWZ0X2RlbGltaXRlciA9ICd7JzsKCQkvLyRzbWFydHktPnJpZ2h0X2RlbGltaXRlciA9ICd9JzsKCgkJcmV0dXJuICRjb250ZW50OwogIH0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/changelog.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT4KICAgIDxzdHJvbmc+Mi4xPC9zdHJvbmc+IC0gMjAxNi0wNS0wOSA6IGJ1ZyBmaXhlcyB3cnQgYWRtaW4gcGFuZWwgbG9vawogIDwvbGk+CiAgPGxpPgogICAgPHN0cm9uZz4yLjA8L3N0cm9uZz4gLSAyMDE2LTAxLTI1OiBzYXkgaGVsbG8gdG8gU0FTUyB0aHJvdWdoIGNvbW1hbmQgbGluZSBhbmQgc2Nzc3BocCEKICAgIDx1bD4KICAgICAgPGxpPkFkZGVkIFNhc3MgZnJvbSBjb21tYW5kIGxpbmUgKyBTY3NzUEhQPC9saT4KICAgICAgPGxpPkJ1ZyBmaXhlczwvbGk+CiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIHVwZGF0ZSBmb3IgQ01TTVMyIC0gTm90ZTogb25seSBvbmUgc3R5bHNoZWV0IGlzIGFsbG93ZWQgaW4gb3JkZXIgdG8gd29yayBpbiBDTVNNUyAyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+CiAgICA8c3Ryb25nPjEuNC4xPC9zdHJvbmc+IC0gMjAxNi0wMS0xODogYnVnIGZpeCByZWxhdGVkIHRvIHNtYXJ0eSBkZWxpbWl0ZXJzICgiW1siIGFuZCAiXV0iKQogIDwvbGk+CiAgPGxpPgogICAgPHN0cm9uZz4xLjQ8L3N0cm9uZz4gLSAyMDE2LTAxLTA4OgogICA8dWw+CiAgICAgIDxsaT5NaW5pbWFsIENNUyB2ZXJzaW9uID0gMi4xLjE8L2xpPgogICAgICA8bGk+Tm93IHVzZXMgdGhlIFN0eWxlc2hlZXRQcmVDb21waWxlIGV2ZW50IGluc3RlYWQgb2YgdGhlIFNtYXJ0eVByZUNvbXBpbGU8L2xpPgogICAgICA8bGk+U29tZSBidWcgZml4ZSAoZGVmYXVsdCBQcmVQcm9jZXNzb3IgYmVjb21lIE95ZWpvcmdlcyBvbmUpPC9saT4KICAgICAgPGxpPlVwZGF0ZWQgdG8gT3llam9yZ2UncyBMZXNzLnBocCB2LiAxLjcuMC4xMCAtIHBsZWFzZSB0ZXN0ITwvbGk+CiAgICAgIDxsaT5SZW1vdmVkIHRoZSAteCAoY29tcHJlc3MpIG9wdGlvbiBmcm9tIExlc3MgY29tbWFuZCBsaW5lIGNvbXBpbGVyIFByZXByb2Nlc3NvciBhcyBpdCdzIG5vdyBkZXByZWNhdGVkIC0geW91IGNhbiB1c2UgdGhlIGVtYmVkZWQgbWluaWZpZXI8L2xpPgogICAgPC91bD4KICA8L2xpPgoJPGxpPjxzdHJvbmc+MS4zPC9zdHJvbmc+IC0gMjAxNS0wMS0yMDogYWRkIHN1cHBvcnQgZm9yIEF1dG9wcmVmaXggZm9yIHRoZSBMZXNzYyBjb21tYW5kIGxpbmUgLSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Bvc3Rjc3MvYXV0b3ByZWZpeGVyIC0gY2hlY2sgb3V0IG5ldyBvcHRpb25zIG9uIHRoZSBhZG1pbiBwYW5lbCAtIHBsZWFzZSB0ZXN0IHdpdGggeW91ciB2ZXJzaW9uIG9mIExlc3NjPC9saT4KCTxsaT48c3Ryb25nPjEuMjwvc3Ryb25nPiAtIDIwMTQtMDktMjU6IHVwZGF0ZSB0byB0aGUgcGF0aHMgLyBOb3cgdGhlIGluY2x1ZGUgZGlyIGlzIHJlbGF0aXZlIHRvIHRoZSByb290IHBhdGggKG5vdCB0aGUgdXBsb2FkcyBhbnltb3JlKSAtIFBsZWFzZSB1cGRhdGUgeW91ciBjb25maWd1cmF0aW9uIHRvIGFkZCA8c3Ryb25nPnVwbG9hZHMvPC9zdHJvbmc+IGlmIG5lZWRlZCE8YnI+CgkJVGhpcyBpcyB1c2VmdWwgaWYgeW91IHBsYWNlIHlvdXIgbGVzcyBmaWxlcyBpbiBhbm90aGVyIGRpciB0aGF0IHRoZSB1cGxvYWRzLyBvbmUKCTwvbGk+Cgk8bGk+PHN0cm9uZz4xLjE8L3N0cm9uZz4gLSAyMDE0LTA5LTAzOiBBZGQgU21hcnR5IHN1cHBvcnQgLSBOb3RlIHRoYXQgdGhlIG1vZHVsZSBub3cgcGx1Z3Mgb24gdGhlIFNtYXJ0eVByZUNvbXBpbGUgZXZlbnQgKGJlZm9yZSBpdCB3YXMgU21hcnR5UG9zdENvbXBpbGUpIC0gVGhpcyBuZWVkcyB0ZXN0czwvbGk+Cgk8bGk+PHN0cm9uZz4xLjAuMTwvc3Ryb25nPiAtIDIwMTQtMDktMDM6IEJ1ZyBmaXhlczwvbGk+Cgk8bGk+PHN0cm9uZz4xLjA8L3N0cm9uZz4gLSAyMDE0LTA5LTAyOiBJbml0aWFsIDEuMCByZWxlYXNlIC0gUGxlYXNlIHRlc3QgYW5kIGdpdmUgbWUgZmVlZGJhY2s8L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/doc/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/event.Core.StylesheetPreCompile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKJGNvbnRlbnQgPSAmJHBhcmFtc1snc3R5bGVzaGVldCddOwokc2VhcmNoX3N0cmluZyA9ICdAQENTU1ByZXByb2Nlc3NvckBAJzsKCmlmIChzdHJwb3MoJGNvbnRlbnQsICRzZWFyY2hfc3RyaW5nKSAhPT0gZmFsc2UpCnsKCgkvLyBQcmV2ZW50IGZyb20gbG9vcHMgKHNtYXJ0eSBmZXRjaCBsYXVuY2hlcyB0aGlzIHByZWNvbXBpbGUgZnVuY3Rpb24gaW4gYSBsb29wCgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCRzZWFyY2hfc3RyaW5nLCAnJywgJGNvbnRlbnQpOwoKCS8vIFdlIG5lZWQgdG8gY29tcGlsZSBzbWFydHkgYmVmb3JlIHRoZSBDU1NQcmVwcm9jZXNzb3IsIHNpbmNlIHRoZSBwcmVwcm9jZXNzb3Igd2lsbCBub3QgdW5kZXJzdGFuZCBbWyBdXSBjb2RlCgkkY29udGVudCA9ICR0aGlzLT5GZXRjaFNtYXJ0eSgkY29udGVudCk7CgoKCgkvLyBDU1NQcmVwcm9jZXNzb3IgbG9hZCBhbmQgY29tcGlsZQoJJHByb2Nlc3NvciA9ICR0aGlzLT5HZXRQcmVwcm9jZXNzb3IoKTsKCglpZiAoJHByb2Nlc3NvcikKCQkkcHJvY2Vzc29yLT5Db21waWxlQ1NTKCRjb250ZW50KTsKCgkvLyBNaW5pZnkKCWlmICgkdGhpcy0+bWluaWZ5KQoJCSRwcm9jZXNzb3ItPk1pbmlmeUNTUygkY29udGVudCk7Cn0KCgoKCgoKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgQQokbGFuZ1snYXV0b3ByZWZpeGVyX2Jyb3dzZXJzJ10gPSAnTGlzdCBvZiBicm93c2VycyBmb3IgdGhlIEF1dG9wcmVmaXhlciBwbHVnaW4gLSBTZWU6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9wb3N0Y3NzL2F1dG9wcmVmaXhlciNicm93c2VycyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9wb3N0Y3NzL2F1dG9wcmVmaXhlciNicm93c2VyczwvYT4nOwoKIyBDCiRsYW5nWydjYW5jZWwnXSA9ICdDYW5jZWwnOwokbGFuZ1snY3NzX3ByZXByb2Nlc3NvciddID0gJ0NTUyBQcmVwcm9jZXNzb3InOwokbGFuZ1snY2hvb3NlX3ByZXByb2Nlc3NvciddID0gJ0Nob29zZSB0aGUgcHJlcHJvY2Vzc29yIHlvdSB3YW50IHRvIHVzZTonOwoKCiMgRgokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnQ1NTIFByZXByb2Nlc3Nvcic7CgoKIyBHCiRsYW5nWydnZW5lcmF0ZV9zb3VyY2VtYXAnXSA9ICdTb3VyY2UgbWFwJzsKJGxhbmdbJ2dlbmVyYXRlX3NvdXJjZW1hcF9sYWJlbCddID0gJ0dlbmVyYXRlIGEgc291cmNlIG1hcCwgaWYgdGhlIFByZVByb2Nlc3NvciBzdXBwb3J0cyBpdCc7CgoKIyBICgoKCiMgSQokbGFuZ1snaW1wb3J0X2RpcnMnXSA9ICdEaXJlY3RvcmllcyBjb250YWluaW5nIExFU1MvU0FTUyBmaWxlcyB0byBpbmNsdWRlIGluIGNvbXBpbGF0aW9uIC0gUmVsYXRpdmUgdG8gdGhlIDxzdHJvbmc+cm9vdDwvc3Ryb25nPiBkaXIgLSBDb21tYSBzZXBhcmF0ZWQgbGlzdCc7CgojIE0KJGxhbmdbJ21pbmlmeSddID0gJ01pbmlmeSc7CiRsYW5nWydtaW5pZnlfbGFiZWwnXSA9ICdNaW5pZnkgdGhlIENTUyAtIE5vdGU6IGlmIGFsbG93ZWQgYnkgdGhlIHByZS1wcm9jZXNzb3IgJzsKCiMgTgokbGFuZ1snbm90ZSddID0gJ05vdGU6JzsKCgojIE8KJGxhbmdbJ29wdGlvbnMnXSA9ICdPcHRpb25zJzsKCgojIFAKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW5jZXMnOwokbGFuZ1sncHJlZmVyZW5jZXNfc2V0J10gPSAnUHJlZmVyZW5jZXMgc2F2ZWQ8YnI+UGxlYXNlIGNsZWFyIHlvdXIgd2Vic2l0ZSBjYWNoZSBpbiBvcmRlciB0byByZS1wcm9jZXNzIHRoZSBDU1MnOwoKCgoKIyBTCiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwoKCiMgVQokbGFuZ1sndXNlX2F1dG9wcmVmaXhlciddID0gJ1VzZSBBdXRvcHJlZml4ZXIgKG1vcmUgaW5mbzogPGEgaHJlZj0iaHR0cHM6I2dpdGh1Yi5jb20vcG9zdGNzcy9hdXRvcHJlZml4ZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczojZ2l0aHViLmNvbS9wb3N0Y3NzL2F1dG9wcmVmaXhlcjwvYT4pIC0gb25seSBpZiBpdFwncyBpbnN0YWxsZWQgb24gdGhlIHNlcnZlciBhbmQgdGhlIHByZXByb2Nlc3NvciBzdXBwb3J0cyBpdCc7CgoKJGxhbmdbJ2hlbHAnXSA9IDw8PEVPVAo8aDI+V2hhdCBkb2VzIHRoaXMgZG8/PC9oMj4KIDxwPlRoaXMgbW9kdWxlIGFkZHMgdG8gdGhlIENNU01TIFN0eWxlc2hlZXRzIC8gRGVzaWduIG1hbmFnZXIgc29tZSBDU1MgUHJlcHJvY2Vzc29ycywgaW4gb3JkZXIgdG8gY29tcGlsZSBMRVNTIG9yIFNBU1MgbGFuZ3VhZ2VzIChvciBvdGhlciBtYXliZSBsYXRlcikuPC9wPgoKIDxoMj5Ib3cgZG9lcyBpdCB3b3JrIGFuZCBpbnRlZ3JhdGUgaW4gQ01TTVM8L2gyPgogPHA+CglUaGlzIG1vZHVsZSB1c2VzIHRoZSBzdGFuZGFyZCBzdHlsZXNoZWV0cyBvZiBDTVMgTWFkZSBTaW1wbGUuIEl0IGlzIGxhdW5jaGVkIGFmdGVyIGFsbCB0aGUgc3R5bGVzaGVldHMgaGF2ZSBiZWVuIGNvbWJpbmVkLCBhbmQgaXQgdGFrZXMgYWxsIHRoZSBDU1MgY29udGVudCB0byBnaXZlIGl0IHRvIHRoZSBQcmVwcm9jZXNzb3Igb2YgeW91ciBjaG9pY2UuCiA8L3A+CiA8cD4KCQk8c3Ryb25nPkZvciBDTVNNUyAxLjEyPC9zdHJvbmc+IDogS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBtb2R1bGUgcHJvY2Vzc2VzIHRoZSBlbnRpcmUgc3R5bGVzaGVldCBhZnRlciB0aGVpciBjb21iaW5hdGlvbi4gTm8gbWF0dGVyIGlmIHlvdSB1c2UgMSBvciAxMCBzdHlsZXNoZWV0cyBpbiB5b3VyIGRlc2lnbiwgdGhlIHByZXByb2Nlc3NvciB3aWxsIG9ubHkgZ2V0IG9uZSBzdHJpbmcuCiAgPC9wPgogIDxwPgogICAgPHN0cm9uZz5Gb3IgQ01TTVMgMis8L3N0cm9uZz4gOiB0aGUgbmV3IHtjbXNfc3R5bGVzaGVldH0gaGFzIGEgZGlmZmVyZW50IGJlaGF2aW91ci4gRXZlcnkgc3R5bGVzaGVldCBpcyBwcm9jZXNzZWQgc2VwZXJhdGVseSwgYW5kIHRoZSBDU1NQcmVwcm9jZXNzb3IgbW9kdWxlIHdpbGwgbm90IHdvcmsgaWYgeW91IGhhdmUgbW9yZSB0aGFuIDEgTEVTUyAvIFNBU1MgU3R5bGVzc2hlZXQgaW4gdGhlIGRlc2lnbi4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gZGVmaW5lIGEgdmFyaWFibGUgaW4gb25lIHN0eWxlc2hlZXQsIGFuZCB0aGVuIHVzZSBpdCBpbiBhbm90aGVyIG9uZS48YnI+CiAgICA8c3Ryb25nPlNvbHV0aW9uOjwvc3Ryb25nPiA6IHB1dCB5b3VyIExFU1MgLyBTQVNTIGNvZGUgaW4gZmlsZXMgYW5kIGxpbmsgdGhlIG1haW4gZmlsZSB3aXRoIHRoZSBtb2R1bGUgdGhyb3VnaCB0aGUgImltcG9ydCBkaXJzIiBwYXJhbWV0ZXIuCiA8L3A+Cgo8aDI+SG93IERvIEkgVXNlIEl0PC9oMj4KPGgzPkNNU01TIDEuMTI8L2gzPgo8dWw+Cgk8bGk+VXNlIHRoZSAiY29tYmluZSIgb3B0aW9uIChkZWZhdWx0IGluIHtjbXNfc3R5bGVzaGVldH0pPC9saT4KCTxsaT5JbiBvcmRlciB0byByZWNvZ25pemUgd2hpY2ggdGVtcGxhdGUgaXMgYSBzdHlsZXNoZWV0LCB5b3UgTVVTVCBwdXQgdGhhdCBzdHJpbmcgaW4gb25lIG9mIHlvdXIgc3R5bGVzaGVldHM6IDxzdHJvbmc+QEBDU1NQcmVwcm9jZXNzb3JAQDwvc3Ryb25nPiAtIEkgc3VnZ2VzdCBwdXR0aW5nIGl0IGluIGEgc2ltcGxlIGNvbW1lbnQ8L2xpPgoJPGxpPgoJCURlZmluZSB5b3VyIGltcG9ydCBkaXJlY3RvcmllcywgaWYgeW91IHVzZSBpdC4gRm9yIGV4ZW1wbGUsIGlmIHlvdSB3YW50IHRvIGludGVncmF0ZSBCb290c3RyYXAsIHlvdSBjYW4gOgoJCTxvbD4KCQkJPGxpPlB1dCB5b3VyIEJvb3RzdHJhcCBMRVNTIHNvdXJjZSBmaWxlcyBpbiB1cGxvYWRzL2Jvb3RzdHJhcC88L2xpPgoJCQk8bGk+VHlwZSA8c3Ryb25nPjxlbT51cGxvYWRzL2Jvb3RzdHJhcDwvZW0+PC9zdHJvbmc+IGluIHRoZSAiRGlyZWN0b3JpZXMgY29udGFpbmluZyBMRVNTL1NBU1MgZmlsZXMgdG8gaW5jbHVkZSBpbiBjb21waWxhdGlvbiIgLSBObyBzbGFzaCBhdCBiZWdpbm5pbmcgb3IgZW5kPC9saT4KCQk8L29sPgoJPC9saT4KCTxsaT5TdGFydCB1c2luZyBMRVNTIGNvZGUgaW4geW91ciBzdHlsZXNoZWV0cyE8L2xpPgo8L3VsPgoKPGgzPkNNU01TIDIrPC9oMz4KPHVsPgoJPGxpPkluIG9yZGVyIHRvIHJlY29nbml6ZSB3aGljaCB0ZW1wbGF0ZSBpcyBhIHN0eWxlc2hlZXQsIHlvdSBNVVNUIHB1dCB0aGF0IHN0cmluZyBpbiBvbmUgb2YgeW91ciBzdHlsZXNoZWV0czogPHN0cm9uZz5AQENTU1ByZXByb2Nlc3NvckBAPC9zdHJvbmc+IC0gSSBzdWdnZXN0IHB1dHRpbmcgaXQgaW4gYSBzaW1wbGUgY29tbWVudDwvbGk+Cgk8bGk+CgkJRGVmaW5lIHlvdXIgaW1wb3J0IGRpcmVjdG9yaWVzLCBpZiB5b3UgdXNlIGl0LiBGb3IgZXhlbXBsZSwgaWYgeW91IHdhbnQgdG8gaW50ZWdyYXRlIEJvb3RzdHJhcCwgeW91IGNhbiA6CgkJPG9sPgoJCQk8bGk+UHV0IHlvdXIgQm9vdHN0cmFwIExFU1Mgc291cmNlIGZpbGVzIGluIHVwbG9hZHMvYm9vdHN0cmFwLzwvbGk+CgkJCTxsaT5UeXBlIDxzdHJvbmc+PGVtPnVwbG9hZHMvYm9vdHN0cmFwPC9lbT48L3N0cm9uZz4gaW4gdGhlICJEaXJlY3RvcmllcyBjb250YWluaW5nIExFU1MvU0FTUyBmaWxlcyB0byBpbmNsdWRlIGluIGNvbXBpbGF0aW9uIiAtIE5vIHNsYXNoIGF0IGJlZ2lubmluZyBvciBlbmQ8L2xpPgogICAgICA8bGk+Q3JlYXRlIGEgImN1c3RvbSIgc3R5bGVzaGVldCAob25seSBvbmUgc3R5bGVzaGVldCkgYW5kIGxpbmsgaXQgdG8geW91ciBkZXNpZ24uPC9saT4KCQk8L29sPgoJPC9saT4KICA8bGk+CgkJU2FtZSBjYW4gYmUgZG9uZSBmb3IgRm91bmRhdGlvbjoKCQk8b2w+CgkJCTxsaT5QdXQgeW91ciBGb3VuZGF0aW9uIFNBU1Mgc291cmNlIGZpbGVzIGluIHVwbG9hZHMvZm91bmRhdGlvbi9zY3NzPC9saT4KCQkJPGxpPlR5cGUgPHN0cm9uZz48ZW0+dXBsb2Fkcy9mb3VuZGF0aW9uL3Njc3M8L2VtPjwvc3Ryb25nPiBpbiB0aGUgIkRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgTEVTUy9TQVNTIGZpbGVzIHRvIGluY2x1ZGUgaW4gY29tcGlsYXRpb24iIC0gTm8gc2xhc2ggYXQgYmVnaW5uaW5nIG9yIGVuZDwvbGk+CgkJPC9vbD4KCTwvbGk+Cgk8bGk+U3RhcnQgdXNpbmcgTEVTUyBjb2RlIGluIHlvdXIgc3R5bGVzaGVldHMhPC9saT4KPC91bD4KCgo8aDI+VXBkYXRpbmcgc3R5bGVzaGVldHM8L2gyPgo8cD4KCUlmIHlvdSBtYWtlIGFuIHVwZGF0ZSBvbiBhIENNU01TIHN0eWxlc2hlZXQsIGV2ZXJ5dGhpbmcgaXMgZmluZSBhbmQgdGhlIG1vZHVsZSB3aWxsIHByb2Nlc3MgdGhlIHN0eWxlc2hlZXQgYWdhaW4gb24gdGhlIG5leHQgcGFnZSByZWZyZXNoLgo8L3A+CjxwPgoJSG93ZXZlciwgaWYgeW91IGRpZCBtYWtlIGEgY2hhbmdlIGluIHlvdXIgaW1wb3J0ZWQgbGVzcyBmaWxlcywgdGhlIHN5c3RlbSB3aWxsIG5vdCBwZXJmb3JtIGFueSB1cGRhdGUgLSBpbiB0aGlzIGNhc2UsIHlvdSBtdXN0IGNsZWFyIHRoZSBjYWNoZSBvciBzaW1wbHkgcmVtb3ZlIHRoZSBzdHlsZXNoZWV0IGZyb20gdGhlIGNhY2hlIGRpcmVjdG9yeS4KPC9wPgoKCgo8aDI+U21hcnR5IHN1cHBvcnQ8L2gyPgo8cD5Zb3UgY2FuIHVzZSBTbWFydHkgdGFncyB3aXRoIFtbIGFuZCBdXSAtIFNtYXJ0eSB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIENTUyBQcmVQcm9jZXNzb3IuPC9wPgoKPGgyPlVzaW5nIFNvdXJjZW1hcHM8L2gyPgo8cD4KCVNvbWUgcHJlcHJvY2Vzc29ycyBjYW4gY3JlYXRlIHNvdXJjZW1hcCBmaWxlcywgaW4gb3JkZXIgdG8gaGVscCB5b3UgZHVyaW5nIGludGVncmF0aW9uLiBEb24ndCBmb3JnZXQgdG8gY29uZmlndXJlIHlvdXIgYnJvd3NlciB0byB1c2UgdGhhdCBmdW5jdGlvbi4gTm90ZSB0aGF0IG9ubHkgaW1wb3J0ZWQgZmlsZXMgd2lsbCBiZSBtYXBwZWQgaW4gdGhlIHNvdXJjZW1hcHMgKHRoaXMgbWF5IGNoYW5nZSBpbiBhIGZ1cnRoZXIgdmVyc2lvbikuCjwvcD4KCjxoMj5EZWFjdGl2YXRlIHRoZSBtb2R1bGU8L2gyPgo8cD4KCUlmIHlvdSBkb24ndCB3YW50IHRvIHVzZSBhbnkgb2YgdGhlIHByZXByb2Nlc3NvcnMsIHBsZWFzZSByZW1vdmUgaXQgb3IgZGlzYWJsZSBpdCBpbiB0aGUgTW9kdWxlcyBNYW5hZ2VyIC0gVGhlcmUgYXJlIG5vICJkZWFjdGl2YXRlIiBmdW5jdGlvbiBidWlsdCBpbiB0aGUgbW9kdWxlLgo8L3A+Cgo8aDI+UHJlcHJvY2Vzc29yIHN3aXRjaDwvaDI+CjxwPgoJWW91IG1heSB3YW50IHRvIHN3aXRjaCBmcm9tIG9uZSBwcmVwcm9jZXNzb3IgdG8gYW5vdGhlciAtIERvbid0IGZvcmdldCB0byBjbGVhciB5b3VyIGNhY2hlIGFmdGVyIHRoYXQgYmVjYXVzZSB0aGUgbW9kdWxlIHdpbGwgbm90IGRvIGl0Lgo8L3A+Cgo8aDI+RXh0ZW5kIHdpdGggYW5vdGhlciBwcmVwcm9jZXNzb3I8L2gyPgo8cD4KCVlvdSBjYW4gY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiB0aGUgInByZXByb2Nlc3NvcnMiIGRpcmVjdG9yeSwgYW5kIGNyZWF0ZSB5b3VyIG93biBjbGFzcyAtIENoZWNrIGhvdyB0aGUgYnVuZGxlZCBwcmVwcm9jZXNzb3JzIGFyZSBpbnRlZ3JhdGVkLgo8L3A+CjxwPkRvbid0IGZvcmdldCB0byA8YSBocmVmPSJtYWlsdG86Y29udGFjdEBhaXJlbGlicmUuZnIiPmVtYWlsIG1lPC9hPiBpZiB5b3Ugd2FudCB5b3VyIHByZXByb2Nlc3NvciB0byBiZSBhZGRlZCB0byB0aGUgcHJvamVjdCE8L3A+Cgo8aDI+U3VwcG9ydDwvaDI+Cgk8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoJPHA+CgkJSWYgeW91IHdhbnQgdG8gY29udGFjdCBtZTogPGEgaHJlZj0ibWFpbHRvOmNvbnRhY3RAYWlyZWxpYnJlLmZyIj5jb250YWN0QGFpcmVsaWJyZS5mcjwvYT4KCTwvcD4KCjxoMj5Qcm9qZWN0IG9uIHRoZSB3ZWI8L2gyPgo8cD5Zb3UgY2FuIGZvbGxvdyB0aGUgcHJvamVjdCBvbiA6IDwvcD4KCTx1bD4KCQk8bGk+R2l0SHViOiA8YSBocmVmPSJodHRwczojZ2l0aHViLmNvbS9haXJlbGlicmUvQ1NTUHJlcHJvY2Vzc29yIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6I2dpdGh1Yi5jb20vYWlyZWxpYnJlL0NTU1ByZXByb2Nlc3NvcjwvYT48L2xpPgoJCTxsaT5DTVNNUyBGb3JnZTogPGEgaHJlZj0iaHR0cDojZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2Nzc3ByZXByb2Nlc3NvciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6I2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jc3NwcmVwcm9jZXNzb3I8L2E+PC9saT4KCTwvdWw+Cgo8aDI+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMj4KCTxwPkNvcHlyaWdodCAmY29weTsgMjAxNCwgQWlyZUxpYnJlIDxhIGhyZWY9Im1haWx0bzpjb250YWN0QGFpcmVsaWJyZS5mciI+Y29udGFjdEBhaXJlbGlicmUuZnI8L2E+IC8gPGEgaHJlZj0iaHR0cDojd3d3LmFpcmVsaWJyZS5mciIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5haXJlbGlicmUuZnI8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+Cgk8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDojd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+CgoJPGgzPlByZXByb2Nlc3NvcnMgY29weXJpZ2h0PC9oMz4KCTxwPgoJCVRoZSBhdXRob3Igb2YgdGhpcyBtb2R1bGUgZG9lcyBub3Qgb3duIHRoZSBwcmVwcm9jZXNzb3JzIGJ1bmRsZWQgd2l0aCBpdCAtIFBsZWFzZSBzZWUgZXZlcnkgcHJlcHJvY2Vzc29ycyBzb3VyY2UgY29kZSAvIHdlYnNpdGUgdG8gZ2V0IGluZm9ybWF0aW9ucyBhYm91dCBsaWNlbmNlIGFuZCBjb3B5cmlnaHQuCgk8L3A+Cgk8cD5JIGp1c3Qgd2FudGVkIHRvIHRoYW5rIGFsbCB0aGUgZGV2ZWxvcGVycyB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlc2UgcHJlcHJvY2Vzc29ycyB3aGljaCBhcmUgZ3JlYXQgdG9vbHMgZm9yIGRlc2lnbmVycyE8L3A+CkVPVDsKCgoKCgoKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2F1dG9wcmVmaXhlcl9icm93c2VycyddID0gJ0xpc3RlIGRlcyBuYXZpZ2F0ZXVycyDDoCBwYXNzZXIgZW4gcGFyYW3DqHRyZSBhdSBwbHVnaW4gQXV0b3ByZWZpeGVyIC0gQ29uc3VsdGV6IDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3Bvc3Rjc3MvYXV0b3ByZWZpeGVyI2Jyb3dzZXJzIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL3Bvc3Rjc3MvYXV0b3ByZWZpeGVyI2Jyb3dzZXJzPC9hPic7CiRsYW5nWydjYW5jZWwnXSA9ICdBbm51bGVyJzsKJGxhbmdbJ2Nzc19wcmVwcm9jZXNzb3InXSA9ICdQcsOpcHJvY2Vzc2V1ciBDU1MnOwokbGFuZ1snY2hvb3NlX3ByZXByb2Nlc3NvciddID0gJ0Nob2lzaXNzZXogbGUgcHLDqXByb2Nlc3NldXIgcXVlIHZvdXMgc291aGFpdGV6IHV0aWxpc2VyJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1Byw6lwcm9jZXNzZXVyIENTUyc7CiRsYW5nWydnZW5lcmF0ZV9zb3VyY2VtYXAnXSA9ICdGaWNoaWVyIHNvdXJjZW1hcCc7CiRsYW5nWydnZW5lcmF0ZV9zb3VyY2VtYXBfbGFiZWwnXSA9ICdHw6luw6lyZXIgdW4gc291cmNlIG1hcCwgc2kgbGUgcHLDqXByb2Nlc3NldXIgbGUgc3VwcG9ydGUnOwokbGFuZ1snaW1wb3J0X2RpcnMnXSA9ICdSw6lwZXJ0b2lyZXMgY29udGVuYW50IGRlcyBmaWNoaWVycyBMRVNTIMOgIGluY2x1cmUgbG9ycyBkZSBsYSBjb21waWxhdGlvbiAtIFJlbGF0aWYgYXUgcsOpcGVydG9pcmUgcmFjaW5lIGR1IENNUyAtIExpc3RlIHPDqXBhcsOpZSBwYXIgZGVzIHZpcmd1bGVzJzsKJGxhbmdbJ21pbmlmeSddID0gJ01pbmlmaWVyJzsKJGxhbmdbJ21pbmlmeV9sYWJlbCddID0gJ01pbmlmaWVyIGxlIENTUyc7CiRsYW5nWydub3RlJ10gPSAnTm90ZSA6JzsKJGxhbmdbJ29wdGlvbnMnXSA9ICdPcHRpb25zJm5ic3A7JzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHLDqWbDqXJlbmNlcyc7CiRsYW5nWydwcmVmZXJlbmNlc19zZXQnXSA9ICdQcsOpZsOpcmVuY2VzIHNhdXZlZ2FyZMOpZXM8YnI+VmV1aWxsZXogdmlkZXIgbGUgY2FjaGUgZHUgQ01TIHBvdXIgcmUtZ8OpbsOpcmVyIGxlcyBDU1MnOwokbGFuZ1snc3VibWl0J10gPSAnRW52b3llcic7CiRsYW5nWyd1c2VfYXV0b3ByZWZpeGVyJ10gPSAnVXRpbGlzZXIgQXV0b3ByZWZpeGVyIChwbHVzIGRcJ2luZm9zIHN1ciA8YSBocmVmPSJodHRwczojZ2l0aHViLmNvbS9wb3N0Y3NzL2F1dG9wcmVmaXhlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOiNnaXRodWIuY29tL3Bvc3Rjc3MvYXV0b3ByZWZpeGVyPC9hPikgLSBTZXVsZW1lbnQgc2kgaW5zdGFsbMOpIHN1ciBsZSBzZXJ2ZXVyIGV0IHNpIGxlIHByw6lwcm9jZXNzZXVyIHPDqWxlY3Rpb25uw6kgbGUgcGVybWV0Lic7CiRsYW5nWydoZWxwJ10gPSAnPGgyPldoYXQgZG9lcyB0aGlzIGRvPzwvaDI+DQogPHA+VGhpcyBtb2R1bGUgYWRkcyB0byB0aGUgQ01TTVMgU3R5bGVzaGVldHMgLyBEZXNpZ24gbWFuYWdlciBzb21lIENTUyBQcmVwcm9jZXNzb3JzLCBpbiBvcmRlciB0byBjb21waWxlIExFU1Mgb3IgU0FTUyBsYW5ndWFnZXMgKG9yIG90aGVyIG1heWJlIGxhdGVyKS48L3A+DQoNCiA8aDI+SG93IGRvZXMgaXQgd29yayBhbmQgaW50ZWdyYXRlIGluIENNU01TPC9oMj4NCiA8cD4NCglUaGlzIG1vZHVsZSB1c2VzIHRoZSBzdGFuZGFyZCBzdHlsZXNoZWV0cyBvZiBDTVMgTWFkZSBTaW1wbGUuIEl0IGlzIGxhdW5jaGVkIGFmdGVyIGFsbCB0aGUgc3R5bGVzaGVldHMgaGF2ZSBiZWVuIGNvbWJpbmVkLCBhbmQgaXQgdGFrZXMgYWxsIHRoZSBDU1MgY29udGVudCB0byBnaXZlIGl0IHRvIHRoZSBQcmVwcm9jZXNzb3Igb2YgeW91ciBjaG9pY2UuDQogPC9wPg0KIDxwPg0KCQk8c3Ryb25nPkZvciBDTVNNUyAxLjEyPC9zdHJvbmc+IDogS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBtb2R1bGUgcHJvY2Vzc2VzIHRoZSBlbnRpcmUgc3R5bGVzaGVldCBhZnRlciB0aGVpciBjb21iaW5hdGlvbi4gTm8gbWF0dGVyIGlmIHlvdSB1c2UgMSBvciAxMCBzdHlsZXNoZWV0cyBpbiB5b3VyIGRlc2lnbiwgdGhlIHByZXByb2Nlc3NvciB3aWxsIG9ubHkgZ2V0IG9uZSBzdHJpbmcuDQogIDwvcD4NCiAgPHA+DQogICAgPHN0cm9uZz5Gb3IgQ01TTVMgMis8L3N0cm9uZz4gOiB0aGUgbmV3IHtjbXNfc3R5bGVzaGVldH0gaGFzIGEgZGlmZmVyZW50IGJlaGF2aW91ci4gRXZlcnkgc3R5bGVzaGVldCBpcyBwcm9jZXNzZWQgc2VwZXJhdGVseSwgYW5kIHRoZSBDU1NQcmVwcm9jZXNzb3IgbW9kdWxlIHdpbGwgbm90IHdvcmsgaWYgeW91IGhhdmUgbW9yZSB0aGFuIDEgTEVTUyAvIFNBU1MgU3R5bGVzc2hlZXQgaW4gdGhlIGRlc2lnbi4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gZGVmaW5lIGEgdmFyaWFibGUgaW4gb25lIHN0eWxlc2hlZXQsIGFuZCB0aGVuIHVzZSBpdCBpbiBhbm90aGVyIG9uZS48YnI+DQogICAgPHN0cm9uZz5Tb2x1dGlvbjo8L3N0cm9uZz4gOiBwdXQgeW91ciBMRVNTIC8gU0FTUyBjb2RlIGluIGZpbGVzIGFuZCBsaW5rIHRoZSBtYWluIGZpbGUgd2l0aCB0aGUgbW9kdWxlIHRocm91Z2ggdGhlICJpbXBvcnQgZGlycyIgcGFyYW1ldGVyLg0KIDwvcD4NCg0KPGgyPkhvdyBEbyBJIFVzZSBJdDwvaDI+DQo8aDM+Q01TTVMgMS4xMjwvaDM+DQo8dWw+DQoJPGxpPlVzZSB0aGUgImNvbWJpbmUiIG9wdGlvbiAoZGVmYXVsdCBpbiB7Y21zX3N0eWxlc2hlZXR9KTwvbGk+DQoJPGxpPkluIG9yZGVyIHRvIHJlY29nbml6ZSB3aGljaCB0ZW1wbGF0ZSBpcyBhIHN0eWxlc2hlZXQsIHlvdSBNVVNUIHB1dCB0aGF0IHN0cmluZyBpbiBvbmUgb2YgeW91ciBzdHlsZXNoZWV0czogPHN0cm9uZz5AQENTU1ByZXByb2Nlc3NvckBAPC9zdHJvbmc+IC0gSSBzdWdnZXN0IHB1dHRpbmcgaXQgaW4gYSBzaW1wbGUgY29tbWVudDwvbGk+DQoJPGxpPg0KCQlEZWZpbmUgeW91ciBpbXBvcnQgZGlyZWN0b3JpZXMsIGlmIHlvdSB1c2UgaXQuIEZvciBleGVtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgQm9vdHN0cmFwLCB5b3UgY2FuIDoNCgkJPG9sPg0KCQkJPGxpPlB1dCB5b3VyIEJvb3RzdHJhcCBMRVNTIHNvdXJjZSBmaWxlcyBpbiB1cGxvYWRzL2Jvb3RzdHJhcC88L2xpPg0KCQkJPGxpPlR5cGUgPHN0cm9uZz48ZW0+dXBsb2Fkcy9ib290c3RyYXA8L2VtPjwvc3Ryb25nPiBpbiB0aGUgIkRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgTEVTUy9TQVNTIGZpbGVzIHRvIGluY2x1ZGUgaW4gY29tcGlsYXRpb24iIC0gTm8gc2xhc2ggYXQgYmVnaW5uaW5nIG9yIGVuZDwvbGk+DQoJCTwvb2w+DQoJPC9saT4NCgk8bGk+U3RhcnQgdXNpbmcgTEVTUyBjb2RlIGluIHlvdXIgc3R5bGVzaGVldHMhPC9saT4NCjwvdWw+DQoNCjxoMz5DTVNNUyAyKzwvaDM+DQo8dWw+DQoJPGxpPkluIG9yZGVyIHRvIHJlY29nbml6ZSB3aGljaCB0ZW1wbGF0ZSBpcyBhIHN0eWxlc2hlZXQsIHlvdSBNVVNUIHB1dCB0aGF0IHN0cmluZyBpbiBvbmUgb2YgeW91ciBzdHlsZXNoZWV0czogPHN0cm9uZz5AQENTU1ByZXByb2Nlc3NvckBAPC9zdHJvbmc+IC0gSSBzdWdnZXN0IHB1dHRpbmcgaXQgaW4gYSBzaW1wbGUgY29tbWVudDwvbGk+DQoJPGxpPg0KCQlEZWZpbmUgeW91ciBpbXBvcnQgZGlyZWN0b3JpZXMsIGlmIHlvdSB1c2UgaXQuIEZvciBleGVtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgQm9vdHN0cmFwLCB5b3UgY2FuIDoNCgkJPG9sPg0KCQkJPGxpPlB1dCB5b3VyIEJvb3RzdHJhcCBMRVNTIHNvdXJjZSBmaWxlcyBpbiB1cGxvYWRzL2Jvb3RzdHJhcC88L2xpPg0KCQkJPGxpPlR5cGUgPHN0cm9uZz48ZW0+dXBsb2Fkcy9ib290c3RyYXA8L2VtPjwvc3Ryb25nPiBpbiB0aGUgIkRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgTEVTUy9TQVNTIGZpbGVzIHRvIGluY2x1ZGUgaW4gY29tcGlsYXRpb24iIC0gTm8gc2xhc2ggYXQgYmVnaW5uaW5nIG9yIGVuZDwvbGk+DQogICAgICA8bGk+Q3JlYXRlIGEgImN1c3RvbSIgc3R5bGVzaGVldCAob25seSBvbmUgc3R5bGVzaGVldCkgYW5kIGxpbmsgaXQgdG8geW91ciBkZXNpZ24uPC9saT4NCgkJPC9vbD4NCgk8L2xpPg0KICA8bGk+DQoJCVNhbWUgY2FuIGJlIGRvbmUgZm9yIEZvdW5kYXRpb246DQoJCTxvbD4NCgkJCTxsaT5QdXQgeW91ciBGb3VuZGF0aW9uIFNBU1Mgc291cmNlIGZpbGVzIGluIHVwbG9hZHMvZm91bmRhdGlvbi9zY3NzPC9saT4NCgkJCTxsaT5UeXBlIDxzdHJvbmc+PGVtPnVwbG9hZHMvZm91bmRhdGlvbi9zY3NzPC9lbT48L3N0cm9uZz4gaW4gdGhlICJEaXJlY3RvcmllcyBjb250YWluaW5nIExFU1MvU0FTUyBmaWxlcyB0byBpbmNsdWRlIGluIGNvbXBpbGF0aW9uIiAtIE5vIHNsYXNoIGF0IGJlZ2lubmluZyBvciBlbmQ8L2xpPg0KCQk8L29sPg0KCTwvbGk+DQoJPGxpPlN0YXJ0IHVzaW5nIExFU1MgY29kZSBpbiB5b3VyIHN0eWxlc2hlZXRzITwvbGk+DQo8L3VsPg0KDQoNCjxoMj5VcGRhdGluZyBzdHlsZXNoZWV0czwvaDI+DQo8cD4NCglJZiB5b3UgbWFrZSBhbiB1cGRhdGUgb24gYSBDTVNNUyBzdHlsZXNoZWV0LCBldmVyeXRoaW5nIGlzIGZpbmUgYW5kIHRoZSBtb2R1bGUgd2lsbCBwcm9jZXNzIHRoZSBzdHlsZXNoZWV0IGFnYWluIG9uIHRoZSBuZXh0IHBhZ2UgcmVmcmVzaC4NCjwvcD4NCjxwPg0KCUhvd2V2ZXIsIGlmIHlvdSBkaWQgbWFrZSBhIGNoYW5nZSBpbiB5b3VyIGltcG9ydGVkIGxlc3MgZmlsZXMsIHRoZSBzeXN0ZW0gd2lsbCBub3QgcGVyZm9ybSBhbnkgdXBkYXRlIC0gaW4gdGhpcyBjYXNlLCB5b3UgbXVzdCBjbGVhciB0aGUgY2FjaGUgb3Igc2ltcGx5IHJlbW92ZSB0aGUgc3R5bGVzaGVldCBmcm9tIHRoZSBjYWNoZSBkaXJlY3RvcnkuDQo8L3A+DQoNCg0KDQo8aDI+U21hcnR5IHN1cHBvcnQ8L2gyPg0KPHA+WW91IGNhbiB1c2UgU21hcnR5IHRhZ3Mgd2l0aCBbWyBhbmQgXV0gLSBTbWFydHkgd2lsbCBiZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBDU1MgUHJlUHJvY2Vzc29yLjwvcD4NCg0KPGgyPlVzaW5nIFNvdXJjZW1hcHM8L2gyPg0KPHA+DQoJU29tZSBwcmVwcm9jZXNzb3JzIGNhbiBjcmVhdGUgc291cmNlbWFwIGZpbGVzLCBpbiBvcmRlciB0byBoZWxwIHlvdSBkdXJpbmcgaW50ZWdyYXRpb24uIERvblwndCBmb3JnZXQgdG8gY29uZmlndXJlIHlvdXIgYnJvd3NlciB0byB1c2UgdGhhdCBmdW5jdGlvbi4gTm90ZSB0aGF0IG9ubHkgaW1wb3J0ZWQgZmlsZXMgd2lsbCBiZSBtYXBwZWQgaW4gdGhlIHNvdXJjZW1hcHMgKHRoaXMgbWF5IGNoYW5nZSBpbiBhIGZ1cnRoZXIgdmVyc2lvbikuDQo8L3A+DQoNCjxoMj5EZWFjdGl2YXRlIHRoZSBtb2R1bGU8L2gyPg0KPHA+DQoJSWYgeW91IGRvblwndCB3YW50IHRvIHVzZSBhbnkgb2YgdGhlIHByZXByb2Nlc3NvcnMsIHBsZWFzZSByZW1vdmUgaXQgb3IgZGlzYWJsZSBpdCBpbiB0aGUgTW9kdWxlcyBNYW5hZ2VyIC0gVGhlcmUgYXJlIG5vICJkZWFjdGl2YXRlIiBmdW5jdGlvbiBidWlsdCBpbiB0aGUgbW9kdWxlLg0KPC9wPg0KDQo8aDI+UHJlcHJvY2Vzc29yIHN3aXRjaDwvaDI+DQo8cD4NCglZb3UgbWF5IHdhbnQgdG8gc3dpdGNoIGZyb20gb25lIHByZXByb2Nlc3NvciB0byBhbm90aGVyIC0gRG9uXCd0IGZvcmdldCB0byBjbGVhciB5b3VyIGNhY2hlIGFmdGVyIHRoYXQgYmVjYXVzZSB0aGUgbW9kdWxlIHdpbGwgbm90IGRvIGl0Lg0KPC9wPg0KDQo8aDI+RXh0ZW5kIHdpdGggYW5vdGhlciBwcmVwcm9jZXNzb3I8L2gyPg0KPHA+DQoJWW91IGNhbiBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGluIHRoZSAicHJlcHJvY2Vzc29ycyIgZGlyZWN0b3J5LCBhbmQgY3JlYXRlIHlvdXIgb3duIGNsYXNzIC0gQ2hlY2sgaG93IHRoZSBidW5kbGVkIHByZXByb2Nlc3NvcnMgYXJlIGludGVncmF0ZWQuDQo8L3A+DQo8cD5Eb25cJ3QgZm9yZ2V0IHRvIDxhIGhyZWY9Im1haWx0bzpjb250YWN0QGFpcmVsaWJyZS5mciI+ZW1haWwgbWU8L2E+IGlmIHlvdSB3YW50IHlvdXIgcHJlcHJvY2Vzc29yIHRvIGJlIGFkZGVkIHRvIHRoZSBwcm9qZWN0ITwvcD4NCg0KPGgyPlN1cHBvcnQ8L2gyPg0KCTxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+DQoJPHA+DQoJCUlmIHlvdSB3YW50IHRvIGNvbnRhY3QgbWU6IDxhIGhyZWY9Im1haWx0bzpjb250YWN0QGFpcmVsaWJyZS5mciI+Y29udGFjdEBhaXJlbGlicmUuZnI8L2E+DQoJPC9wPg0KDQo8aDI+UHJvamVjdCBvbiB0aGUgd2ViPC9oMj4NCjxwPllvdSBjYW4gZm9sbG93IHRoZSBwcm9qZWN0IG9uIDogPC9wPg0KCTx1bD4NCgkJPGxpPkdpdEh1YjogPGEgaHJlZj0iaHR0cHM6I2dpdGh1Yi5jb20vYWlyZWxpYnJlL0NTU1ByZXByb2Nlc3NvciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOiNnaXRodWIuY29tL2FpcmVsaWJyZS9DU1NQcmVwcm9jZXNzb3I8L2E+PC9saT4NCgkJPGxpPkNNU01TIEZvcmdlOiA8YSBocmVmPSJodHRwOiNkZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY3NzcHJlcHJvY2Vzc29yIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDojZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2Nzc3ByZXByb2Nlc3NvcjwvYT48L2xpPg0KCTwvdWw+DQoNCjxoMj5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gyPg0KCTxwPkNvcHlyaWdodCDCqSAyMDE0LCBBaXJlTGlicmUgPGEgaHJlZj0ibWFpbHRvOmNvbnRhY3RAYWlyZWxpYnJlLmZyIj5jb250YWN0QGFpcmVsaWJyZS5mcjwvYT4gLyA8YSBocmVmPSJodHRwOiN3d3cuYWlyZWxpYnJlLmZyIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmFpcmVsaWJyZS5mcjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCgk8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDojd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+DQoNCgk8aDM+UHJlcHJvY2Vzc29ycyBjb3B5cmlnaHQ8L2gzPg0KCTxwPg0KCQlUaGUgYXV0aG9yIG9mIHRoaXMgbW9kdWxlIGRvZXMgbm90IG93biB0aGUgcHJlcHJvY2Vzc29ycyBidW5kbGVkIHdpdGggaXQgLSBQbGVhc2Ugc2VlIGV2ZXJ5IHByZXByb2Nlc3NvcnMgc291cmNlIGNvZGUgLyB3ZWJzaXRlIHRvIGdldCBpbmZvcm1hdGlvbnMgYWJvdXQgbGljZW5jZSBhbmQgY29weXJpZ2h0Lg0KCTwvcD4NCgk8cD5JIGp1c3Qgd2FudGVkIHRvIHRoYW5rIGFsbCB0aGUgZGV2ZWxvcGVycyB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlc2UgcHJlcHJvY2Vzc29ycyB3aGljaCBhcmUgZ3JlYXQgdG9vbHMgZm9yIGRlc2lnbmVycyE8L3A+JzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2NhbmNlbCddID0gJ0F2YnJ5dCc7CiRsYW5nWydjc3NfcHJlcHJvY2Vzc29yJ10gPSAnQ1NTIFByZXByb2Nlc3Nvcic7CiRsYW5nWydjaG9vc2VfcHJlcHJvY2Vzc29yJ10gPSAnVmVsZyBkZW4gcHJlcHJvc2Vzc29yZW4gZHUgdmlsIGJlbnl0dGUnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnQ1NTIFByZXByb2Nlc3Nvcic7CiRsYW5nWydnZW5lcmF0ZV9zb3VyY2VtYXAnXSA9ICdraWxkZWthcnQnOwokbGFuZ1snZ2VuZXJhdGVfc291cmNlbWFwX2xhYmVsJ10gPSAnR2VuZXJlciBraWxkZWthcnQnOwokbGFuZ1snbWluaWZ5J10gPSAnTWluaW1lcic7CiRsYW5nWydub3RlJ10gPSAnTWVya25hZDonOwokbGFuZ1snb3B0aW9ucyddID0gJ1ZhbGcnOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdQcmVmZXJhbnNlcic7CiRsYW5nWydwcmVmZXJlbmNlc19zZXQnXSA9ICdQcmVmZXJhbnNlbmUgYmxlIGxhZ3JldDxicj5WZW5ubGlnc3QgdMO4bSBkaXR0IG5ldHRzdGVkcyBtZWxsb21sYWdlciBmb3Igw6UgcmUtcHJvc2Vzc2VyZSBDU1MnOwokbGFuZ1snc3VibWl0J10gPSAnTGFncmUnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2NhbmNlbCddID0gJ0FubnVsZWVyJzsKJGxhbmdbJ2dlbmVyYXRlX3NvdXJjZW1hcCddID0gJ0Jyb25tYXAnOwokbGFuZ1snb3B0aW9ucyddID0gJ09wdGllcyc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWydzdWJtaXQnXSA9ICdWZXJzdHVyZW4nOwokbGFuZ1snZ2EnXSA9ICdHQTEuMi43Njc5NjUwMjAuMTQwMDYxMjM2NCc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.Preprocessor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIFByZXByb2Nlc3NvciB7CgoJY29uc3QgTE9HTyA9ICcnOwoKCWNvbnN0IFNPVVJDRU1BUEZJTEUgPSAnc291cmNlbWFwLm1hcCc7CgoJcHVibGljICRpbXBvcnRfZGlyczsKCXB1YmxpYyAkbWluaWZ5OwoKCXB1YmxpYyAkZ2VuZXJhdGVfc291cmNlbWFwOwoJcHVibGljICRzb3VyY2VfbWFwX2ZpbGU9Jyc7CglwdWJsaWMgJHNvdXJjZV9tYXBfdXJsPScnOwoKCXB1YmxpYyAkdXNlX2F1dG9wcmVmaXhlciA9IDA7CglwdWJsaWMgJGF1dG9wcmVmaXhlcl9icm93c2VycyA9ICcnOwoKCgkvLyBMb2FkIGltcG9ydCBkaXJzCglwdWJsaWMgZnVuY3Rpb24gTG9hZCgpCgl7CgkJJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ1NTUHJlcHJvY2Vzc29yJyk7CgkJJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoKCQkvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCQkvLyBJbXBvcnQgZGlycywgaWYgYW55CgkJJGltcG9ydF9kaXJzID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnaW1wb3J0X2RpcnMnLCAnJyk7CgkJJGltcG9ydF9kaXJzX2FycmF5ID0gYXJyYXkoKTsKCQlpZiAoIWVtcHR5KCRpbXBvcnRfZGlycykpCgkJewoJCQkvLyBhcnJheQoJCQkkdG1wID0gZXhwbG9kZSgnLCcsICRpbXBvcnRfZGlycyk7CgoJCQlmb3JlYWNoICgkdG1wIGFzICRvbmUpCgkJCXsKCQkJCS8vIE5vdGU6IHNvbWUgcHJlcHJvY2Vzc29ycyBuZWVkIHRoZSBrZXkgdG8gYmUgdGhlIHBhdGggKExlc3MucGhwIGJ5IG95ZWpvcmdlKQoJCQkJJGRpciA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sncm9vdF9wYXRoJ10sIHRyaW0oJG9uZSkpOwoJCQkJJGltcG9ydF9kaXJzX2FycmF5W10gPSAkZGlyOwoJCQl9CgkJfQoJCSR0aGlzLT5pbXBvcnRfZGlycyA9ICRpbXBvcnRfZGlyc19hcnJheTsKCQkvLyBFbmQgaW1wb3J0IGRpcnMKCQkvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgoKCgkJLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkJLy8gTWluaWZ5ID8KCQkkdGhpcy0+bWluaWZ5ID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWluaWZ5JywgMCk7CgkJLy8gRW5kIG1pbmlmeQoJCS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKCgoKCQkvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCQkvLyBHZW5lcmF0ZSBzb3VyY2VtYXAgPwoJCSR0aGlzLT5nZW5lcmF0ZV9zb3VyY2VtYXAgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdnZW5lcmF0ZV9zb3VyY2VtYXAnLCAwKTsKCgkJaWYgKCR0aGlzLT5nZW5lcmF0ZV9zb3VyY2VtYXApCgkJewoJCQkkdGhpcy0+c291cmNlX21hcF9maWxlID0gY21zX2pvaW5fcGF0aChUTVBfQ0FDSEVfTE9DQVRJT04sIHNlbGY6OlNPVVJDRU1BUEZJTEUpOwoJCQkkdGhpcy0+c291cmNlX21hcF91cmwgPSAkY29uZmlnWydjc3NfdXJsJ10gLiBzZWxmOjpTT1VSQ0VNQVBGSUxFOwoJCX0KCQkvLyBFbmQgc291cmNlbWFwCgkJLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoJCS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJCS8vIEF1dG9wcmVmaXhlciA/CgkJJHRoaXMtPnVzZV9hdXRvcHJlZml4ZXIgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCd1c2VfYXV0b3ByZWZpeGVyJywgMCk7CgkJJHRoaXMtPmF1dG9wcmVmaXhlcl9icm93c2VycyA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2F1dG9wcmVmaXhlcl9icm93c2VycycsICcnKTsKCQkvLyBFbmQgQXV0b3ByZWZpeGVyCgkJLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgl9CgoKCgoKCS8vIE5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzZXMKCXB1YmxpYyBmdW5jdGlvbiBDb21waWxlQ1NTKCYkY3NzPScnKQoJewoJCXJldHVybiB0cnVlOwoJfQoKCgoKCgkvLyBGcm9tIDogaHR0cDovL2NvZGUuc2VlYnoubmV0L3AvbWluaWZ5LWNzcy8KCS8vIFRoYW5rcwoJcHVibGljIGZ1bmN0aW9uIE1pbmlmeUNTUygmJGNzcz0nJykKCXsKCQkkY3NzID0gcHJlZ19yZXBsYWNlKCchL1wqW14qXSpcKisoW14vXVteKl0qXCorKSovIScsICcnLCAkY3NzKTsKCgkJJGNzcyA9IHN0cl9yZXBsYWNlKGFycmF5KCJcciIsIlxuIiksICcnLCAkY3NzKTsKCQkkY3NzID0gcHJlZ19yZXBsYWNlKCdgKFteKi9dKVwvXCooW14qXXxbKl0oPyEvKSl7NSx9XCpcLyhbXiovXSlgVXMnLCAnJDEkMycsICRjc3MpOwoJCSRjc3MgPSBwcmVnX3JlcGxhY2UoJ2Bccyooe3x9fCx8Onw7KVxzKmAnLCAnJDEnLCAkY3NzKTsKCQkkY3NzID0gc3RyX3JlcGxhY2UoJzt9JywgJ30nLCAkY3NzKTsKCQkkY3NzID0gcHJlZ19yZXBsYWNlKCdgKD89fH0pW157fV0re31gJywgJycsICRjc3MpOwoJCSRjc3MgPSBwcmVnX3JlcGxhY2UoJ2BbXHNdK2AnLCAnICcsICRjc3MpOwoKCQkvLyBUZXN0CgkJLy8kY3NzID0gJy8qTWluaSovJy4kY3NzOwoKCQlpZiAoJHRoaXMtPmdlbmVyYXRlX3NvdXJjZW1hcCAmJiAkdGhpcy0+c291cmNlX21hcF91cmwpCgkJewoJCQkvLyBBbmQgYWRkIHNvdXJjZW1hcCBiZWNhdXNlIG1pbmlmeSByZW1vdmVzIGNvbW1lbnRzCgkJCSRjc3MgPSAkY3NzIC4gIi8qIyBzb3VyY2VNYXBwaW5nVVJMPSIgLiAkdGhpcy0+c291cmNlX21hcF91cmwgLiAiICovIjsKCQl9Cgl9Cgp9CgoKCgoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCdDb3JlJywgJ1N0eWxlc2hlZXRQcmVDb21waWxlJywgZmFsc2UpOwoKCgoKPz4K]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDb3JlJywgJ1N0eWxlc2hlZXRQcmVDb21waWxlJyk7CgoKCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyBWZXJzaW9uIDEuMQppZiggdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCcxLjEnKSA8IDAgKQp7CgkvLyBTd2l0Y2ggZnJvbSBwb3N0IHRvIHByZWNvbXBpbGUgaW4gb3JkZXIgdG8gbWFrZSBTbWFydHkgd29yawoJJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlcignQ29yZScsICdTbWFydHlQb3N0Q29tcGlsZScpOwoJJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsICdTbWFydHlQcmVDb21waWxlJywgZmFsc2UpOwp9CgoKCmlmKCB2ZXJzaW9uX2NvbXBhcmUoJG9sZHZlcnNpb24sJzEuNCcpIDwgMCApCnsKCS8vIFN3aXRjaCBmcm9tIHRoZSBnZW5lcmFsIFNtYXJ0eVByZUNvbXBpbGUgdG8gZGVkaWNhdGVkIFN0eWxlc2hlZXRQcmVDb21waWxlCgkkdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDb3JlJywgJ1NtYXJ0eVByZUNvbXBpbGUnKTsKCSR0aGlzLT5BZGRFdmVudEhhbmRsZXIoJ0NvcmUnLCAnU3R5bGVzaGVldFByZUNvbXBpbGUnLCBmYWxzZSk7Cn0KCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IENTU1ByZXByb2Nlc3Nvcgp2ZXJzaW9uID0gMi4xCmRlc2NyaXB0aW9uID0gCmF1dGhvciA9IEFpcmVMaWJyZSAtIE1hdGhpZXUgTXV0aHMKYXV0aG9yZW1haWwgPSBjb250YWN0QGFpcmVsaWJyZS5mcgptaW5jbXN2ZXJzaW9uID0gMS4xMi4xCjEx]]></data>
	</file>
	<file>
	  <filename>/preprocessors/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessCommand/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessCommand/class.Preprocessor_LessCommand.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIFByZXByb2Nlc3Nvcl9MZXNzQ29tbWFuZCBleHRlbmRzIFByZXByb2Nlc3NvciB7CgoJY29uc3QgRlJJRU5ETFlfTkFNRSA9ICdMZXNzIGNvbXBpbGVyIGZyb20gY29tbWFuZCBsaW5lJzsKCWNvbnN0IERFU0NSSVBUSU9OID0gJ1RoZSBvZmZpY2lhbCBjb21tYW5kIGxpbmUgTEVTUyBjb21waWxhdG9yJzsKCWNvbnN0IEFVVEhPUiA9ICdDb3JlIExFU1MgdGVhbSc7Cgljb25zdCBXRUJTSVRFID0gJ2h0dHA6Ly9sZXNzY3NzLm9yZyc7Cgljb25zdCBOT1RFID0gJ0Zhc3QsIGJ1dCB5b3UgTkVFRCB0aGUgbGVzc2MgY29tbWFuZCBsaW5lIHRvb2wgKHYuIDEuNyBvciBuZXdlcikgaW5zdGFsbGVkIG9uIHlvdXIgc2VydmVyIHRvIHVzZSBpdCAtIGNoZWNrIHRoZSBvZmZpY2lhbCB3ZWJzaXRlIGZvciBtb3JlIGluZm9ybWF0aW9ucyc7Cgljb25zdCBMT0dPID0gJ2xvZ28ucG5nJzsKCgoKCS8vIE5vdGUgOiAkY3NzIGlzIHBhc3NlZCBieSByZWZlcmVuY2UgLSBubyBuZWVkIHRvIHJldHVybgoJcHVibGljIGZ1bmN0aW9uIENvbXBpbGVDU1MoJiRjc3M9JycpCgl7CgkJLy8gUHV0IGluIGEgY2FjaGUgZmlsZQoJCSRmaWxlID0gY21zX2pvaW5fcGF0aChUTVBfQ0FDSEVfTE9DQVRJT04sICdjc3NwcmVwcm9jZXNzb3IuY3NzJyk7CgkJZmlsZV9wdXRfY29udGVudHMoJGZpbGUsICRjc3MpOwoKCQkkZmlsZV9vdXRwdXQgPSBjbXNfam9pbl9wYXRoKFRNUF9DQUNIRV9MT0NBVElPTiwgJ2Nzc3ByZXByb2Nlc3Nvcl9vdXQuY3NzJyk7CgoJCS8vIEVYRUMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCQkvLyBDb21waWxlCgkJJGNvbW1hbmQgPSAnbGVzc2MgJzsKCiAJCS8qaWYgKCR0aGlzLT5taW5pZnkpCiAJCXsKIAkJCS8vJGNvbW1hbmQgLj0gJy14IC0tY2xlYW4tY3NzICc7IC8vIG5vdGU6IGNsZWFuLWNzcyBkb2VzIG5vdCB3b3JrIHdpdGggc291cmNlIG1hcHMKIAkJCSRjb21tYW5kIC49ICcteCAnOwoJCX0qLwoKCQkvLyBTb3VyY2VtYXAKCQlpZiAoJHRoaXMtPmdlbmVyYXRlX3NvdXJjZW1hcCkKCQl7CgkJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKCgkJCSRjb21tYW5kIC49ICctLXNvdXJjZS1tYXA9JyAuICR0aGlzLT5zb3VyY2VfbWFwX2ZpbGUgLiAnIC0tc291cmNlLW1hcC11cmw9JyAuICR0aGlzLT5zb3VyY2VfbWFwX3VybCAuICcgLS1zb3VyY2UtbWFwLWJhc2VwYXRoPScgLiAkY29uZmlnWydyb290X3BhdGgnXSAuICcgLS1zb3VyY2UtbWFwLXJvb3RwYXRoPScgLiAkY29uZmlnWydyb290X3VybCddIC4gJyAnOwoJCX0KCgkJaWYgKCFlbXB0eSgkdGhpcy0+aW1wb3J0X2RpcnMpKQoJCXsKCQkJLy8gQ2hlY2sgaWYgd2UgYXJlIG9uIExpbnV4IG9yIFdpbmRvd3MgLSBuZWVkIHRlc3RpbmcKCQkJLy8gU2VlIGh0dHA6Ly9sZXNzY3NzLm9yZy91c2FnZS8jY29tbWFuZC1saW5lLXVzYWdlLWluY2x1ZGUtcGF0aHMKCQkJJHBocG9zID0gc3RydG9sb3dlcihQSFBfT1MpOwoJCQkkc2VwYXJhdG9yPSAnOic7CgkJCWlmIChzdHJwb3MoJHBocG9zLCAnd2luJykpCgkJCQkkc2VwYXJhdG9yPSAnOyc7CgoJCQkkY29tbWFuZCAuPSAnIC0taW5jbHVkZS1wYXRoPScgLiBpbXBsb2RlKCRzZXBhcmF0b3IsICR0aGlzLT5pbXBvcnRfZGlycyk7CgkJfQoKCQkvLyBBdXRvcHJlZml4ZXIKCQlpZiAoJHRoaXMtPnVzZV9hdXRvcHJlZml4ZXIpCgkJewoJCQlpZiAoIWVtcHR5KCR0aGlzLT5hdXRvcHJlZml4ZXJfYnJvd3NlcnMpKQoJCQkJJGNvbW1hbmQgLj0gJyAtLWF1dG9wcmVmaXg9IicgLiAkdGhpcy0+YXV0b3ByZWZpeGVyX2Jyb3dzZXJzIC4gJyInOwoJCQllbHNlCgkJCQkkY29tbWFuZCAuPSAnIC0tYXV0b3ByZWZpeD0iIic7CgkJfQoKCQkkY29tbWFuZCAuPSAnICcgLiAkZmlsZSAuICcgJyAuJGZpbGVfb3V0cHV0OwoKCQkvLyBBc2sgZm9yIGNvbW1hbmQgdG8gc3lzdGVtCgkJJHJlc3VsdCA9IGV4ZWMoJGNvbW1hbmQpOwoKCQlpZiAoIWVtcHR5KCRyZXN1bHQpKQoJCQlkZWJ1Z190b19sb2coJ0NTU1ByZXByb2Nlc3NvcjogJyAuICRyZXN1bHQpOwoKCQkkY3NzID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVfb3V0cHV0KTsKCgkJLy8gUmVtb3ZlIGNhY2hlIGZpbGUKCQkvL3VubGluaygkZmlsZSk7CgoJCXJldHVybiB0cnVlOwoJfQoKCn0KCgoKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessCommand/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessCommand/logo.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/class.Preprocessor_LessPHPOyejorge.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIFByZXByb2Nlc3Nvcl9MZXNzUEhQT3llam9yZ2UgZXh0ZW5kcyBQcmVwcm9jZXNzb3IgewoKCWNvbnN0IEZSSUVORExZX05BTUUgPSAnTGVzc1BIUCAoT3llam9yZ2UpJzsKCWNvbnN0IERFU0NSSVBUSU9OID0gJ0EgUEhQIC8gTEVTU0NTUyBwcmUtcHJvY2Vzc29yJzsKCWNvbnN0IEFVVEhPUiA9ICdveWVqb3JnZSAtIEpvc2ggU2NobWlkdCc7Cgljb25zdCBXRUJTSVRFID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9veWVqb3JnZS9sZXNzLnBocCc7Cgljb25zdCBOT1RFID0gJyc7Cgljb25zdCBMT0dPID0gJ2xvZ28ucG5nJzsKCQoJCgkvLyBGb3IgTGVzc1BIUE95ZWpvcmdlCglwdWJsaWMgJHBhcnNlcjsKCQoKCXB1YmxpYyBmdW5jdGlvbiBMb2FkKCkKCXsKCQlwYXJlbnQ6OkxvYWQoKTsKCQkKCQlyZXF1aXJlX29uY2UoY21zX2pvaW5fcGF0aChfX0RJUl9fLCAnTGVzcycsICdBdXRvbG9hZGVyLnBocCcpKTsKCQlMZXNzX0F1dG9sb2FkZXI6OnJlZ2lzdGVyKCk7CgkJCgkJLy8gT3B0aW9ucwoJCSRvcHRpb25zWydjb21wcmVzcyddID0gJHRoaXMtPm1pbmlmeTsKCQkKCQlpZiAoJHRoaXMtPmdlbmVyYXRlX3NvdXJjZW1hcCkKCQl7CgkJCSRvcHRpb25zWydzb3VyY2VNYXAnXSA9IHRydWU7CgkJCSRvcHRpb25zWydzb3VyY2VNYXBXcml0ZVRvJ10gPSAkdGhpcy0+c291cmNlX21hcF9maWxlOwoJCQkkb3B0aW9uc1snc291cmNlTWFwVVJMJ10gPSAkdGhpcy0+c291cmNlX21hcF91cmw7CgkJCQoJCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgkJCSRvcHRpb25zWydzb3VyY2VNYXBCYXNlcGF0aCddID0gJGNvbmZpZ1sncm9vdF9wYXRoJ107CgkJfQoJCQoJCSR0aGlzLT5wYXJzZXIgPSBuZXcgTGVzc19QYXJzZXIoJG9wdGlvbnMpOwoJCQoJCS8vIEltcG9ydCBkaXJzCgkJJHRoaXMtPnBhcnNlci0+U2V0SW1wb3J0RGlycygkdGhpcy0+aW1wb3J0X2RpcnMpOwoJfQoJCgkvLyBOb3RlIDogJGNzcyBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIC0gbm8gbmVlZCB0byByZXR1cm4KCXB1YmxpYyBmdW5jdGlvbiBDb21waWxlQ1NTKCYkY3NzPScnKQoJewoJCXRyeSB7CgkJCSR0aGlzLT5wYXJzZXItPnBhcnNlKCRjc3MpOwoJCQkkY3NzID0gJHRoaXMtPnBhcnNlci0+Z2V0Q3NzKCk7CgkJfQoJCWNhdGNoIChleGNlcHRpb24gJGUpIHsKCQkJJGVycm9yX21lc3NhZ2UgPSAkZS0+Z2V0TWVzc2FnZSgpOwoJCQlkZWJ1Z190b19sb2coJGVycm9yX21lc3NhZ2UpOwoJCX0KCQkKCQlyZXR1cm4gdHJ1ZTsKCX0KCn0KCgoKCj8+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Autoloader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBdXRvbG9hZGVyCiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgYXV0b2xvYWQKICovCmNsYXNzIExlc3NfQXV0b2xvYWRlciB7CgoJLyoqCgkgKiBSZWdpc3RlcmVkIGZsYWcKCSAqCgkgKiBAdmFyIGJvb2xlYW4KCSAqLwoJcHJvdGVjdGVkIHN0YXRpYyAkcmVnaXN0ZXJlZCA9IGZhbHNlOwoKCS8qKgoJICogTGlicmFyeSBkaXJlY3RvcnkKCSAqCgkgKiBAdmFyIHN0cmluZwoJICovCglwcm90ZWN0ZWQgc3RhdGljICRsaWJEaXI7CgoJLyoqCgkgKiBSZWdpc3RlciB0aGUgYXV0b2xvYWRlciBpbiB0aGUgc3BsIGF1dG9sb2FkZXIKCSAqCgkgKiBAcmV0dXJuIHZvaWQKCSAqIEB0aHJvd3MgRXhjZXB0aW9uIElmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiByZWdpc3RyYXRpb24KCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlcigpewoJCWlmKCBzZWxmOjokcmVnaXN0ZXJlZCApewoJCQlyZXR1cm47CgkJfQoKCQlzZWxmOjokbGliRGlyID0gZGlybmFtZShfX0ZJTEVfXyk7CgoJCWlmKGZhbHNlID09PSBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoYXJyYXkoJ0xlc3NfQXV0b2xvYWRlcicsICdsb2FkQ2xhc3MnKSkpewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVnaXN0ZXIgTGVzc19BdXRvbG9hZGVyOjpsb2FkQ2xhc3MgYXMgYW4gYXV0b2xvYWRpbmcgbWV0aG9kLicpOwoJCX0KCgkJc2VsZjo6JHJlZ2lzdGVyZWQgPSB0cnVlOwoJfQoKCS8qKgoJICogVW5yZWdpc3RlcnMgdGhlIGF1dG9sb2FkZXIKCSAqCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bnJlZ2lzdGVyKCl7CgkJc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIoYXJyYXkoJ0xlc3NfQXV0b2xvYWRlcicsICdsb2FkQ2xhc3MnKSk7CgkJc2VsZjo6JHJlZ2lzdGVyZWQgPSBmYWxzZTsKCX0KCgkvKioKCSAqIExvYWRzIHRoZSBjbGFzcwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzTmFtZSBUaGUgY2xhc3MgdG8gbG9hZAoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDbGFzcygkY2xhc3NOYW1lKXsKCgoJCS8vIGhhbmRsZSBvbmx5IHBhY2thZ2UgY2xhc3NlcwoJCWlmKHN0cnBvcygkY2xhc3NOYW1lLCAnTGVzc18nKSAhPT0gMCl7CgkJCXJldHVybjsKCQl9CgoJCSRjbGFzc05hbWUgPSBzdWJzdHIoJGNsYXNzTmFtZSw1KTsKCQkkZmlsZU5hbWUgPSBzZWxmOjokbGliRGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHN0cl9yZXBsYWNlKCdfJywgRElSRUNUT1JZX1NFUEFSQVRPUiwgJGNsYXNzTmFtZSkgLiAnLnBocCc7CgoJCWlmKGZpbGVfZXhpc3RzKCRmaWxlTmFtZSkpewoJCQlyZXF1aXJlICRmaWxlTmFtZTsKCQkJcmV0dXJuIHRydWU7CgkJfWVsc2V7CgkJCXRocm93IG5ldyBFeGNlcHRpb24oJ2ZpbGUgbm90IGxvYWRhYmxlICcuJGZpbGVOYW1lKTsKCQl9Cgl9Cgp9]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Cache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZSggZGlybmFtZShfX0ZJTEVfXykuJy9WZXJzaW9uLnBocCcpOwoKLyoqCiAqIFV0aWxpdHkgZm9yIGhhbmRsaW5nIHRoZSBnZW5lcmF0aW9uIGFuZCBjYWNoaW5nIG9mIGNzcyBmaWxlcwogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIGNhY2hlCiAqCiAqLwpjbGFzcyBMZXNzX0NhY2hlewoKCS8vIGRpcmVjdG9yeSBsZXNzLnBocCBjYW4gdXNlIGZvciBzdG9yaW5nIGRhdGEKCXB1YmxpYyBzdGF0aWMgJGNhY2hlX2Rpcgk9IGZhbHNlOwoKCS8vIHByZWZpeCBmb3IgdGhlIHN0b3JpbmcgZGF0YQoJcHVibGljIHN0YXRpYyAkcHJlZml4CQk9ICdsZXNzcGhwXyc7CgoJLy8gcHJlZml4IGZvciB0aGUgc3RvcmluZyB2YXJzCglwdWJsaWMgc3RhdGljICRwcmVmaXhfdmFycwk9ICdsZXNzcGhwdmFyc18nOwoKCS8vIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggZGF0YSBjcmVhdGVkIGJ5IGxlc3MucGhwIHdpbGwgYmUgc2VlbiBhcyAnZ2FyYmFnZScgYW5kIHBvdGVudGlhbGx5IGNsZWFuZWQgdXAKCXB1YmxpYyBzdGF0aWMgJGdjX2xpZmV0aW1lCT0gNjA0ODAwOwoKCgkvKioKCSAqIFNhdmUgYW5kIHJldXNlIHRoZSByZXN1bHRzIG9mIGNvbXBpbGVkIGxlc3MgZmlsZXMuCgkgKiBUaGUgZmlyc3QgY2FsbCB0byBHZXQoKSB3aWxsIGdlbmVyYXRlIGNzcyBhbmQgc2F2ZSBpdC4KCSAqIFN1YnNlcXVlbnQgY2FsbHMgdG8gR2V0KCkgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMgd2lsbCByZXR1cm4gdGhlIHNhbWUgY3NzIGZpbGVuYW1lCgkgKgoJICogQHBhcmFtIGFycmF5ICRsZXNzX2ZpbGVzIEFycmF5IG9mIC5sZXNzIGZpbGVzIHRvIGNvbXBpbGUKCSAqIEBwYXJhbSBhcnJheSAkcGFyc2VyX29wdGlvbnMgQXJyYXkgb2YgY29tcGlsZXIgb3B0aW9ucwoJICogQHBhcmFtIGFycmF5ICRtb2RpZnlfdmFycyBBcnJheSBvZiB2YXJpYWJsZXMKCSAqIEByZXR1cm4gc3RyaW5nIE5hbWUgb2YgdGhlIGNzcyBmaWxlCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gR2V0KCAkbGVzc19maWxlcywgJHBhcnNlcl9vcHRpb25zID0gYXJyYXkoKSwgJG1vZGlmeV92YXJzID0gYXJyYXkoKSApewoKCgkJLy9jaGVjayAkY2FjaGVfZGlyCgkJaWYoIGlzc2V0KCRwYXJzZXJfb3B0aW9uc1snY2FjaGVfZGlyJ10pICl7CgkJCUxlc3NfQ2FjaGU6OiRjYWNoZV9kaXIgPSAkcGFyc2VyX29wdGlvbnNbJ2NhY2hlX2RpciddOwoJCX0KCgkJaWYoIGVtcHR5KExlc3NfQ2FjaGU6OiRjYWNoZV9kaXIpICl7CgkJCXRocm93IG5ldyBFeGNlcHRpb24oJ2NhY2hlX2RpciBub3Qgc2V0Jyk7CgkJfQoKCQlpZiggaXNzZXQoJHBhcnNlcl9vcHRpb25zWydwcmVmaXgnXSkgKXsKCQkJTGVzc19DYWNoZTo6JHByZWZpeCA9ICRwYXJzZXJfb3B0aW9uc1sncHJlZml4J107CgkJfQoKCQlpZiggZW1wdHkoTGVzc19DYWNoZTo6JHByZWZpeCkgKXsKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigncHJlZml4IG5vdCBzZXQnKTsKCQl9CgoJCWlmKCBpc3NldCgkcGFyc2VyX29wdGlvbnNbJ3ByZWZpeF92YXJzJ10pICl7CgkJCUxlc3NfQ2FjaGU6OiRwcmVmaXhfdmFycyA9ICRwYXJzZXJfb3B0aW9uc1sncHJlZml4X3ZhcnMnXTsKCQl9CgoJCWlmKCBlbXB0eShMZXNzX0NhY2hlOjokcHJlZml4X3ZhcnMpICl7CgkJCXRocm93IG5ldyBFeGNlcHRpb24oJ3ByZWZpeF92YXJzIG5vdCBzZXQnKTsKCQl9CgoJCXNlbGY6OkNoZWNrQ2FjaGVEaXIoKTsKCQkkbGVzc19maWxlcyA9IChhcnJheSkkbGVzc19maWxlczsKCgoJCS8vY3JlYXRlIGEgZmlsZSBmb3IgdmFyaWFibGVzCgkJaWYoICFlbXB0eSgkbW9kaWZ5X3ZhcnMpICl7CgkJCSRsZXNzdmFycyA9IExlc3NfUGFyc2VyOjpzZXJpYWxpemVWYXJzKCRtb2RpZnlfdmFycyk7CgkJCSR2YXJzX2ZpbGUgPSBMZXNzX0NhY2hlOjokY2FjaGVfZGlyIC4gTGVzc19DYWNoZTo6JHByZWZpeF92YXJzIC4gc2hhMSgkbGVzc3ZhcnMpIC4gJy5sZXNzJzsKCgkJCWlmKCAhZmlsZV9leGlzdHMoJHZhcnNfZmlsZSkgKXsKCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCR2YXJzX2ZpbGUsICRsZXNzdmFycyk7CgkJCX0KCgkJCSRsZXNzX2ZpbGVzICs9IGFycmF5KCR2YXJzX2ZpbGUgPT4gJy8nKTsKCQl9CgoKCQkvLyBnZW5lcmF0ZSBuYW1lIGZvciBjb21waWxlZCBjc3MgZmlsZQoJCSRoYXNoID0gbWQ1KGpzb25fZW5jb2RlKCRsZXNzX2ZpbGVzKSk7CiAJCSRsaXN0X2ZpbGUgPSBMZXNzX0NhY2hlOjokY2FjaGVfZGlyIC4gTGVzc19DYWNoZTo6JHByZWZpeCAuICRoYXNoIC4gJy5saXN0JzsKCiAJCS8vIGNoZWNrIGNhY2hlZCBjb250ZW50CiAJCWlmKCAhaXNzZXQoJHBhcnNlcl9vcHRpb25zWyd1c2VfY2FjaGUnXSkgfHwgJHBhcnNlcl9vcHRpb25zWyd1c2VfY2FjaGUnXSA9PT0gdHJ1ZSApewoJCQlpZiggZmlsZV9leGlzdHMoJGxpc3RfZmlsZSkgKXsKCgkJCQlzZWxmOjpMaXN0RmlsZXMoJGxpc3RfZmlsZSwgJGxpc3QsICRjYWNoZWRfbmFtZSk7CgkJCQkkY29tcGlsZWRfbmFtZSA9IHNlbGY6OkNvbXBpbGVkTmFtZSgkbGlzdCwgJGhhc2gpOwoKCQkJCS8vIGlmICRjYWNoZWRfbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgJGNvbXBpbGVkIG5hbWUsIGRvbid0IHJlZ2VuZXJhdGUKCQkJCWlmKCAhJGNhY2hlZF9uYW1lIHx8ICRjYWNoZWRfbmFtZSA9PT0gJGNvbXBpbGVkX25hbWUgKXsKCgkJCQkJJG91dHB1dF9maWxlID0gc2VsZjo6T3V0cHV0RmlsZSgkY29tcGlsZWRfbmFtZSwgJHBhcnNlcl9vcHRpb25zICk7CgoJCQkJCWlmKCAkb3V0cHV0X2ZpbGUgJiYgZmlsZV9leGlzdHMoJG91dHB1dF9maWxlKSApewoJCQkJCQlAdG91Y2goJGxpc3RfZmlsZSk7CgkJCQkJCXJldHVybiBiYXNlbmFtZSgkb3V0cHV0X2ZpbGUpOyAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdlIGp1c3QgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmaWxlCgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQkkY29tcGlsZWQgPSBzZWxmOjpDYWNoZSggJGxlc3NfZmlsZXMsICRwYXJzZXJfb3B0aW9ucyApOwoJCWlmKCAhJGNvbXBpbGVkICl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCSRjb21waWxlZF9uYW1lID0gc2VsZjo6Q29tcGlsZWROYW1lKCAkbGVzc19maWxlcywgJGhhc2ggKTsKCQkkb3V0cHV0X2ZpbGUgPSBzZWxmOjpPdXRwdXRGaWxlKCRjb21waWxlZF9uYW1lLCAkcGFyc2VyX29wdGlvbnMgKTsKCgoJCS8vc2F2ZSB0aGUgZmlsZSBsaXN0CgkJJGxpc3QgPSAkbGVzc19maWxlczsKCQkkbGlzdFtdID0gJGNvbXBpbGVkX25hbWU7CgkJJGNhY2hlID0gaW1wbG9kZSgiXG4iLCRsaXN0KTsKCQlmaWxlX3B1dF9jb250ZW50cyggJGxpc3RfZmlsZSwgJGNhY2hlICk7CgoKCQkvL3NhdmUgdGhlIGNzcwoJCWZpbGVfcHV0X2NvbnRlbnRzKCAkb3V0cHV0X2ZpbGUsICRjb21waWxlZCApOwoKCgkJLy9jbGVhbiB1cAoJCXNlbGY6OkNsZWFuQ2FjaGUoKTsKCgkJcmV0dXJuIGJhc2VuYW1lKCRvdXRwdXRfZmlsZSk7Cgl9CgoJLyoqCgkgKiBGb3JjZSB0aGUgY29tcGlsZXIgdG8gcmVnZW5lcmF0ZSB0aGUgY2FjaGVkIGNzcyBmaWxlCgkgKgoJICogQHBhcmFtIGFycmF5ICRsZXNzX2ZpbGVzIEFycmF5IG9mIC5sZXNzIGZpbGVzIHRvIGNvbXBpbGUKCSAqIEBwYXJhbSBhcnJheSAkcGFyc2VyX29wdGlvbnMgQXJyYXkgb2YgY29tcGlsZXIgb3B0aW9ucwoJICogQHBhcmFtIGFycmF5ICRtb2RpZnlfdmFycyBBcnJheSBvZiB2YXJpYWJsZXMKCSAqIEByZXR1cm4gc3RyaW5nIE5hbWUgb2YgdGhlIGNzcyBmaWxlCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gUmVnZW4oICRsZXNzX2ZpbGVzLCAkcGFyc2VyX29wdGlvbnMgPSBhcnJheSgpLCAkbW9kaWZ5X3ZhcnMgPSBhcnJheSgpICl7CgkJJHBhcnNlcl9vcHRpb25zWyd1c2VfY2FjaGUnXSA9IGZhbHNlOwoJCXJldHVybiBzZWxmOjpHZXQoICRsZXNzX2ZpbGVzLCAkcGFyc2VyX29wdGlvbnMsICRtb2RpZnlfdmFycyApOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQ2FjaGUoICYkbGVzc19maWxlcywgJHBhcnNlcl9vcHRpb25zID0gYXJyYXkoKSApewoKCgkJLy8gZ2V0IGxlc3MucGhwIGlmIGl0IGV4aXN0cwoJCSRmaWxlID0gZGlybmFtZShfX0ZJTEVfXykgLiAnL0xlc3MucGhwJzsKCQlpZiggZmlsZV9leGlzdHMoJGZpbGUpICYmICFjbGFzc19leGlzdHMoJ0xlc3NfUGFyc2VyJykgKXsKCQkJcmVxdWlyZV9vbmNlKCRmaWxlKTsKCQl9CgoJCSRwYXJzZXJfb3B0aW9uc1snY2FjaGVfZGlyJ10gPSBMZXNzX0NhY2hlOjokY2FjaGVfZGlyOwoJCSRwYXJzZXIgPSBuZXcgTGVzc19QYXJzZXIoJHBhcnNlcl9vcHRpb25zKTsKCgoJCS8vIGNvbWJpbmUgZmlsZXMKCQlmb3JlYWNoKCRsZXNzX2ZpbGVzIGFzICRmaWxlX3BhdGggPT4gJHVyaV9vcl9sZXNzICl7CgoJCQkvL3RyZWF0IGFzIGxlc3MgbWFya3VwIGlmIHRoZXJlIGFyZSBuZXdsaW5lIGNoYXJhY3RlcnMKCQkJaWYoIHN0cnBvcygkdXJpX29yX2xlc3MsIlxuIikgIT09IGZhbHNlICl7CgkJCQkkcGFyc2VyLT5QYXJzZSggJHVyaV9vcl9sZXNzICk7CgkJCQljb250aW51ZTsKCQkJfQoKCQkJJHBhcnNlci0+UGFyc2VGaWxlKCAkZmlsZV9wYXRoLCAkdXJpX29yX2xlc3MgKTsKCQl9CgoJCSRjb21waWxlZCA9ICRwYXJzZXItPmdldENzcygpOwoKCgkJJGxlc3NfZmlsZXMgPSAkcGFyc2VyLT5hbGxQYXJzZWRGaWxlcygpOwoKCQlyZXR1cm4gJGNvbXBpbGVkOwoJfQoKCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBPdXRwdXRGaWxlKCAkY29tcGlsZWRfbmFtZSwgJHBhcnNlcl9vcHRpb25zICl7CgoJCS8vY3VzdG9tIG91dHB1dCBmaWxlCgkJaWYoICFlbXB0eSgkcGFyc2VyX29wdGlvbnNbJ291dHB1dCddKSApewoKCQkJLy9yZWxhdGl2ZSB0byBjYWNoZSBkaXJlY3Rvcnk/CgkJCWlmKCBwcmVnX21hdGNoKCcjW1xcXFwvXSMnLCRwYXJzZXJfb3B0aW9uc1snb3V0cHV0J10pICl7CgkJCQlyZXR1cm4gJHBhcnNlcl9vcHRpb25zWydvdXRwdXQnXTsKCQkJfQoKCQkJcmV0dXJuIExlc3NfQ2FjaGU6OiRjYWNoZV9kaXIuJHBhcnNlcl9vcHRpb25zWydvdXRwdXQnXTsKCQl9CgoJCXJldHVybiBMZXNzX0NhY2hlOjokY2FjaGVfZGlyLiRjb21waWxlZF9uYW1lOwoJfQoKCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBDb21waWxlZE5hbWUoICRmaWxlcywgJGV4dHJhaGFzaCApewoKCQkvL3NhdmUgdGhlIGZpbGUgbGlzdAoJCSR0ZW1wID0gYXJyYXkoTGVzc19WZXJzaW9uOjpjYWNoZV92ZXJzaW9uKTsKCQlmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZSl7CgkJCSR0ZW1wW10gPSBmaWxlbXRpbWUoJGZpbGUpLiJcdCIuZmlsZXNpemUoJGZpbGUpLiJcdCIuJGZpbGU7CgkJfQoKCQlyZXR1cm4gTGVzc19DYWNoZTo6JHByZWZpeC5zaGExKGpzb25fZW5jb2RlKCR0ZW1wKS4kZXh0cmFoYXNoKS4nLmNzcyc7Cgl9CgoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gU2V0Q2FjaGVEaXIoICRkaXIgKXsKCQlMZXNzX0NhY2hlOjokY2FjaGVfZGlyID0gJGRpcjsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENoZWNrQ2FjaGVEaXIoKXsKCgkJTGVzc19DYWNoZTo6JGNhY2hlX2RpciA9IHN0cl9yZXBsYWNlKCdcXCcsJy8nLExlc3NfQ2FjaGU6OiRjYWNoZV9kaXIpOwoJCUxlc3NfQ2FjaGU6OiRjYWNoZV9kaXIgPSBydHJpbShMZXNzX0NhY2hlOjokY2FjaGVfZGlyLCcvJykuJy8nOwoKCQlpZiggIWZpbGVfZXhpc3RzKExlc3NfQ2FjaGU6OiRjYWNoZV9kaXIpICl7CgkJCWlmKCAhbWtkaXIoTGVzc19DYWNoZTo6JGNhY2hlX2RpcikgKXsKCQkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9QYXJzZXIoJ0xlc3MucGhwIGNhY2hlIGRpcmVjdG9yeSBjb3VsZG5cJ3QgYmUgY3JlYXRlZDogJy5MZXNzX0NhY2hlOjokY2FjaGVfZGlyKTsKCQkJfQoKCQl9ZWxzZWlmKCAhaXNfZGlyKExlc3NfQ2FjaGU6OiRjYWNoZV9kaXIpICl7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9QYXJzZXIoJ0xlc3MucGhwIGNhY2hlIGRpcmVjdG9yeSBkb2VzblwndCBleGlzdDogJy5MZXNzX0NhY2hlOjokY2FjaGVfZGlyKTsKCgkJfWVsc2VpZiggIWlzX3dyaXRhYmxlKExlc3NfQ2FjaGU6OiRjYWNoZV9kaXIpICl7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9QYXJzZXIoJ0xlc3MucGhwIGNhY2hlIGRpcmVjdG9yeSBpc25cJ3Qgd3JpdGFibGU6ICcuTGVzc19DYWNoZTo6JGNhY2hlX2Rpcik7CgoJCX0KCgl9CgoKCS8qKgoJICogRGVsZXRlIHVudXNlZCBsZXNzLnBocCBmaWxlcwoJICoKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBDbGVhbkNhY2hlKCl7CgkJc3RhdGljICRjbGVhbiA9IGZhbHNlOwoKCQlpZiggJGNsZWFuICl7CgkJCXJldHVybjsKCQl9CgoJCSRmaWxlcyA9IHNjYW5kaXIoTGVzc19DYWNoZTo6JGNhY2hlX2Rpcik7CgkJaWYoICRmaWxlcyApewoJCQkkY2hlY2tfdGltZSA9IHRpbWUoKSAtIHNlbGY6OiRnY19saWZldGltZTsKCQkJZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpewoKCQkJCS8vIGRvbid0IGRlbGV0ZSBpZiB0aGUgZmlsZSB3YXNuJ3QgY3JlYXRlZCB3aXRoIGxlc3MucGhwCgkJCQlpZiggc3RycG9zKCRmaWxlLExlc3NfQ2FjaGU6OiRwcmVmaXgpICE9PSAwICl7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJJGZ1bGxfcGF0aCA9IExlc3NfQ2FjaGU6OiRjYWNoZV9kaXIgLiAkZmlsZTsKCgkJCQkvLyBtYWtlIHN1cmUgdGhlIGZpbGUgc3RpbGwgZXhpc3RzCgkJCQkvLyBjc3MgZmlsZXMgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGRlbGV0ZWQKCQkJCWlmKCAhZmlsZV9leGlzdHMoJGZ1bGxfcGF0aCkgKXsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCSRtdGltZSA9IGZpbGVtdGltZSgkZnVsbF9wYXRoKTsKCgkJCQkvLyBkb24ndCBkZWxldGUgaWYgaXQncyBhIHJlbGF0aXZlbHkgbmV3IGZpbGUKCQkJCWlmKCAkbXRpbWUgPiAkY2hlY2tfdGltZSApewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoKCQkJCSRwYXJ0cyA9IGV4cGxvZGUoJy4nLCRmaWxlKTsKCQkJCSR0eXBlID0gYXJyYXlfcG9wKCRwYXJ0cyk7CgoKCQkJCS8vIGRlbGV0ZSBjc3MgZmlsZXMgYmFzZWQgb24gdGhlIGxpc3QgZmlsZXMKCQkJCWlmKCAkdHlwZSA9PT0gJ2NzcycgKXsKCQkJCQljb250aW51ZTsKCQkJCX0KCgoJCQkJLy8gZGVsZXRlIHRoZSBsaXN0IGZpbGUgYW5kIGFzc29jaWF0ZWQgY3NzIGZpbGUKCQkJCWlmKCAkdHlwZSA9PT0gJ2xpc3QnICl7CgkJCQkJc2VsZjo6TGlzdEZpbGVzKCRmdWxsX3BhdGgsICRsaXN0LCAkY3NzX2ZpbGVfbmFtZSk7CgkJCQkJaWYoICRjc3NfZmlsZV9uYW1lICl7CgkJCQkJCSRjc3NfZmlsZSA9IExlc3NfQ2FjaGU6OiRjYWNoZV9kaXIgLiAkY3NzX2ZpbGVfbmFtZTsKCQkJCQkJaWYoIGZpbGVfZXhpc3RzKCRjc3NfZmlsZSkgKXsKCQkJCQkJCXVubGluaygkY3NzX2ZpbGUpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCXVubGluaygkZnVsbF9wYXRoKTsKCQkJfQoJCX0KCgkJJGNsZWFuID0gdHJ1ZTsKCX0KCgoJLyoqCgkgKiBHZXQgdGhlIGxpc3Qgb2YgbGVzcyBmaWxlcyBhbmQgZ2VuZXJhdGVkIGNzcyBmaWxlIGZyb20gYSBsaXN0IGZpbGUKCSAqCgkgKi8KCXN0YXRpYyBmdW5jdGlvbiBMaXN0RmlsZXMoJGxpc3RfZmlsZSwgJiRsaXN0LCAmJGNzc19maWxlX25hbWUgKXsKCgkJJGxpc3QgPSBleHBsb2RlKCJcbiIsZmlsZV9nZXRfY29udGVudHMoJGxpc3RfZmlsZSkpOwoKCQkvL3BvcCB0aGUgY2FjaGVkIG5hbWUgdGhhdCBzaG91bGQgbWF0Y2ggJGNvbXBpbGVkX25hbWUKCQkkY3NzX2ZpbGVfbmFtZSA9IGFycmF5X3BvcCgkbGlzdCk7CgoJCWlmKCAhcHJlZ19tYXRjaCgnL14nIC4gTGVzc19DYWNoZTo6JHByZWZpeCAuICdbYS1mMC05XStcLmNzcyQvJywkY3NzX2ZpbGVfbmFtZSkgKXsKCQkJJGxpc3RbXSA9ICRjc3NfZmlsZV9uYW1lOwoJCQkkY3NzX2ZpbGVfbmFtZSA9IGZhbHNlOwoJCX0KCgl9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Colors.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBVdGlsaXR5IGZvciBjc3MgY29sb3JzCiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgY29sb3IKICovCmNsYXNzIExlc3NfQ29sb3JzIHsKCglwdWJsaWMgc3RhdGljICRjb2xvcnMgPSBhcnJheSgKCQkJJ2FsaWNlYmx1ZSc9PicjZjBmOGZmJywKCQkJJ2FudGlxdWV3aGl0ZSc9PicjZmFlYmQ3JywKCQkJJ2FxdWEnPT4nIzAwZmZmZicsCgkJCSdhcXVhbWFyaW5lJz0+JyM3ZmZmZDQnLAoJCQknYXp1cmUnPT4nI2YwZmZmZicsCgkJCSdiZWlnZSc9PicjZjVmNWRjJywKCQkJJ2Jpc3F1ZSc9PicjZmZlNGM0JywKCQkJJ2JsYWNrJz0+JyMwMDAwMDAnLAoJCQknYmxhbmNoZWRhbG1vbmQnPT4nI2ZmZWJjZCcsCgkJCSdibHVlJz0+JyMwMDAwZmYnLAoJCQknYmx1ZXZpb2xldCc9PicjOGEyYmUyJywKCQkJJ2Jyb3duJz0+JyNhNTJhMmEnLAoJCQknYnVybHl3b29kJz0+JyNkZWI4ODcnLAoJCQknY2FkZXRibHVlJz0+JyM1ZjllYTAnLAoJCQknY2hhcnRyZXVzZSc9PicjN2ZmZjAwJywKCQkJJ2Nob2NvbGF0ZSc9PicjZDI2OTFlJywKCQkJJ2NvcmFsJz0+JyNmZjdmNTAnLAoJCQknY29ybmZsb3dlcmJsdWUnPT4nIzY0OTVlZCcsCgkJCSdjb3Juc2lsayc9PicjZmZmOGRjJywKCQkJJ2NyaW1zb24nPT4nI2RjMTQzYycsCgkJCSdjeWFuJz0+JyMwMGZmZmYnLAoJCQknZGFya2JsdWUnPT4nIzAwMDA4YicsCgkJCSdkYXJrY3lhbic9PicjMDA4YjhiJywKCQkJJ2Rhcmtnb2xkZW5yb2QnPT4nI2I4ODYwYicsCgkJCSdkYXJrZ3JheSc9PicjYTlhOWE5JywKCQkJJ2RhcmtncmV5Jz0+JyNhOWE5YTknLAoJCQknZGFya2dyZWVuJz0+JyMwMDY0MDAnLAoJCQknZGFya2toYWtpJz0+JyNiZGI3NmInLAoJCQknZGFya21hZ2VudGEnPT4nIzhiMDA4YicsCgkJCSdkYXJrb2xpdmVncmVlbic9PicjNTU2YjJmJywKCQkJJ2RhcmtvcmFuZ2UnPT4nI2ZmOGMwMCcsCgkJCSdkYXJrb3JjaGlkJz0+JyM5OTMyY2MnLAoJCQknZGFya3JlZCc9PicjOGIwMDAwJywKCQkJJ2RhcmtzYWxtb24nPT4nI2U5OTY3YScsCgkJCSdkYXJrc2VhZ3JlZW4nPT4nIzhmYmM4ZicsCgkJCSdkYXJrc2xhdGVibHVlJz0+JyM0ODNkOGInLAoJCQknZGFya3NsYXRlZ3JheSc9PicjMmY0ZjRmJywKCQkJJ2RhcmtzbGF0ZWdyZXknPT4nIzJmNGY0ZicsCgkJCSdkYXJrdHVycXVvaXNlJz0+JyMwMGNlZDEnLAoJCQknZGFya3Zpb2xldCc9PicjOTQwMGQzJywKCQkJJ2RlZXBwaW5rJz0+JyNmZjE0OTMnLAoJCQknZGVlcHNreWJsdWUnPT4nIzAwYmZmZicsCgkJCSdkaW1ncmF5Jz0+JyM2OTY5NjknLAoJCQknZGltZ3JleSc9PicjNjk2OTY5JywKCQkJJ2RvZGdlcmJsdWUnPT4nIzFlOTBmZicsCgkJCSdmaXJlYnJpY2snPT4nI2IyMjIyMicsCgkJCSdmbG9yYWx3aGl0ZSc9PicjZmZmYWYwJywKCQkJJ2ZvcmVzdGdyZWVuJz0+JyMyMjhiMjInLAoJCQknZnVjaHNpYSc9PicjZmYwMGZmJywKCQkJJ2dhaW5zYm9ybyc9PicjZGNkY2RjJywKCQkJJ2dob3N0d2hpdGUnPT4nI2Y4ZjhmZicsCgkJCSdnb2xkJz0+JyNmZmQ3MDAnLAoJCQknZ29sZGVucm9kJz0+JyNkYWE1MjAnLAoJCQknZ3JheSc9PicjODA4MDgwJywKCQkJJ2dyZXknPT4nIzgwODA4MCcsCgkJCSdncmVlbic9PicjMDA4MDAwJywKCQkJJ2dyZWVueWVsbG93Jz0+JyNhZGZmMmYnLAoJCQknaG9uZXlkZXcnPT4nI2YwZmZmMCcsCgkJCSdob3RwaW5rJz0+JyNmZjY5YjQnLAoJCQknaW5kaWFucmVkJz0+JyNjZDVjNWMnLAoJCQknaW5kaWdvJz0+JyM0YjAwODInLAoJCQknaXZvcnknPT4nI2ZmZmZmMCcsCgkJCSdraGFraSc9PicjZjBlNjhjJywKCQkJJ2xhdmVuZGVyJz0+JyNlNmU2ZmEnLAoJCQknbGF2ZW5kZXJibHVzaCc9PicjZmZmMGY1JywKCQkJJ2xhd25ncmVlbic9PicjN2NmYzAwJywKCQkJJ2xlbW9uY2hpZmZvbic9PicjZmZmYWNkJywKCQkJJ2xpZ2h0Ymx1ZSc9PicjYWRkOGU2JywKCQkJJ2xpZ2h0Y29yYWwnPT4nI2YwODA4MCcsCgkJCSdsaWdodGN5YW4nPT4nI2UwZmZmZicsCgkJCSdsaWdodGdvbGRlbnJvZHllbGxvdyc9PicjZmFmYWQyJywKCQkJJ2xpZ2h0Z3JheSc9PicjZDNkM2QzJywKCQkJJ2xpZ2h0Z3JleSc9PicjZDNkM2QzJywKCQkJJ2xpZ2h0Z3JlZW4nPT4nIzkwZWU5MCcsCgkJCSdsaWdodHBpbmsnPT4nI2ZmYjZjMScsCgkJCSdsaWdodHNhbG1vbic9PicjZmZhMDdhJywKCQkJJ2xpZ2h0c2VhZ3JlZW4nPT4nIzIwYjJhYScsCgkJCSdsaWdodHNreWJsdWUnPT4nIzg3Y2VmYScsCgkJCSdsaWdodHNsYXRlZ3JheSc9PicjNzc4ODk5JywKCQkJJ2xpZ2h0c2xhdGVncmV5Jz0+JyM3Nzg4OTknLAoJCQknbGlnaHRzdGVlbGJsdWUnPT4nI2IwYzRkZScsCgkJCSdsaWdodHllbGxvdyc9PicjZmZmZmUwJywKCQkJJ2xpbWUnPT4nIzAwZmYwMCcsCgkJCSdsaW1lZ3JlZW4nPT4nIzMyY2QzMicsCgkJCSdsaW5lbic9PicjZmFmMGU2JywKCQkJJ21hZ2VudGEnPT4nI2ZmMDBmZicsCgkJCSdtYXJvb24nPT4nIzgwMDAwMCcsCgkJCSdtZWRpdW1hcXVhbWFyaW5lJz0+JyM2NmNkYWEnLAoJCQknbWVkaXVtYmx1ZSc9PicjMDAwMGNkJywKCQkJJ21lZGl1bW9yY2hpZCc9PicjYmE1NWQzJywKCQkJJ21lZGl1bXB1cnBsZSc9PicjOTM3MGQ4JywKCQkJJ21lZGl1bXNlYWdyZWVuJz0+JyMzY2IzNzEnLAoJCQknbWVkaXVtc2xhdGVibHVlJz0+JyM3YjY4ZWUnLAoJCQknbWVkaXVtc3ByaW5nZ3JlZW4nPT4nIzAwZmE5YScsCgkJCSdtZWRpdW10dXJxdW9pc2UnPT4nIzQ4ZDFjYycsCgkJCSdtZWRpdW12aW9sZXRyZWQnPT4nI2M3MTU4NScsCgkJCSdtaWRuaWdodGJsdWUnPT4nIzE5MTk3MCcsCgkJCSdtaW50Y3JlYW0nPT4nI2Y1ZmZmYScsCgkJCSdtaXN0eXJvc2UnPT4nI2ZmZTRlMScsCgkJCSdtb2NjYXNpbic9PicjZmZlNGI1JywKCQkJJ25hdmFqb3doaXRlJz0+JyNmZmRlYWQnLAoJCQknbmF2eSc9PicjMDAwMDgwJywKCQkJJ29sZGxhY2UnPT4nI2ZkZjVlNicsCgkJCSdvbGl2ZSc9PicjODA4MDAwJywKCQkJJ29saXZlZHJhYic9PicjNmI4ZTIzJywKCQkJJ29yYW5nZSc9PicjZmZhNTAwJywKCQkJJ29yYW5nZXJlZCc9PicjZmY0NTAwJywKCQkJJ29yY2hpZCc9PicjZGE3MGQ2JywKCQkJJ3BhbGVnb2xkZW5yb2QnPT4nI2VlZThhYScsCgkJCSdwYWxlZ3JlZW4nPT4nIzk4ZmI5OCcsCgkJCSdwYWxldHVycXVvaXNlJz0+JyNhZmVlZWUnLAoJCQkncGFsZXZpb2xldHJlZCc9PicjZDg3MDkzJywKCQkJJ3BhcGF5YXdoaXAnPT4nI2ZmZWZkNScsCgkJCSdwZWFjaHB1ZmYnPT4nI2ZmZGFiOScsCgkJCSdwZXJ1Jz0+JyNjZDg1M2YnLAoJCQkncGluayc9PicjZmZjMGNiJywKCQkJJ3BsdW0nPT4nI2RkYTBkZCcsCgkJCSdwb3dkZXJibHVlJz0+JyNiMGUwZTYnLAoJCQkncHVycGxlJz0+JyM4MDAwODAnLAoJCQkncmVkJz0+JyNmZjAwMDAnLAoJCQkncm9zeWJyb3duJz0+JyNiYzhmOGYnLAoJCQkncm95YWxibHVlJz0+JyM0MTY5ZTEnLAoJCQknc2FkZGxlYnJvd24nPT4nIzhiNDUxMycsCgkJCSdzYWxtb24nPT4nI2ZhODA3MicsCgkJCSdzYW5keWJyb3duJz0+JyNmNGE0NjAnLAoJCQknc2VhZ3JlZW4nPT4nIzJlOGI1NycsCgkJCSdzZWFzaGVsbCc9PicjZmZmNWVlJywKCQkJJ3NpZW5uYSc9PicjYTA1MjJkJywKCQkJJ3NpbHZlcic9PicjYzBjMGMwJywKCQkJJ3NreWJsdWUnPT4nIzg3Y2VlYicsCgkJCSdzbGF0ZWJsdWUnPT4nIzZhNWFjZCcsCgkJCSdzbGF0ZWdyYXknPT4nIzcwODA5MCcsCgkJCSdzbGF0ZWdyZXknPT4nIzcwODA5MCcsCgkJCSdzbm93Jz0+JyNmZmZhZmEnLAoJCQknc3ByaW5nZ3JlZW4nPT4nIzAwZmY3ZicsCgkJCSdzdGVlbGJsdWUnPT4nIzQ2ODJiNCcsCgkJCSd0YW4nPT4nI2QyYjQ4YycsCgkJCSd0ZWFsJz0+JyMwMDgwODAnLAoJCQkndGhpc3RsZSc9PicjZDhiZmQ4JywKCQkJJ3RvbWF0byc9PicjZmY2MzQ3JywKCQkJJ3R1cnF1b2lzZSc9PicjNDBlMGQwJywKCQkJJ3Zpb2xldCc9PicjZWU4MmVlJywKCQkJJ3doZWF0Jz0+JyNmNWRlYjMnLAoJCQknd2hpdGUnPT4nI2ZmZmZmZicsCgkJCSd3aGl0ZXNtb2tlJz0+JyNmNWY1ZjUnLAoJCQkneWVsbG93Jz0+JyNmZmZmMDAnLAoJCQkneWVsbG93Z3JlZW4nPT4nIzlhY2QzMicKCQkpOwoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzT3duUHJvcGVydHkoJGNvbG9yKSB7CgkJcmV0dXJuIGlzc2V0KHNlbGY6OiRjb2xvcnNbJGNvbG9yXSk7Cgl9CgoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29sb3IoJGNvbG9yKSB7CgkJcmV0dXJuIHNlbGY6OiRjb2xvcnNbJGNvbG9yXTsKCX0KCn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Configurable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBDb25maWd1cmFibGUNCiAqDQogKiBAcGFja2FnZSBMZXNzDQogKiBAc3VicGFja2FnZSBDb3JlDQogKi8NCmFic3RyYWN0IGNsYXNzIExlc3NfQ29uZmlndXJhYmxlIHsNCg0KCS8qKg0KCSAqIEFycmF5IG9mIG9wdGlvbnMNCgkgKg0KCSAqIEB2YXIgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJG9wdGlvbnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogQXJyYXkgb2YgZGVmYXVsdCBvcHRpb25zDQoJICoNCgkgKiBAdmFyIGFycmF5DQoJICovDQoJcHJvdGVjdGVkICRkZWZhdWx0T3B0aW9ucyA9IGFycmF5KCk7DQoNCg0KCS8qKg0KCSAqIFNldCBvcHRpb25zDQoJICoNCgkgKiBJZiAkb3B0aW9ucyBpcyBhbiBvYmplY3QgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhbiBhcnJheSBieSBjYWxsZWQNCgkgKiBpdCdzIHRvQXJyYXkgbWV0aG9kLg0KCSAqDQoJICogQHRocm93cyBFeGNlcHRpb24NCgkgKiBAcGFyYW0gYXJyYXl8b2JqZWN0ICRvcHRpb25zDQoJICoNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9ucygkb3B0aW9ucyl7DQoJCSRvcHRpb25zID0gYXJyYXlfaW50ZXJzZWN0X2tleSgkb3B0aW9ucywkdGhpcy0+ZGVmYXVsdE9wdGlvbnMpOw0KCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5X21lcmdlKCR0aGlzLT5kZWZhdWx0T3B0aW9ucywgJHRoaXMtPm9wdGlvbnMsICRvcHRpb25zKTsNCgl9DQoNCg0KCS8qKg0KCSAqIEdldCBhbiBvcHRpb24gdmFsdWUgYnkgbmFtZQ0KCSAqDQoJICogSWYgdGhlIG9wdGlvbiBpcyBlbXB0eSBvciBub3Qgc2V0IGEgTlVMTCB2YWx1ZSB3aWxsIGJlIHJldHVybmVkLg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkbmFtZQ0KCSAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdCBEZWZhdWx0IHZhbHVlIGlmIGNvbmZpdXJhdGlvbiBvZiAkbmFtZSBpcyBub3QgcHJlc2VudA0KCSAqIEByZXR1cm4gbWl4ZWQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uKCRuYW1lLCAkZGVmYXVsdCA9IG51bGwpew0KCQlpZihpc3NldCgkdGhpcy0+b3B0aW9uc1skbmFtZV0pKXsNCgkJCXJldHVybiAkdGhpcy0+b3B0aW9uc1skbmFtZV07DQoJCX0NCgkJcmV0dXJuICRkZWZhdWx0Ow0KCX0NCg0KDQoJLyoqDQoJICogU2V0IGFuIG9wdGlvbg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkbmFtZQ0KCSAqIEBwYXJhbSBtaXhlZCAkdmFsdWUNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9uKCRuYW1lLCAkdmFsdWUpew0KCQkkdGhpcy0+b3B0aW9uc1skbmFtZV0gPSAkdmFsdWU7DQoJfQ0KDQp9]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Environment.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgovKioKICogRW52aXJvbm1lbnQKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSBlbnZpcm9ubWVudAogKi8KY2xhc3MgTGVzc19FbnZpcm9ubWVudHsKCgkvL3B1YmxpYyAkcGF0aHMgPSBhcnJheSgpOwkJCQkvLyBvcHRpb24gLSB1bm1vZGlmaWVkIC0gcGF0aHMgdG8gc2VhcmNoIGZvciBpbXBvcnRzIG9uCgkvL3B1YmxpYyBzdGF0aWMgJGZpbGVzID0gYXJyYXkoKTsJCS8vIGxpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWQsIHVzZWQgZm9yIGltcG9ydC1vbmNlCgkvL3B1YmxpYyAkcm9vdHBhdGg7CQkJCQkJLy8gb3B0aW9uIC0gcm9vdHBhdGggdG8gYXBwZW5kIHRvIFVSTCdzCgkvL3B1YmxpYyBzdGF0aWMgJHN0cmljdEltcG9ydHMgPSBudWxsOwkvLyBvcHRpb24gLQoJLy9wdWJsaWMgJGluc2VjdXJlOwkJCQkJCS8vIG9wdGlvbiAtIHdoZXRoZXIgdG8gYWxsb3cgaW1wb3J0cyBmcm9tIGluc2VjdXJlIHNzbCBob3N0cwoJLy9wdWJsaWMgJHByb2Nlc3NJbXBvcnRzOwkJCQkvLyBvcHRpb24gLSB3aGV0aGVyIHRvIHByb2Nlc3MgaW1wb3J0cy4gaWYgZmFsc2UgdGhlbiBpbXBvcnRzIHdpbGwgbm90IGJlIGltcG9ydGVkCgkvL3B1YmxpYyAkamF2YXNjcmlwdEVuYWJsZWQ7CQkJLy8gb3B0aW9uIC0gd2hldGhlciBKYXZhU2NyaXB0IGlzIGVuYWJsZWQuIGlmIHVuZGVmaW5lZCwgZGVmYXVsdHMgdG8gdHJ1ZQoJLy9wdWJsaWMgJHVzZUZpbGVDYWNoZTsJCQkJCS8vIGJyb3dzZXIgb25seSAtIHdoZXRoZXIgdG8gdXNlIHRoZSBwZXIgZmlsZSBzZXNzaW9uIGNhY2hlCglwdWJsaWMgJGN1cnJlbnRGaWxlSW5mbzsJCQkJLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgZmlsZSAtIGZvciBlcnJvciByZXBvcnRpbmcgYW5kIGltcG9ydGluZyBhbmQgbWFraW5nIHVybHMgcmVsYXRpdmUgZXRjLgoKCXB1YmxpYyAkaW1wb3J0TXVsdGlwbGUgPSBmYWxzZTsgCQkvLyB3aGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgaW1wb3J0aW5nIG11bHRpcGxlIGNvcGllcwoKCgkvKioKCSAqIEB2YXIgYXJyYXkKCSAqLwoJcHVibGljICRmcmFtZXMgPSBhcnJheSgpOwoKCS8qKgoJICogQHZhciBhcnJheQoJICovCglwdWJsaWMgJG1lZGlhQmxvY2tzID0gYXJyYXkoKTsKCgkvKioKCSAqIEB2YXIgYXJyYXkKCSAqLwoJcHVibGljICRtZWRpYVBhdGggPSBhcnJheSgpOwoKCXB1YmxpYyBzdGF0aWMgJHBhcmVuc1N0YWNrID0gMDsKCglwdWJsaWMgc3RhdGljICR0YWJMZXZlbCA9IDA7CgoJcHVibGljIHN0YXRpYyAkbGFzdFJ1bGUgPSBmYWxzZTsKCglwdWJsaWMgc3RhdGljICRfb3V0cHV0TWFwOwoKCXB1YmxpYyBzdGF0aWMgJG1peGluX3N0YWNrID0gMDsKCgkvKioKCSAqIEB2YXIgYXJyYXkKCSAqLwoJcHVibGljICRmdW5jdGlvbnMgPSBhcnJheSgpOwoKCglwdWJsaWMgZnVuY3Rpb24gSW5pdCgpewoKCQlzZWxmOjokcGFyZW5zU3RhY2sgPSAwOwoJCXNlbGY6OiR0YWJMZXZlbCA9IDA7CgkJc2VsZjo6JGxhc3RSdWxlID0gZmFsc2U7CgkJc2VsZjo6JG1peGluX3N0YWNrID0gMDsKCgkJaWYoIExlc3NfUGFyc2VyOjokb3B0aW9uc1snY29tcHJlc3MnXSApewoKCQkJTGVzc19FbnZpcm9ubWVudDo6JF9vdXRwdXRNYXAgPSBhcnJheSgKCQkJCScsJwk9PiAnLCcsCgkJCQknOiAnID0+ICc6JywKCQkJCScnICA9PiAnJywKCQkJCScgJyA9PiAnICcsCgkJCQknOicgPT4gJyA6JywKCQkJCScrJyA9PiAnKycsCgkJCQknficgPT4gJ34nLAoJCQkJJz4nID0+ICc+JywKCQkJCSd8JyA9PiAnfCcsCgkJICAgICAgICAnXicgPT4gJ14nLAoJCSAgICAgICAgJ15eJyA9PiAnXl4nCgkJCSk7CgoJCX1lbHNlewoKCQkJTGVzc19FbnZpcm9ubWVudDo6JF9vdXRwdXRNYXAgPSBhcnJheSgKCQkJCScsJwk9PiAnLCAnLAoJCQkJJzogJyA9PiAnOiAnLAoJCQkJJycgID0+ICcnLAoJCQkJJyAnID0+ICcgJywKCQkJCSc6JyA9PiAnIDonLAoJCQkJJysnID0+ICcgKyAnLAoJCQkJJ34nID0+ICcgfiAnLAoJCQkJJz4nID0+ICcgPiAnLAoJCQkJJ3wnID0+ICd8JywKCQkgICAgICAgICdeJyA9PiAnIF4gJywKCQkgICAgICAgICdeXicgPT4gJyBeXiAnCgkJCSk7CgoJCX0KCX0KCgoJcHVibGljIGZ1bmN0aW9uIGNvcHlFdmFsRW52KCRmcmFtZXMgPSBhcnJheSgpICl7CgkJJG5ld19lbnYgPSBuZXcgTGVzc19FbnZpcm9ubWVudCgpOwoJCSRuZXdfZW52LT5mcmFtZXMgPSAkZnJhbWVzOwoJCXJldHVybiAkbmV3X2VudjsKCX0KCgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc01hdGhPbigpewoJCXJldHVybiAhTGVzc19QYXJzZXI6OiRvcHRpb25zWydzdHJpY3RNYXRoJ10gfHwgTGVzc19FbnZpcm9ubWVudDo6JHBhcmVuc1N0YWNrOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmUoJHBhdGgpewoJCXJldHVybiAhcHJlZ19tYXRjaCgnL14oPzpbYS16LV0rOnxcLykvJywkcGF0aCk7Cgl9CgoKCS8qKgoJICogQ2Fub25pY2FsaXplIGEgcGF0aCBieSByZXNvbHZpbmcgcmVmZXJlbmNlcyB0byAnLy4vJywgJy8uLi8nCgkgKiBEb2VzIG5vdCByZW1vdmUgbGVhZGluZyAiLi4vIgoJICogQHBhcmFtIHN0cmluZyBwYXRoIG9yIHVybAoJICogQHJldHVybiBzdHJpbmcgQ2Fub25pY2FsaXplZCBwYXRoCgkgKgoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgoJHBhdGgpewoKCQkkc2VnbWVudHMgPSBleHBsb2RlKCcvJywkcGF0aCk7CgkJJHNlZ21lbnRzID0gYXJyYXlfcmV2ZXJzZSgkc2VnbWVudHMpOwoKCQkkcGF0aCA9IGFycmF5KCk7CgkJJHBhdGhfbGVuID0gMDsKCgkJd2hpbGUoICRzZWdtZW50cyApewoJCQkkc2VnbWVudCA9IGFycmF5X3BvcCgkc2VnbWVudHMpOwoJCQlzd2l0Y2goICRzZWdtZW50ICkgewoKCQkJCWNhc2UgJy4nOgoJCQkJYnJlYWs7CgoJCQkJY2FzZSAnLi4nOgoJCQkJCWlmKCAhJHBhdGhfbGVuIHx8ICggJHBhdGhbJHBhdGhfbGVuLTFdID09PSAnLi4nKSApewoJCQkJCQkkcGF0aFtdID0gJHNlZ21lbnQ7CgkJCQkJCSRwYXRoX2xlbisrOwoJCQkJCX1lbHNlewoJCQkJCQlhcnJheV9wb3AoJHBhdGgpOwoJCQkJCQkkcGF0aF9sZW4tLTsKCQkJCQl9CgkJCQlicmVhazsKCgkJCQlkZWZhdWx0OgoJCQkJCSRwYXRoW10gPSAkc2VnbWVudDsKCQkJCQkkcGF0aF9sZW4rKzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQlyZXR1cm4gaW1wbG9kZSgnLycsJHBhdGgpOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gdW5zaGlmdEZyYW1lKCRmcmFtZSl7CgkJYXJyYXlfdW5zaGlmdCgkdGhpcy0+ZnJhbWVzLCAkZnJhbWUpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzaGlmdEZyYW1lKCl7CgkJcmV0dXJuIGFycmF5X3NoaWZ0KCR0aGlzLT5mcmFtZXMpOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Exception/Chunk.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBDaHVuayBFeGNlcHRpb24NCiAqDQogKiBAcGFja2FnZSBMZXNzDQogKiBAc3VicGFja2FnZSBleGNlcHRpb24NCiAqLw0KY2xhc3MgTGVzc19FeGNlcHRpb25fQ2h1bmsgZXh0ZW5kcyBMZXNzX0V4Y2VwdGlvbl9QYXJzZXJ7DQoNCg0KCXByb3RlY3RlZCAkcGFyc2VyQ3VycmVudEluZGV4ID0gMDsNCg0KCXByb3RlY3RlZCAkZW1pdEZyb20gPSAwOw0KDQoJcHJvdGVjdGVkICRpbnB1dF9sZW47DQoNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRpbnB1dA0KCSAqIEBwYXJhbSBFeGNlcHRpb24gJHByZXZpb3VzIFByZXZpb3VzIGV4Y2VwdGlvbg0KCSAqIEBwYXJhbSBpbnRlZ2VyICRpbmRleCBUaGUgY3VycmVudCBwYXJzZXIgaW5kZXgNCgkgKiBAcGFyYW0gTGVzc19GaWxlSW5mb3xzdHJpbmcgJGN1cnJlbnRGaWxlIFRoZSBmaWxlDQoJICogQHBhcmFtIGludGVnZXIgJGNvZGUgVGhlIGV4Y2VwdGlvbiBjb2RlDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpbnB1dCwgRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwsICRpbmRleCA9IG51bGwsICRjdXJyZW50RmlsZSA9IG51bGwsICRjb2RlID0gMCl7DQoNCgkJJHRoaXMtPm1lc3NhZ2UgPSAnUGFyc2VFcnJvcjogVW5leHBlY3RlZCBpbnB1dCc7IC8vZGVmYXVsdCBtZXNzYWdlDQoNCgkJJHRoaXMtPmluZGV4ID0gJGluZGV4Ow0KDQoJCSR0aGlzLT5jdXJyZW50RmlsZSA9ICRjdXJyZW50RmlsZTsNCg0KCQkkdGhpcy0+aW5wdXQgPSAkaW5wdXQ7DQoJCSR0aGlzLT5pbnB1dF9sZW4gPSBzdHJsZW4oJGlucHV0KTsNCg0KCQkkdGhpcy0+Q2h1bmtzKCk7DQoJCSR0aGlzLT5nZW5NZXNzYWdlKCk7DQoJfQ0KDQoNCgkvKioNCgkgKiBTZWUgbGVzcy5qcyBjaHVua3MoKQ0KCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGNodW5rcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIENodW5rcygpew0KCQkkbGV2ZWwgPSAwOw0KCQkkcGFyZW5MZXZlbCA9IDA7DQoJCSRsYXN0TXVsdGlDb21tZW50RW5kQnJhY2UgPSBudWxsOw0KCQkkbGFzdE9wZW5pbmcgPSBudWxsOw0KCQkkbGFzdE11bHRpQ29tbWVudCA9IG51bGw7DQoJCSRsYXN0UGFyZW4gPSBudWxsOw0KDQoJCWZvciggJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCA9IDA7ICR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXggPCAkdGhpcy0+aW5wdXRfbGVuOyAkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4KysgKXsNCgkJCSRjYyA9ICR0aGlzLT5DaGFyQ29kZSgkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4KTsNCgkJCWlmICgoKCRjYyA+PSA5NykgJiYgKCRjYyA8PSAxMjIpKSB8fCAoJGNjIDwgMzQpKSB7DQoJCQkJLy8gYS16IG9yIHdoaXRlc3BhY2UNCgkJCQljb250aW51ZTsNCgkJCX0NCg0KCQkJc3dpdGNoICgkY2MpIHsNCg0KCQkJCS8vICgNCgkJCQljYXNlIDQwOg0KCQkJCQkkcGFyZW5MZXZlbCsrOw0KCQkJCQkkbGFzdFBhcmVuID0gJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleDsNCgkJCQkJY29udGludWU7DQoNCgkJCQkvLyApDQoJCQkJY2FzZSA0MToNCgkJCQkJJHBhcmVuTGV2ZWwtLTsNCgkJCQkJaWYoICRwYXJlbkxldmVsIDwgMCApew0KCQkJCQkJcmV0dXJuICR0aGlzLT5mYWlsKCJtaXNzaW5nIG9wZW5pbmcgYChgIik7DQoJCQkJCX0NCgkJCQkJY29udGludWU7DQoNCgkJCQkvLyA7DQoJCQkJY2FzZSA1OToNCgkJCQkJLy9pZiAoISRwYXJlbkxldmVsKSB7ICR0aGlzLT5lbWl0Q2h1bmsoKTsJfQ0KCQkJCQljb250aW51ZTsNCg0KCQkJCS8vIHsNCgkJCQljYXNlIDEyMzoNCgkJCQkJJGxldmVsKys7DQoJCQkJCSRsYXN0T3BlbmluZyA9ICR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXg7DQoJCQkJCWNvbnRpbnVlOw0KDQoJCQkJLy8gfQ0KCQkJCWNhc2UgMTI1Og0KCQkJCQkkbGV2ZWwtLTsNCgkJCQkJaWYoICRsZXZlbCA8IDAgKXsNCgkJCQkJCXJldHVybiAkdGhpcy0+ZmFpbCgibWlzc2luZyBvcGVuaW5nIGB7YCIpOw0KDQoJCQkJCX0NCgkJCQkJLy9pZiAoISRsZXZlbCAmJiAhJHBhcmVuTGV2ZWwpIHsgJHRoaXMtPmVtaXRDaHVuaygpOyB9DQoJCQkJCWNvbnRpbnVlOw0KCQkJCS8vIFwNCgkJCQljYXNlIDkyOg0KCQkJCQlpZiAoJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCA8ICR0aGlzLT5pbnB1dF9sZW4gLSAxKSB7ICR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXgrKzsgY29udGludWU7IH0NCgkJCQkJcmV0dXJuICR0aGlzLT5mYWlsKCJ1bmVzY2FwZWQgYFxcYCIpOw0KDQoJCQkJLy8gIiwgJyBhbmQgYA0KCQkJCWNhc2UgMzQ6DQoJCQkJY2FzZSAzOToNCgkJCQljYXNlIDk2Og0KCQkJCQkkbWF0Y2hlZCA9IDA7DQoJCQkJCSRjdXJyZW50Q2h1bmtTdGFydEluZGV4ID0gJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleDsNCgkJCQkJZm9yICgkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4ID0gJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCArIDE7ICR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXggPCAkdGhpcy0+aW5wdXRfbGVuOyAkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4KyspIHsNCgkJCQkJCSRjYzIgPSAkdGhpcy0+Q2hhckNvZGUoJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCk7DQoJCQkJCQlpZiAoJGNjMiA+IDk2KSB7IGNvbnRpbnVlOyB9DQoJCQkJCQlpZiAoJGNjMiA9PSAkY2MpIHsgJG1hdGNoZWQgPSAxOyBicmVhazsgfQ0KCQkJCQkJaWYgKCRjYzIgPT0gOTIpIHsgICAgICAgIC8vIFwNCgkJCQkJCQlpZiAoJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCA9PSAkdGhpcy0+aW5wdXRfbGVuIC0gMSkgew0KCQkJCQkJCQlyZXR1cm4gJHRoaXMtPmZhaWwoInVuZXNjYXBlZCBgXFxgIik7DQoJCQkJCQkJfQ0KCQkJCQkJCSR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXgrKzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQlpZiAoJG1hdGNoZWQpIHsgY29udGludWU7IH0NCgkJCQkJcmV0dXJuICR0aGlzLT5mYWlsKCJ1bm1hdGNoZWQgYCIgLiBjaHIoJGNjKSAuICJgIiwgJGN1cnJlbnRDaHVua1N0YXJ0SW5kZXgpOw0KDQoJCQkJLy8gLywgY2hlY2sgZm9yIGNvbW1lbnQNCgkJCQljYXNlIDQ3Og0KCQkJCQlpZiAoJHBhcmVuTGV2ZWwgfHwgKCR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXggPT0gJHRoaXMtPmlucHV0X2xlbiAtIDEpKSB7IGNvbnRpbnVlOyB9DQoJCQkJCSRjYzIgPSAkdGhpcy0+Q2hhckNvZGUoJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCsxKTsNCgkJCQkJaWYgKCRjYzIgPT0gNDcpIHsNCgkJCQkJCS8vIC8vLCBmaW5kIGxuZmVlZA0KCQkJCQkJZm9yICgkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4ID0gJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCArIDI7ICR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXggPCAkdGhpcy0+aW5wdXRfbGVuOyAkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4KyspIHsNCgkJCQkJCQkkY2MyID0gJHRoaXMtPkNoYXJDb2RlKCR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXgpOw0KCQkJCQkJCWlmICgoJGNjMiA8PSAxMykgJiYgKCgkY2MyID09IDEwKSB8fCAoJGNjMiA9PSAxMykpKSB7IGJyZWFrOyB9DQoJCQkJCQl9DQoJCQkJCX0gZWxzZSBpZiAoJGNjMiA9PSA0Mikgew0KCQkJCQkJLy8gLyosIGZpbmQgKi8NCgkJCQkJCSRsYXN0TXVsdGlDb21tZW50ID0gJGN1cnJlbnRDaHVua1N0YXJ0SW5kZXggPSAkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4Ow0KCQkJCQkJZm9yICgkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4ID0gJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCArIDI7ICR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXggPCAkdGhpcy0+aW5wdXRfbGVuIC0gMTsgJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCsrKSB7DQoJCQkJCQkJJGNjMiA9ICR0aGlzLT5DaGFyQ29kZSgkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4KTsNCgkJCQkJCQlpZiAoJGNjMiA9PSAxMjUpIHsgJGxhc3RNdWx0aUNvbW1lbnRFbmRCcmFjZSA9ICR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXg7IH0NCgkJCQkJCQlpZiAoJGNjMiAhPSA0MikgeyBjb250aW51ZTsgfQ0KCQkJCQkJCWlmICgkdGhpcy0+Q2hhckNvZGUoJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCsxKSA9PSA0NykgeyBicmVhazsgfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKCR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXggPT0gJHRoaXMtPmlucHV0X2xlbiAtIDEpIHsNCgkJCQkJCQlyZXR1cm4gJHRoaXMtPmZhaWwoIm1pc3NpbmcgY2xvc2luZyBgKi9gIiwgJGN1cnJlbnRDaHVua1N0YXJ0SW5kZXgpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWNvbnRpbnVlOw0KDQoJCQkJLy8gKiwgY2hlY2sgZm9yIHVubWF0Y2hlZCAqLw0KCQkJCWNhc2UgNDI6DQoJCQkJCWlmICgoJHRoaXMtPnBhcnNlckN1cnJlbnRJbmRleCA8ICR0aGlzLT5pbnB1dF9sZW4gLSAxKSAmJiAoJHRoaXMtPkNoYXJDb2RlKCR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXgrMSkgPT0gNDcpKSB7DQoJCQkJCQlyZXR1cm4gJHRoaXMtPmZhaWwoInVubWF0Y2hlZCBgLypgIik7DQoJCQkJCX0NCgkJCQkJY29udGludWU7DQoJCQl9DQoJCX0NCg0KCQlpZiggJGxldmVsICE9PSAwICl7DQoJCQlpZiggKCRsYXN0TXVsdGlDb21tZW50ID4gJGxhc3RPcGVuaW5nKSAmJiAoJGxhc3RNdWx0aUNvbW1lbnRFbmRCcmFjZSA+ICRsYXN0TXVsdGlDb21tZW50KSApew0KCQkJCXJldHVybiAkdGhpcy0+ZmFpbCgibWlzc2luZyBjbG9zaW5nIGB9YCBvciBgKi9gIiwgJGxhc3RPcGVuaW5nKTsNCgkJCX0gZWxzZSB7DQoJCQkJcmV0dXJuICR0aGlzLT5mYWlsKCJtaXNzaW5nIGNsb3NpbmcgYH1gIiwgJGxhc3RPcGVuaW5nKTsNCgkJCX0NCgkJfSBlbHNlIGlmICggJHBhcmVuTGV2ZWwgIT09IDAgKXsNCgkJCXJldHVybiAkdGhpcy0+ZmFpbCgibWlzc2luZyBjbG9zaW5nIGApYCIsICRsYXN0UGFyZW4pOw0KCQl9DQoNCg0KCQkvL2NodW5rIGRpZG4ndCBmYWlsDQoNCg0KCQkvLyR0aGlzLT5lbWl0Q2h1bmsodHJ1ZSk7DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIENoYXJDb2RlKCRwb3Mpew0KCQlyZXR1cm4gb3JkKCR0aGlzLT5pbnB1dFskcG9zXSk7DQoJfQ0KDQoNCglwdWJsaWMgZnVuY3Rpb24gZmFpbCggJG1zZywgJGluZGV4ID0gbnVsbCApew0KDQoJCWlmKCAhJGluZGV4ICl7DQoJCQkkdGhpcy0+aW5kZXggPSAkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4Ow0KCQl9ZWxzZXsNCgkJCSR0aGlzLT5pbmRleCA9ICRpbmRleDsNCgkJfQ0KCQkkdGhpcy0+bWVzc2FnZSA9ICdQYXJzZUVycm9yOiAnLiRtc2c7DQoJfQ0KDQoNCgkvKg0KCWZ1bmN0aW9uIGVtaXRDaHVuayggJGZvcmNlID0gZmFsc2UgKXsNCgkJJGxlbiA9ICR0aGlzLT5wYXJzZXJDdXJyZW50SW5kZXggLSAkdGhpcy0+ZW1pdEZyb207DQoJCWlmICgoKCRsZW4gPCA1MTIpICYmICEkZm9yY2UpIHx8ICEkbGVuKSB7DQoJCQlyZXR1cm47DQoJCX0NCgkJJGNodW5rc1tdID0gc3Vic3RyKCR0aGlzLT5pbnB1dCwgJHRoaXMtPmVtaXRGcm9tLCAkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4ICsgMSAtICR0aGlzLT5lbWl0RnJvbSApOw0KCQkkdGhpcy0+ZW1pdEZyb20gPSAkdGhpcy0+cGFyc2VyQ3VycmVudEluZGV4ICsgMTsNCgl9DQoJKi8NCg0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Exception/Compiler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBDb21waWxlciBFeGNlcHRpb24NCiAqDQogKiBAcGFja2FnZSBMZXNzDQogKiBAc3VicGFja2FnZSBleGNlcHRpb24NCiAqLw0KY2xhc3MgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIgZXh0ZW5kcyBMZXNzX0V4Y2VwdGlvbl9QYXJzZXJ7DQoNCn0=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Exception/Compiler.php.part</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBDb21waWxlciBFeGNlcHRpb24NCiAqDQogKiBAcGFja2FnZSBMZXNzDQogKiBAc3VicGFja2FnZSBleGNlcHRpb24NCiAqLw0KY2xhc3MgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIgZXh0ZW5kcyBMZXNzX0V4Y2VwdGlvbl9QYXJzZXJ7DQoNCn0=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Exception/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Exception/Parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBQYXJzZXIgRXhjZXB0aW9uDQogKg0KICogQHBhY2thZ2UgTGVzcw0KICogQHN1YnBhY2thZ2UgZXhjZXB0aW9uDQogKi8NCmNsYXNzIExlc3NfRXhjZXB0aW9uX1BhcnNlciBleHRlbmRzIEV4Y2VwdGlvbnsNCg0KCS8qKg0KCSAqIFRoZSBjdXJyZW50IGZpbGUNCgkgKg0KCSAqIEB2YXIgTGVzc19JbXBvcnRlZEZpbGUNCgkgKi8NCglwdWJsaWMgJGN1cnJlbnRGaWxlOw0KDQoJLyoqDQoJICogVGhlIGN1cnJlbnQgcGFyc2VyIGluZGV4DQoJICoNCgkgKiBAdmFyIGludGVnZXINCgkgKi8NCglwdWJsaWMgJGluZGV4Ow0KDQoJcHJvdGVjdGVkICRpbnB1dDsNCg0KCXByb3RlY3RlZCAkZGV0YWlscyA9IGFycmF5KCk7DQoNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlDQoJICogQHBhcmFtIEV4Y2VwdGlvbiAkcHJldmlvdXMgUHJldmlvdXMgZXhjZXB0aW9uDQoJICogQHBhcmFtIGludGVnZXIgJGluZGV4IFRoZSBjdXJyZW50IHBhcnNlciBpbmRleA0KCSAqIEBwYXJhbSBMZXNzX0ZpbGVJbmZvfHN0cmluZyAkY3VycmVudEZpbGUgVGhlIGZpbGUNCgkgKiBAcGFyYW0gaW50ZWdlciAkY29kZSBUaGUgZXhjZXB0aW9uIGNvZGUNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1lc3NhZ2UgPSBudWxsLCBFeGNlcHRpb24gJHByZXZpb3VzID0gbnVsbCwgJGluZGV4ID0gbnVsbCwgJGN1cnJlbnRGaWxlID0gbnVsbCwgJGNvZGUgPSAwKXsNCg0KCQlpZiAoUEhQX1ZFUlNJT05fSUQgPCA1MDMwMCkgew0KCQkJJHRoaXMtPnByZXZpb3VzID0gJHByZXZpb3VzOw0KCQkJcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGNvZGUpOw0KCQl9IGVsc2Ugew0KCQkJcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGNvZGUsICRwcmV2aW91cyk7DQoJCX0NCg0KCQkkdGhpcy0+Y3VycmVudEZpbGUgPSAkY3VycmVudEZpbGU7DQoJCSR0aGlzLT5pbmRleCA9ICRpbmRleDsNCg0KCQkkdGhpcy0+Z2VuTWVzc2FnZSgpOw0KCX0NCg0KDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldElucHV0KCl7DQoNCgkJaWYoICEkdGhpcy0+aW5wdXQgJiYgJHRoaXMtPmN1cnJlbnRGaWxlICYmICR0aGlzLT5jdXJyZW50RmlsZVsnZmlsZW5hbWUnXSAmJiBmaWxlX2V4aXN0cygkdGhpcy0+Y3VycmVudEZpbGVbJ2ZpbGVuYW1lJ10pICl7DQoJCQkkdGhpcy0+aW5wdXQgPSBmaWxlX2dldF9jb250ZW50cyggJHRoaXMtPmN1cnJlbnRGaWxlWydmaWxlbmFtZSddICk7DQoJCX0NCgl9DQoNCg0KDQoJLyoqDQoJICogQ29udmVydHMgdGhlIGV4Y2VwdGlvbiB0byBzdHJpbmcNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdlbk1lc3NhZ2UoKXsNCg0KCQlpZiggJHRoaXMtPmN1cnJlbnRGaWxlICYmICR0aGlzLT5jdXJyZW50RmlsZVsnZmlsZW5hbWUnXSApew0KCQkJJHRoaXMtPm1lc3NhZ2UgLj0gJyBpbiAnLmJhc2VuYW1lKCR0aGlzLT5jdXJyZW50RmlsZVsnZmlsZW5hbWUnXSk7DQoJCX0NCg0KCQlpZiggJHRoaXMtPmluZGV4ICE9PSBudWxsICl7DQoJCQkkdGhpcy0+Z2V0SW5wdXQoKTsNCgkJCWlmKCAkdGhpcy0+aW5wdXQgKXsNCgkJCQkkbGluZSA9IHNlbGY6OmdldExpbmVOdW1iZXIoKTsNCgkJCQkkdGhpcy0+bWVzc2FnZSAuPSAnIG9uIGxpbmUgJy4kbGluZS4nLCBjb2x1bW4gJy5zZWxmOjpnZXRDb2x1bW4oKTsNCg0KCQkJCSRsaW5lcyA9IGV4cGxvZGUoIlxuIiwkdGhpcy0+aW5wdXQpOw0KDQoJCQkJJGNvdW50ID0gY291bnQoJGxpbmVzKTsNCgkJCQkkc3RhcnRfbGluZSA9IG1heCgwLCAkbGluZS0zKTsNCgkJCQkkbGFzdF9saW5lID0gbWluKCRjb3VudCwgJHN0YXJ0X2xpbmUrNik7DQoJCQkJJG51bV9sZW4gPSBzdHJsZW4oJGxhc3RfbGluZSk7DQoJCQkJZm9yKCAkaSA9ICRzdGFydF9saW5lOyAkaSA8ICRsYXN0X2xpbmU7ICRpKysgKXsNCgkJCQkJJHRoaXMtPm1lc3NhZ2UgLj0gIlxuIi5zdHJfcGFkKCRpKzEsJG51bV9sZW4sJzAnLFNUUl9QQURfTEVGVCkuJ3wgJy4kbGluZXNbJGldOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJfQ0KDQoJLyoqDQoJICogUmV0dXJucyB0aGUgbGluZSBudW1iZXIgdGhlIGVycm9yIHdhcyBlbmNvdW50ZXJlZA0KCSAqDQoJICogQHJldHVybiBpbnRlZ2VyDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldExpbmVOdW1iZXIoKXsNCgkJaWYoICR0aGlzLT5pbmRleCApew0KCQkJLy8gaHR0cHM6Ly9idWdzLnBocC5uZXQvYnVnLnBocD9pZD00OTc5MA0KCQkJaWYgKGluaV9nZXQoIm1ic3RyaW5nLmZ1bmNfb3ZlcmxvYWQiKSkgew0KCQkJCXJldHVybiBzdWJzdHJfY291bnQoc3Vic3RyKCR0aGlzLT5pbnB1dCwgMCwgJHRoaXMtPmluZGV4KSwgIlxuIikgKyAxOw0KCQkJfSBlbHNlIHsNCgkJCQlyZXR1cm4gc3Vic3RyX2NvdW50KCR0aGlzLT5pbnB1dCwgIlxuIiwgMCwgJHRoaXMtPmluZGV4KSArIDE7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIDE7DQoJfQ0KDQoNCgkvKioNCgkgKiBSZXR1cm5zIHRoZSBjb2x1bW4gdGhlIGVycm9yIHdhcyBlbmNvdW50ZXJlZA0KCSAqDQoJICogQHJldHVybiBpbnRlZ2VyDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldENvbHVtbigpew0KDQoJCSRwYXJ0ID0gc3Vic3RyKCR0aGlzLT5pbnB1dCwgMCwgJHRoaXMtPmluZGV4KTsNCgkJJHBvcyA9IHN0cnJwb3MoJHBhcnQsIlxuIik7DQoJCXJldHVybiAkdGhpcy0+aW5kZXggLSAkcG9zOw0KCX0NCg0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBCdWlsdGluIGZ1bmN0aW9ucwogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIGZ1bmN0aW9uCiAqIEBzZWUgaHR0cDovL2xlc3Njc3Mub3JnL2Z1bmN0aW9ucy8KICovCmNsYXNzIExlc3NfRnVuY3Rpb25zewoKCXB1YmxpYyAkZW52OwoJcHVibGljICRjdXJyZW50RmlsZUluZm87CgoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGVudiwgJGN1cnJlbnRGaWxlSW5mbyA9IG51bGwgKXsKCQkkdGhpcy0+ZW52ID0gJGVudjsKCQkkdGhpcy0+Y3VycmVudEZpbGVJbmZvID0gJGN1cnJlbnRGaWxlSW5mbzsKCX0KCgkvKioKCSAqIEBwYXJhbSBzdHJpbmcgJG9wCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb3BlcmF0ZSggJG9wLCAkYSwgJGIgKXsKCQlzd2l0Y2ggKCRvcCkgewoJCQljYXNlICcrJzogcmV0dXJuICRhICsgJGI7CgkJCWNhc2UgJy0nOiByZXR1cm4gJGEgLSAkYjsKCQkJY2FzZSAnKic6IHJldHVybiAkYSAqICRiOwoJCQljYXNlICcvJzogcmV0dXJuICRhIC8gJGI7CgkJfQoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2xhbXAoJHZhbCwgJG1heCA9IDEpewoJCXJldHVybiBtaW4oIG1heCgkdmFsLCAwKSwgJG1heCk7Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm91bmQoICR2YWx1ZSApewoKCQlpZiggJHZhbHVlID09PSAwICl7CgkJCXJldHVybiAkdmFsdWU7CgkJfQoKCQlpZiggTGVzc19QYXJzZXI6OiRvcHRpb25zWydudW1QcmVjaXNpb24nXSApewoJCQkkcCA9IHBvdygxMCwgTGVzc19QYXJzZXI6OiRvcHRpb25zWydudW1QcmVjaXNpb24nXSk7CgkJCXJldHVybiByb3VuZCggJHZhbHVlICogJHApIC8gJHA7CgkJfQoJCXJldHVybiAkdmFsdWU7Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBudW1iZXIoJG4pewoKCQlpZiAoJG4gaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGltZW5zaW9uKSB7CgkJCXJldHVybiBmbG9hdHZhbCggJG4tPnVuaXQtPmlzKCclJykgPyAkbi0+dmFsdWUgLyAxMDAgOiAkbi0+dmFsdWUpOwoJCX0gZWxzZSBpZiAoaXNfbnVtZXJpYygkbikpIHsKCQkJcmV0dXJuICRuOwoJCX0gZWxzZSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcigiY29sb3IgZnVuY3Rpb25zIHRha2UgbnVtYmVycyBhcyBwYXJhbWV0ZXJzIik7CgkJfQoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2NhbGVkKCRuLCAkc2l6ZSA9IDI1NSApewoJCWlmKCAkbiBpbnN0YW5jZW9mIExlc3NfVHJlZV9EaW1lbnNpb24gJiYgJG4tPnVuaXQtPmlzKCclJykgKXsKCQkJcmV0dXJuIChmbG9hdCkkbi0+dmFsdWUgKiAkc2l6ZSAvIDEwMDsKCQl9IGVsc2UgewoJCQlyZXR1cm4gTGVzc19GdW5jdGlvbnM6Om51bWJlcigkbik7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiByZ2IgKCRyID0gbnVsbCwgJGcgPSBudWxsLCAkYiA9IG51bGwpewoJCWlmIChpc19udWxsKCRyKSB8fCBpc19udWxsKCRnKSB8fCBpc19udWxsKCRiKSkgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoInJnYiBleHBlY3RzIHRocmVlIHBhcmFtZXRlcnMiKTsKCQl9CgkJcmV0dXJuICR0aGlzLT5yZ2JhKCRyLCAkZywgJGIsIDEuMCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJnYmEoJHIgPSBudWxsLCAkZyA9IG51bGwsICRiID0gbnVsbCwgJGEgPSBudWxsKXsKCQkkcmdiID0gYXJyYXkoJHIsICRnLCAkYik7CgkJJHJnYiA9IGFycmF5X21hcChhcnJheSgnTGVzc19GdW5jdGlvbnMnLCdzY2FsZWQnKSwkcmdiKTsKCgkJJGEgPSBzZWxmOjpudW1iZXIoJGEpOwoJCXJldHVybiBuZXcgTGVzc19UcmVlX0NvbG9yKCRyZ2IsICRhKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaHNsKCRoLCAkcywgJGwpewoJCXJldHVybiAkdGhpcy0+aHNsYSgkaCwgJHMsICRsLCAxLjApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBoc2xhKCRoLCAkcywgJGwsICRhKXsKCgkJJGggPSBmbW9kKHNlbGY6Om51bWJlcigkaCksIDM2MCkgLyAzNjA7IC8vIENsYXNzaWMgJSBvcGVyYXRvciB3aWxsIGNoYW5nZSBmbG9hdCB0byBpbnQKCQkkcyA9IHNlbGY6OmNsYW1wKHNlbGY6Om51bWJlcigkcykpOwoJCSRsID0gc2VsZjo6Y2xhbXAoc2VsZjo6bnVtYmVyKCRsKSk7CgkJJGEgPSBzZWxmOjpjbGFtcChzZWxmOjpudW1iZXIoJGEpKTsKCgkJJG0yID0gJGwgPD0gMC41ID8gJGwgKiAoJHMgKyAxKSA6ICRsICsgJHMgLSAkbCAqICRzOwoKCQkkbTEgPSAkbCAqIDIgLSAkbTI7CgoJCXJldHVybiAkdGhpcy0+cmdiYSggc2VsZjo6aHNsYV9odWUoJGggKyAxLzMsICRtMSwgJG0yKSAqIDI1NSwKCQkJCQkJCXNlbGY6OmhzbGFfaHVlKCRoLCAkbTEsICRtMikgKiAyNTUsCgkJCQkJCQlzZWxmOjpoc2xhX2h1ZSgkaCAtIDEvMywgJG0xLCAkbTIpICogMjU1LAoJCQkJCQkJJGEpOwoJfQoKCS8qKgoJICogQHBhcmFtIGRvdWJsZSAkaAoJICovCglwdWJsaWMgZnVuY3Rpb24gaHNsYV9odWUoJGgsICRtMSwgJG0yKXsKCQkkaCA9ICRoIDwgMCA/ICRoICsgMSA6ICgkaCA+IDEgPyAkaCAtIDEgOiAkaCk7CgkJaWYJICAoJGggKiA2IDwgMSkgcmV0dXJuICRtMSArICgkbTIgLSAkbTEpICogJGggKiA2OwoJCWVsc2UgaWYgKCRoICogMiA8IDEpIHJldHVybiAkbTI7CgkJZWxzZSBpZiAoJGggKiAzIDwgMikgcmV0dXJuICRtMSArICgkbTIgLSAkbTEpICogKDIvMyAtICRoKSAqIDY7CgkJZWxzZQkJCQkgcmV0dXJuICRtMTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaHN2KCRoLCAkcywgJHYpIHsKCQlyZXR1cm4gJHRoaXMtPmhzdmEoJGgsICRzLCAkdiwgMS4wKTsKCX0KCgkvKioKCSAqIEBwYXJhbSBkb3VibGUgJGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGhzdmEoJGgsICRzLCAkdiwgJGEpIHsKCQkkaCA9ICgoTGVzc19GdW5jdGlvbnM6Om51bWJlcigkaCkgJSAzNjApIC8gMzYwICkgKiAzNjA7CgkJJHMgPSBMZXNzX0Z1bmN0aW9uczo6bnVtYmVyKCRzKTsKCQkkdiA9IExlc3NfRnVuY3Rpb25zOjpudW1iZXIoJHYpOwoJCSRhID0gTGVzc19GdW5jdGlvbnM6Om51bWJlcigkYSk7CgoJCSRpID0gZmxvb3IoKCRoIC8gNjApICUgNik7CgkJJGYgPSAoJGggLyA2MCkgLSAkaTsKCgkJJHZzID0gYXJyYXkoICR2LAoJCQkJICAkdiAqICgxIC0gJHMpLAoJCQkJICAkdiAqICgxIC0gJGYgKiAkcyksCgkJCQkgICR2ICogKDEgLSAoMSAtICRmKSAqICRzKSk7CgoJCSRwZXJtID0gYXJyYXkoYXJyYXkoMCwgMywgMSksCgkJCQkJYXJyYXkoMiwgMCwgMSksCgkJCQkJYXJyYXkoMSwgMCwgMyksCgkJCQkJYXJyYXkoMSwgMiwgMCksCgkJCQkJYXJyYXkoMywgMSwgMCksCgkJCQkJYXJyYXkoMCwgMSwgMikpOwoKCQlyZXR1cm4gJHRoaXMtPnJnYmEoJHZzWyRwZXJtWyRpXVswXV0gKiAyNTUsCgkJCQkJCSAkdnNbJHBlcm1bJGldWzFdXSAqIDI1NSwKCQkJCQkJICR2c1skcGVybVskaV1bMl1dICogMjU1LAoJCQkJCQkgJGEpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBodWUoJGNvbG9yID0gbnVsbCl7CgkJaWYgKCEkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgZmlyc3QgYXJndW1lbnQgdG8gaHVlIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCSRjID0gJGNvbG9yLT50b0hTTCgpOwoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbihMZXNzX1BhcnNlcjo6cm91bmQoJGNbJ2gnXSkpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzYXR1cmF0aW9uKCRjb2xvciA9IG51bGwpewoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNhdHVyYXRpb24gbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJJGMgPSAkY29sb3ItPnRvSFNMKCk7CgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKExlc3NfUGFyc2VyOjpyb3VuZCgkY1sncyddICogMTAwKSwgJyUnKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbGlnaHRuZXNzKCRjb2xvciA9IG51bGwpewoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGxpZ2h0bmVzcyBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQkkYyA9ICRjb2xvci0+dG9IU0woKTsKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9EaW1lbnNpb24oTGVzc19QYXJzZXI6OnJvdW5kKCRjWydsJ10gKiAxMDApLCAnJScpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBoc3ZodWUoICRjb2xvciA9IG51bGwgKXsKCQlpZiAoISRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBoc3ZodWUgbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJJGhzdiA9ICRjb2xvci0+dG9IU1YoKTsKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9EaW1lbnNpb24oIExlc3NfUGFyc2VyOjpyb3VuZCgkaHN2WydoJ10pICk7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBoc3ZzYXR1cmF0aW9uKCAkY29sb3IgPSBudWxsICl7CgkJaWYgKCEkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgZmlyc3QgYXJndW1lbnQgdG8gaHN2c2F0dXJhdGlvbiBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQkkaHN2ID0gJGNvbG9yLT50b0hTVigpOwoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbiggTGVzc19QYXJzZXI6OnJvdW5kKCRoc3ZbJ3MnXSAqIDEwMCksICclJyApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBoc3Z2YWx1ZSggJGNvbG9yID0gbnVsbCApewoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGhzdnZhbHVlIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCSRoc3YgPSAkY29sb3ItPnRvSFNWKCk7CgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKCBMZXNzX1BhcnNlcjo6cm91bmQoJGhzdlsndiddICogMTAwKSwgJyUnICk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJlZCgkY29sb3IgPSBudWxsKSB7CgkJaWYgKCEkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgZmlyc3QgYXJndW1lbnQgdG8gcmVkIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbiggJGNvbG9yLT5yZ2JbMF0gKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ3JlZW4oJGNvbG9yID0gbnVsbCkgewoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGdyZWVuIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbiggJGNvbG9yLT5yZ2JbMV0gKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gYmx1ZSgkY29sb3IgPSBudWxsKSB7CgkJaWYgKCEkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgZmlyc3QgYXJndW1lbnQgdG8gYmx1ZSBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9EaW1lbnNpb24oICRjb2xvci0+cmdiWzJdICk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGFscGhhKCRjb2xvciA9IG51bGwpewoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGFscGhhIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCSRjID0gJGNvbG9yLT50b0hTTCgpOwoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbigkY1snYSddKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbHVtYSAoJGNvbG9yID0gbnVsbCkgewoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGx1bWEgbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKExlc3NfUGFyc2VyOjpyb3VuZCggJGNvbG9yLT5sdW1hKCkgKiAkY29sb3ItPmFscGhhICogMTAwKSwgJyUnKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbHVtaW5hbmNlKCAkY29sb3IgPSBudWxsICl7CgkJaWYgKCEkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgZmlyc3QgYXJndW1lbnQgdG8gbHVtaW5hbmNlIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCSRsdW1pbmFuY2UgPQoJCQkoMC4yMTI2ICogJGNvbG9yLT5yZ2JbMF0gLyAyNTUpCgkJICArICgwLjcxNTIgKiAkY29sb3ItPnJnYlsxXSAvIDI1NSkKCQkgICsgKDAuMDcyMiAqICRjb2xvci0+cmdiWzJdIC8gMjU1KTsKCgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKExlc3NfUGFyc2VyOjpyb3VuZCggJGx1bWluYW5jZSAqICRjb2xvci0+YWxwaGEgKiAxMDApLCAnJScpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzYXR1cmF0ZSgkY29sb3IgPSBudWxsLCAkYW1vdW50ID0gbnVsbCl7CgkJLy8gZmlsdGVyOiBzYXR1cmF0ZSgzLjIpOwoJCS8vIHNob3VsZCBiZSBrZXB0IGFzIGlzLCBzbyBjaGVjayBmb3IgY29sb3IKCQlpZiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0RpbWVuc2lvbikgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNhdHVyYXRlIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkYW1vdW50IGluc3RhbmNlb2YgTGVzc19UcmVlX0RpbWVuc2lvbikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBzZWNvbmQgYXJndW1lbnQgdG8gc2F0dXJhdGUgbXVzdCBiZSBhIHBlcmNlbnRhZ2UnIC4gKCRhbW91bnQgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJJGhzbCA9ICRjb2xvci0+dG9IU0woKTsKCgkJJGhzbFsncyddICs9ICRhbW91bnQtPnZhbHVlIC8gMTAwOwoJCSRoc2xbJ3MnXSA9IHNlbGY6OmNsYW1wKCRoc2xbJ3MnXSk7CgoJCXJldHVybiAkdGhpcy0+aHNsYSgkaHNsWydoJ10sICRoc2xbJ3MnXSwgJGhzbFsnbCddLCAkaHNsWydhJ10pOwoJfQoKCS8qKgoJICogQHBhcmFtIExlc3NfVHJlZV9EaW1lbnNpb24gJGFtb3VudAoJICovCglwdWJsaWMgZnVuY3Rpb24gZGVzYXR1cmF0ZSgkY29sb3IgPSBudWxsLCAkYW1vdW50ID0gbnVsbCl7CgkJaWYgKCEkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgZmlyc3QgYXJndW1lbnQgdG8gZGVzYXR1cmF0ZSBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoJCWlmICghJGFtb3VudCBpbnN0YW5jZW9mIExlc3NfVHJlZV9EaW1lbnNpb24pIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGRlc2F0dXJhdGUgbXVzdCBiZSBhIHBlcmNlbnRhZ2UnIC4gKCRhbW91bnQgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJJGhzbCA9ICRjb2xvci0+dG9IU0woKTsKCgkJJGhzbFsncyddIC09ICRhbW91bnQtPnZhbHVlIC8gMTAwOwoJCSRoc2xbJ3MnXSA9IHNlbGY6OmNsYW1wKCRoc2xbJ3MnXSk7CgoJCXJldHVybiAkdGhpcy0+aHNsYSgkaHNsWydoJ10sICRoc2xbJ3MnXSwgJGhzbFsnbCddLCAkaHNsWydhJ10pOwoJfQoKCgoJcHVibGljIGZ1bmN0aW9uIGxpZ2h0ZW4oJGNvbG9yID0gbnVsbCwgJGFtb3VudD1udWxsKXsKCQlpZiAoISRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBsaWdodGVuIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkYW1vdW50IGluc3RhbmNlb2YgTGVzc19UcmVlX0RpbWVuc2lvbikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBzZWNvbmQgYXJndW1lbnQgdG8gbGlnaHRlbiBtdXN0IGJlIGEgcGVyY2VudGFnZScgLiAoJGFtb3VudCBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQkkaHNsID0gJGNvbG9yLT50b0hTTCgpOwoKCQkkaHNsWydsJ10gKz0gJGFtb3VudC0+dmFsdWUgLyAxMDA7CgkJJGhzbFsnbCddID0gc2VsZjo6Y2xhbXAoJGhzbFsnbCddKTsKCgkJcmV0dXJuICR0aGlzLT5oc2xhKCRoc2xbJ2gnXSwgJGhzbFsncyddLCAkaHNsWydsJ10sICRoc2xbJ2EnXSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGRhcmtlbigkY29sb3IgPSBudWxsLCAkYW1vdW50ID0gbnVsbCl7CgkJaWYgKCEkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgZmlyc3QgYXJndW1lbnQgdG8gZGFya2VuIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkYW1vdW50IGluc3RhbmNlb2YgTGVzc19UcmVlX0RpbWVuc2lvbikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBzZWNvbmQgYXJndW1lbnQgdG8gZGFya2VuIG11c3QgYmUgYSBwZXJjZW50YWdlJyAuICgkYW1vdW50IGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCSRoc2wgPSAkY29sb3ItPnRvSFNMKCk7CgkJJGhzbFsnbCddIC09ICRhbW91bnQtPnZhbHVlIC8gMTAwOwoJCSRoc2xbJ2wnXSA9IHNlbGY6OmNsYW1wKCRoc2xbJ2wnXSk7CgoJCXJldHVybiAkdGhpcy0+aHNsYSgkaHNsWydoJ10sICRoc2xbJ3MnXSwgJGhzbFsnbCddLCAkaHNsWydhJ10pOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBmYWRlaW4oJGNvbG9yID0gbnVsbCwgJGFtb3VudCA9IG51bGwpewoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGZhZGVpbiBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoJCWlmICghJGFtb3VudCBpbnN0YW5jZW9mIExlc3NfVHJlZV9EaW1lbnNpb24pIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGZhZGVpbiBtdXN0IGJlIGEgcGVyY2VudGFnZScgLiAoJGFtb3VudCBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQkkaHNsID0gJGNvbG9yLT50b0hTTCgpOwoJCSRoc2xbJ2EnXSArPSAkYW1vdW50LT52YWx1ZSAvIDEwMDsKCQkkaHNsWydhJ10gPSBzZWxmOjpjbGFtcCgkaHNsWydhJ10pOwoJCXJldHVybiAkdGhpcy0+aHNsYSgkaHNsWydoJ10sICRoc2xbJ3MnXSwgJGhzbFsnbCddLCAkaHNsWydhJ10pOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBmYWRlb3V0KCRjb2xvciA9IG51bGwsICRhbW91bnQgPSBudWxsKXsKCQlpZiAoISRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBmYWRlb3V0IG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkYW1vdW50IGluc3RhbmNlb2YgTGVzc19UcmVlX0RpbWVuc2lvbikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBzZWNvbmQgYXJndW1lbnQgdG8gZmFkZW91dCBtdXN0IGJlIGEgcGVyY2VudGFnZScgLiAoJGFtb3VudCBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQkkaHNsID0gJGNvbG9yLT50b0hTTCgpOwoJCSRoc2xbJ2EnXSAtPSAkYW1vdW50LT52YWx1ZSAvIDEwMDsKCQkkaHNsWydhJ10gPSBzZWxmOjpjbGFtcCgkaHNsWydhJ10pOwoJCXJldHVybiAkdGhpcy0+aHNsYSgkaHNsWydoJ10sICRoc2xbJ3MnXSwgJGhzbFsnbCddLCAkaHNsWydhJ10pOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBmYWRlKCRjb2xvciA9IG51bGwsICRhbW91bnQgPSBudWxsKXsKCQlpZiAoISRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBmYWRlIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkYW1vdW50IGluc3RhbmNlb2YgTGVzc19UcmVlX0RpbWVuc2lvbikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBzZWNvbmQgYXJndW1lbnQgdG8gZmFkZSBtdXN0IGJlIGEgcGVyY2VudGFnZScgLiAoJGFtb3VudCBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQkkaHNsID0gJGNvbG9yLT50b0hTTCgpOwoKCQkkaHNsWydhJ10gPSAkYW1vdW50LT52YWx1ZSAvIDEwMDsKCQkkaHNsWydhJ10gPSBzZWxmOjpjbGFtcCgkaHNsWydhJ10pOwoJCXJldHVybiAkdGhpcy0+aHNsYSgkaHNsWydoJ10sICRoc2xbJ3MnXSwgJGhzbFsnbCddLCAkaHNsWydhJ10pOwoJfQoKCgoJcHVibGljIGZ1bmN0aW9uIHNwaW4oJGNvbG9yID0gbnVsbCwgJGFtb3VudCA9IG51bGwpewoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNwaW4gbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCQlpZiAoISRhbW91bnQgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGltZW5zaW9uKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIHNlY29uZCBhcmd1bWVudCB0byBzcGluIG11c3QgYmUgYSBudW1iZXInIC4gKCRhbW91bnQgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJJGhzbCA9ICRjb2xvci0+dG9IU0woKTsKCQkkaHVlID0gZm1vZCgkaHNsWydoJ10gKyAkYW1vdW50LT52YWx1ZSwgMzYwKTsKCgkJJGhzbFsnaCddID0gJGh1ZSA8IDAgPyAzNjAgKyAkaHVlIDogJGh1ZTsKCgkJcmV0dXJuICR0aGlzLT5oc2xhKCRoc2xbJ2gnXSwgJGhzbFsncyddLCAkaHNsWydsJ10sICRoc2xbJ2EnXSk7Cgl9CgoJLy8KCS8vIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IEhhbXB0b24gQ2F0bGluLCBOYXRoYW4gV2VpemVuYmF1bSwgYW5kIENocmlzIEVwcHN0ZWluCgkvLyBodHRwOi8vc2Fzcy1sYW5nLmNvbQoJLy8KCgkvKioKCSAqIEBwYXJhbSBMZXNzX1RyZWVfQ29sb3IgJGNvbG9yMQoJICovCglwdWJsaWMgZnVuY3Rpb24gbWl4KCRjb2xvcjEgPSBudWxsLCAkY29sb3IyID0gbnVsbCwgJHdlaWdodCA9IG51bGwpewoJCWlmICghJGNvbG9yMSBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBtaXggbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IxIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkY29sb3IyIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIHNlY29uZCBhcmd1bWVudCB0byBtaXggbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IyIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkd2VpZ2h0KSB7CgkJCSR3ZWlnaHQgPSBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbignNTAnLCAnJScpOwoJCX0KCQlpZiAoISR3ZWlnaHQgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGltZW5zaW9uKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIHRoaXJkIGFyZ3VtZW50IHRvIGNvbnRyYXN0IG11c3QgYmUgYSBwZXJjZW50YWdlJyAuICgkd2VpZ2h0IGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCSRwID0gJHdlaWdodC0+dmFsdWUgLyAxMDAuMDsKCQkkdyA9ICRwICogMiAtIDE7CgkJJGhzbDEgPSAkY29sb3IxLT50b0hTTCgpOwoJCSRoc2wyID0gJGNvbG9yMi0+dG9IU0woKTsKCQkkYSA9ICRoc2wxWydhJ10gLSAkaHNsMlsnYSddOwoKCQkkdzEgPSAoKCgoJHcgKiAkYSkgPT0gLTEpID8gJHcgOiAoJHcgKyAkYSkgLyAoMSArICR3ICogJGEpKSArIDEpIC8gMjsKCQkkdzIgPSAxIC0gJHcxOwoKCQkkcmdiID0gYXJyYXkoJGNvbG9yMS0+cmdiWzBdICogJHcxICsgJGNvbG9yMi0+cmdiWzBdICogJHcyLAoJCQkJCSAkY29sb3IxLT5yZ2JbMV0gKiAkdzEgKyAkY29sb3IyLT5yZ2JbMV0gKiAkdzIsCgkJCQkJICRjb2xvcjEtPnJnYlsyXSAqICR3MSArICRjb2xvcjItPnJnYlsyXSAqICR3Mik7CgoJCSRhbHBoYSA9ICRjb2xvcjEtPmFscGhhICogJHAgKyAkY29sb3IyLT5hbHBoYSAqICgxIC0gJHApOwoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9Db2xvcigkcmdiLCAkYWxwaGEpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBncmV5c2NhbGUoJGNvbG9yKXsKCQlyZXR1cm4gJHRoaXMtPmRlc2F0dXJhdGUoJGNvbG9yLCBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbigxMDAsJyUnKSk7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBjb250cmFzdCggJGNvbG9yLCAkZGFyayA9IG51bGwsICRsaWdodCA9IG51bGwsICR0aHJlc2hvbGQgPSBudWxsKXsKCQkvLyBmaWx0ZXI6IGNvbnRyYXN0KDMuMik7CgkJLy8gc2hvdWxkIGJlIGtlcHQgYXMgaXMsIHNvIGNoZWNrIGZvciBjb2xvcgoJCWlmICghJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXJldHVybiBudWxsOwoJCX0KCQlpZiggISRsaWdodCApewoJCQkkbGlnaHQgPSAkdGhpcy0+cmdiYSgyNTUsIDI1NSwgMjU1LCAxLjApOwoJCX0KCQlpZiggISRkYXJrICl7CgkJCSRkYXJrID0gJHRoaXMtPnJnYmEoMCwgMCwgMCwgMS4wKTsKCQl9CgoJCWlmICghJGRhcmsgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGNvbnRyYXN0IG11c3QgYmUgYSBjb2xvcicgLiAoJGRhcmsgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCQlpZiAoISRsaWdodCBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSB0aGlyZCBhcmd1bWVudCB0byBjb250cmFzdCBtdXN0IGJlIGEgY29sb3InIC4gKCRsaWdodCBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQkvL0ZpZ3VyZSBvdXQgd2hpY2ggaXMgYWN0dWFsbHkgbGlnaHQgYW5kIGRhcmshCgkJaWYoICRkYXJrLT5sdW1hKCkgPiAkbGlnaHQtPmx1bWEoKSApewoJCQkkdCA9ICRsaWdodDsKCQkJJGxpZ2h0ID0gJGRhcms7CgkJCSRkYXJrID0gJHQ7CgkJfQoJCWlmKCAhJHRocmVzaG9sZCApewoJCQkkdGhyZXNob2xkID0gMC40MzsKCQl9IGVsc2UgewoJCQkkdGhyZXNob2xkID0gTGVzc19GdW5jdGlvbnM6Om51bWJlcigkdGhyZXNob2xkKTsKCQl9CgoJCWlmKCAkY29sb3ItPmx1bWEoKSA8ICR0aHJlc2hvbGQgKXsKCQkJcmV0dXJuICRsaWdodDsKCQl9IGVsc2UgewoJCQlyZXR1cm4gJGRhcms7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBlICgkc3RyKXsKCQlpZiggaXNfc3RyaW5nKCRzdHIpICl7CgkJCXJldHVybiBuZXcgTGVzc19UcmVlX0Fub255bW91cygkc3RyKTsKCQl9CgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfQW5vbnltb3VzKCRzdHIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfSmF2YVNjcmlwdCA/ICRzdHItPmV4cHJlc3Npb24gOiAkc3RyLT52YWx1ZSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGVzY2FwZSAoJHN0cil7CgoJCSRyZXZlcnQgPSBhcnJheSgnJTIxJz0+JyEnLCAnJTJBJz0+JyonLCAnJTI3Jz0+IiciLCclM0YnPT4nPycsJyUyNic9PicmJywnJTJDJz0+JywnLCclMkYnPT4nLycsJyU0MCc9PidAJywnJTJCJz0+JysnLCclMjQnPT4nJCcpOwoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9Bbm9ueW1vdXMoc3RydHIocmF3dXJsZW5jb2RlKCRzdHItPnZhbHVlKSwgJHJldmVydCkpOwoJfQoKCgkvKioKCSAqIHRvZG86IFRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHNvbWUgYWRkaXRpb25hbCB3b3JrIHRvIG1ha2UgaXQgd29yayB0aGUgc2FtZSBhcyBsZXNzLmpzCgkgKgoJICovCglwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZSggJHN0cmluZywgJHBhdHRlcm4sICRyZXBsYWNlbWVudCwgJGZsYWdzID0gbnVsbCApewoJCSRyZXN1bHQgPSAkc3RyaW5nLT52YWx1ZTsKCgkJJGV4cHIgPSAnLycuc3RyX3JlcGxhY2UoJy8nLCdcXC8nLCRwYXR0ZXJuLT52YWx1ZSkuJy8nOwoJCWlmKCAkZmxhZ3MgJiYgJGZsYWdzLT52YWx1ZSl7CgkJCSRleHByIC49IHNlbGY6OnJlcGxhY2VfZmxhZ3MoJGZsYWdzLT52YWx1ZSk7CgkJfQoKCQkkcmVzdWx0ID0gcHJlZ19yZXBsYWNlKCRleHByLCRyZXBsYWNlbWVudC0+dmFsdWUsJHJlc3VsdCk7CgoKCQlpZiggcHJvcGVydHlfZXhpc3RzKCRzdHJpbmcsJ3F1b3RlJykgKXsKCQkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfUXVvdGVkKCAkc3RyaW5nLT5xdW90ZSwgJHJlc3VsdCwgJHN0cmluZy0+ZXNjYXBlZCk7CgkJfQoJCXJldHVybiBuZXcgTGVzc19UcmVlX1F1b3RlZCggJycsICRyZXN1bHQgKTsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlcGxhY2VfZmxhZ3MoJGZsYWdzKXsKCQkkZmxhZ3MgPSBzdHJfc3BsaXQoJGZsYWdzLDEpOwoJCSRuZXdfZmxhZ3MgPSAnJzsKCgkJZm9yZWFjaCgkZmxhZ3MgYXMgJGZsYWcpewoJCQlzd2l0Y2goJGZsYWcpewoJCQkJY2FzZSAnZSc6CgkJCQljYXNlICdnJzoKCQkJCWJyZWFrOwoKCQkJCWRlZmF1bHQ6CgkJCQkkbmV3X2ZsYWdzIC49ICRmbGFnOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgoJCXJldHVybiAkbmV3X2ZsYWdzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBfcGVyY2VudCgpewoJCSRzdHJpbmcgPSBmdW5jX2dldF9hcmcoMCk7CgoJCSRhcmdzID0gZnVuY19nZXRfYXJncygpOwoJCWFycmF5X3NoaWZ0KCRhcmdzKTsKCQkkcmVzdWx0ID0gJHN0cmluZy0+dmFsdWU7CgoJCWZvcmVhY2goJGFyZ3MgYXMgJGFyZyl7CgkJCWlmKCBwcmVnX21hdGNoKCcvJVtzZGFdL2knLCRyZXN1bHQsICR0b2tlbikgKXsKCQkJCSR0b2tlbiA9ICR0b2tlblswXTsKCQkJCSR2YWx1ZSA9IHN0cmlzdHIoJHRva2VuLCAncycpID8gJGFyZy0+dmFsdWUgOiAkYXJnLT50b0NTUygpOwoJCQkJJHZhbHVlID0gcHJlZ19tYXRjaCgnL1tBLVpdJC8nLCAkdG9rZW4pID8gdXJsZW5jb2RlKCR2YWx1ZSkgOiAkdmFsdWU7CgkJCQkkcmVzdWx0ID0gcHJlZ19yZXBsYWNlKCcvJVtzZGFdL2knLCR2YWx1ZSwgJHJlc3VsdCwgMSk7CgkJCX0KCQl9CgkJJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCclJScsICclJywgJHJlc3VsdCk7CgoJCXJldHVybiBuZXcgTGVzc19UcmVlX1F1b3RlZCggJHN0cmluZy0+cXVvdGUgLCAkcmVzdWx0LCAkc3RyaW5nLT5lc2NhcGVkKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdW5pdCggJHZhbCwgJHVuaXQgPSBudWxsKSB7CgkJaWYoICEoJHZhbCBpbnN0YW5jZW9mIExlc3NfVHJlZV9EaW1lbnNpb24pICl7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHVuaXQgbXVzdCBiZSBhIG51bWJlcicgLiAoJHZhbCBpbnN0YW5jZW9mIExlc3NfVHJlZV9PcGVyYXRpb24gPyAnLiBIYXZlIHlvdSBmb3Jnb3R0ZW4gcGFyZW50aGVzaXM/JyA6ICcuJykgKTsKCQl9CgoJCWlmKCAkdW5pdCApewoJCQlpZiggJHVuaXQgaW5zdGFuY2VvZiBMZXNzX1RyZWVfS2V5d29yZCApewoJCQkJJHVuaXQgPSAkdW5pdC0+dmFsdWU7CgkJCX0gZWxzZSB7CgkJCQkkdW5pdCA9ICR1bml0LT50b0NTUygpOwoJCQl9CgkJfSBlbHNlIHsKCQkJJHVuaXQgPSAiIjsKCQl9CgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKCR2YWwtPnZhbHVlLCAkdW5pdCApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb252ZXJ0KCR2YWwsICR1bml0KXsKCQlyZXR1cm4gJHZhbC0+Y29udmVydFRvKCR1bml0LT52YWx1ZSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJvdW5kKCRuLCAkZiA9IGZhbHNlKSB7CgoJCSRmcmFjdGlvbiA9IDA7CgkJaWYoICRmICE9PSBmYWxzZSApewoJCQkkZnJhY3Rpb24gPSAkZi0+dmFsdWU7CgkJfQoKCQlyZXR1cm4gJHRoaXMtPl9tYXRoKCdMZXNzX1BhcnNlcjo6cm91bmQnLG51bGwsICRuLCAkZnJhY3Rpb24pOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwaSgpewoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbihNX1BJKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbW9kKCRhLCAkYikgewoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbiggJGEtPnZhbHVlICUgJGItPnZhbHVlLCAkYS0+dW5pdCk7Cgl9CgoKCglwdWJsaWMgZnVuY3Rpb24gcG93KCR4LCAkeSkgewoJCWlmKCBpc19udW1lcmljKCR4KSAmJiBpc19udW1lcmljKCR5KSApewoJCQkkeCA9IG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKCR4KTsKCQkJJHkgPSBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbigkeSk7CgkJfWVsc2VpZiggISgkeCBpbnN0YW5jZW9mIExlc3NfVHJlZV9EaW1lbnNpb24pIHx8ICEoJHkgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGltZW5zaW9uKSApewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ0FyZ3VtZW50cyBtdXN0IGJlIG51bWJlcnMnKTsKCQl9CgoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbiggcG93KCR4LT52YWx1ZSwgJHktPnZhbHVlKSwgJHgtPnVuaXQgKTsKCX0KCgkvLyB2YXIgbWF0aEZ1bmN0aW9ucyA9IFt7bmFtZToiY2UgLi4uCglwdWJsaWMgZnVuY3Rpb24gY2VpbCggJG4gKXsJCXJldHVybiAkdGhpcy0+X21hdGgoJ2NlaWwnLCBudWxsLCAkbik7IH0KCXB1YmxpYyBmdW5jdGlvbiBmbG9vciggJG4gKXsJcmV0dXJuICR0aGlzLT5fbWF0aCgnZmxvb3InLCBudWxsLCAkbik7IH0KCXB1YmxpYyBmdW5jdGlvbiBzcXJ0KCAkbiApewkJcmV0dXJuICR0aGlzLT5fbWF0aCgnc3FydCcsIG51bGwsICRuKTsgfQoJcHVibGljIGZ1bmN0aW9uIGFicyggJG4gKXsJCXJldHVybiAkdGhpcy0+X21hdGgoJ2FicycsIG51bGwsICRuKTsgfQoKCXB1YmxpYyBmdW5jdGlvbiB0YW4oICRuICl7CQlyZXR1cm4gJHRoaXMtPl9tYXRoKCd0YW4nLCAnJywgJG4pOwl9CglwdWJsaWMgZnVuY3Rpb24gc2luKCAkbiApewkJcmV0dXJuICR0aGlzLT5fbWF0aCgnc2luJywgJycsICRuKTsJfQoJcHVibGljIGZ1bmN0aW9uIGNvcyggJG4gKXsJCXJldHVybiAkdGhpcy0+X21hdGgoJ2NvcycsICcnLCAkbik7CX0KCglwdWJsaWMgZnVuY3Rpb24gYXRhbiggJG4gKXsJCXJldHVybiAkdGhpcy0+X21hdGgoJ2F0YW4nLCAncmFkJywgJG4pOwl9CglwdWJsaWMgZnVuY3Rpb24gYXNpbiggJG4gKXsJCXJldHVybiAkdGhpcy0+X21hdGgoJ2FzaW4nLCAncmFkJywgJG4pOwl9CglwdWJsaWMgZnVuY3Rpb24gYWNvcyggJG4gKXsJCXJldHVybiAkdGhpcy0+X21hdGgoJ2Fjb3MnLCAncmFkJywgJG4pOwl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBfbWF0aCgpIHsKCQkkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCQkkZm4gPSBhcnJheV9zaGlmdCgkYXJncyk7CgkJJHVuaXQgPSBhcnJheV9zaGlmdCgkYXJncyk7CgoJCWlmICgkYXJnc1swXSBpbnN0YW5jZW9mIExlc3NfVHJlZV9EaW1lbnNpb24pIHsKCgkJCWlmKCAkdW5pdCA9PT0gbnVsbCApewoJCQkJJHVuaXQgPSAkYXJnc1swXS0+dW5pdDsKCQkJfWVsc2V7CgkJCQkkYXJnc1swXSA9ICRhcmdzWzBdLT51bmlmeSgpOwoJCQl9CgkJCSRhcmdzWzBdID0gKGZsb2F0KSRhcmdzWzBdLT52YWx1ZTsKCQkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKCBjYWxsX3VzZXJfZnVuY19hcnJheSgkZm4sICRhcmdzKSwgJHVuaXQpOwoJCX0gZWxzZSBpZiAoaXNfbnVtZXJpYygkYXJnc1swXSkpIHsKCQkJcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCRmbiwkYXJncyk7CgkJfSBlbHNlIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJtYXRoIGZ1bmN0aW9ucyB0YWtlIG51bWJlcnMgYXMgcGFyYW1ldGVycyIpOwoJCX0KCX0KCgkvKioKCSAqIEBwYXJhbSBib29sZWFuICRpc01pbgoJICovCglwcml2YXRlIGZ1bmN0aW9uIF9taW5tYXgoICRpc01pbiwgJGFyZ3MgKXsKCgkJJGFyZ19jb3VudCA9IGNvdW50KCRhcmdzKTsKCgkJaWYoICRhcmdfY291bnQgPCAxICl7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlciggJ29uZSBvciBtb3JlIGFyZ3VtZW50cyByZXF1aXJlZCcpOwoJCX0KCgkJJGogPSBudWxsOwoJCSR1bml0Q2xvbmUgPSBudWxsOwoJCSR1bml0U3RhdGljID0gbnVsbDsKCgoJCSRvcmRlciA9IGFycmF5KCk7CS8vIGVsZW1zIG9ubHkgY29udGFpbnMgb3JpZ2luYWwgYXJndW1lbnQgdmFsdWVzLgoJCSR2YWx1ZXMgPSBhcnJheSgpOwkvLyBrZXkgaXMgdGhlIHVuaXQudG9TdHJpbmcoKSBmb3IgdW5pZmllZCB0cmVlLkRpbWVuc2lvbiB2YWx1ZXMsCgkJCQkJCQkvLyB2YWx1ZSBpcyB0aGUgaW5kZXggaW50byB0aGUgb3JkZXIgYXJyYXkuCgoKCQlmb3IoICRpID0gMDsgJGkgPCAkYXJnX2NvdW50OyAkaSsrICl7CgkJCSRjdXJyZW50ID0gJGFyZ3NbJGldOwoJCQlpZiggISgkY3VycmVudCBpbnN0YW5jZW9mIExlc3NfVHJlZV9EaW1lbnNpb24pICl7CgkJCQlpZiggaXNfYXJyYXkoJGFyZ3NbJGldLT52YWx1ZSkgKXsKCQkJCQkkYXJnc1tdID0gJGFyZ3NbJGldLT52YWx1ZTsKCQkJCX0KCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQlpZiggJGN1cnJlbnQtPnVuaXQtPnRvU3RyaW5nKCkgPT09ICcnICYmICEkdW5pdENsb25lICl7CgkJCQkkdGVtcCA9IG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKCRjdXJyZW50LT52YWx1ZSwgJHVuaXRDbG9uZSk7CgkJCQkkY3VycmVudFVuaWZpZWQgPSAkdGVtcC0+dW5pZnkoKTsKCQkJfWVsc2V7CgkJCQkkY3VycmVudFVuaWZpZWQgPSAkY3VycmVudC0+dW5pZnkoKTsKCQkJfQoKCQkJaWYoICRjdXJyZW50VW5pZmllZC0+dW5pdC0+dG9TdHJpbmcoKSA9PT0gIiIgJiYgISR1bml0U3RhdGljICl7CgkJCQkkdW5pdCA9ICR1bml0U3RhdGljOwoJCQl9ZWxzZXsKCQkJCSR1bml0ID0gJGN1cnJlbnRVbmlmaWVkLT51bml0LT50b1N0cmluZygpOwoJCQl9CgoJCQlpZiggJHVuaXQgIT09ICcnICYmICEkdW5pdFN0YXRpYyB8fCAkdW5pdCAhPT0gJycgJiYgJG9yZGVyWzBdLT51bmlmeSgpLT51bml0LT50b1N0cmluZygpID09PSAiIiApewoJCQkJJHVuaXRTdGF0aWMgPSAkdW5pdDsKCQkJfQoKCQkJaWYoICR1bml0ICE9ICcnICYmICEkdW5pdENsb25lICl7CgkJCQkkdW5pdENsb25lID0gJGN1cnJlbnQtPnVuaXQtPnRvU3RyaW5nKCk7CgkJCX0KCgkJCWlmKCBpc3NldCgkdmFsdWVzWycnXSkgJiYgJHVuaXQgIT09ICcnICYmICR1bml0ID09PSAkdW5pdFN0YXRpYyApewoJCQkJJGogPSAkdmFsdWVzWycnXTsKCQkJfWVsc2VpZiggaXNzZXQoJHZhbHVlc1skdW5pdF0pICl7CgkJCQkkaiA9ICR2YWx1ZXNbJHVuaXRdOwoJCQl9ZWxzZXsKCgkJCQlpZiggJHVuaXRTdGF0aWMgJiYgJHVuaXQgIT09ICR1bml0U3RhdGljICl7CgkJCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCAnaW5jb21wYXRpYmxlIHR5cGVzJyk7CgkJCQl9CgkJCQkkdmFsdWVzWyR1bml0XSA9IGNvdW50KCRvcmRlcik7CgkJCQkkb3JkZXJbXSA9ICRjdXJyZW50OwoJCQkJY29udGludWU7CgkJCX0KCgoJCQlpZiggJG9yZGVyWyRqXS0+dW5pdC0+dG9TdHJpbmcoKSA9PT0gIiIgJiYgJHVuaXRDbG9uZSApewoJCQkJJHRlbXAgPSBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbiggJG9yZGVyWyRqXS0+dmFsdWUsICR1bml0Q2xvbmUpOwoJCQkJJHJlZmVyZW5jZVVuaWZpZWQgPSAkdGVtcC0+dW5pZnkoKTsKCQkJfWVsc2V7CgkJCQkkcmVmZXJlbmNlVW5pZmllZCA9ICRvcmRlclskal0tPnVuaWZ5KCk7CgkJCX0KCQkJaWYoICgkaXNNaW4gJiYgJGN1cnJlbnRVbmlmaWVkLT52YWx1ZSA8ICRyZWZlcmVuY2VVbmlmaWVkLT52YWx1ZSkgfHwgKCEkaXNNaW4gJiYgJGN1cnJlbnRVbmlmaWVkLT52YWx1ZSA+ICRyZWZlcmVuY2VVbmlmaWVkLT52YWx1ZSkgKXsKCQkJCSRvcmRlclskal0gPSAkY3VycmVudDsKCQkJfQoJCX0KCgkJaWYoIGNvdW50KCRvcmRlcikgPT0gMSApewoJCQlyZXR1cm4gJG9yZGVyWzBdOwoJCX0KCQkkYXJncyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkb3JkZXIgYXMgJGEpewoJCQkkYXJnc1tdID0gJGEtPnRvQ1NTKCR0aGlzLT5lbnYpOwoJCX0KCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9Bbm9ueW1vdXMoICgkaXNNaW4/J21pbignOidtYXgoJykgLiBpbXBsb2RlKExlc3NfRW52aXJvbm1lbnQ6OiRfb3V0cHV0TWFwWycsJ10sJGFyZ3MpLicpJyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG1pbigpewoJCSRhcmdzID0gZnVuY19nZXRfYXJncygpOwoJCXJldHVybiAkdGhpcy0+X21pbm1heCggdHJ1ZSwgJGFyZ3MgKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbWF4KCl7CgkJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CgkJcmV0dXJuICR0aGlzLT5fbWlubWF4KCBmYWxzZSwgJGFyZ3MgKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0dW5pdCgkbil7CgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfQW5vbnltb3VzKCRuLT51bml0KTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gYXJnYigkY29sb3IpIHsKCQlpZiAoISRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBhcmdiIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCXJldHVybiBuZXcgTGVzc19UcmVlX0Fub255bW91cygkY29sb3ItPnRvQVJHQigpKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcGVyY2VudGFnZSgkbikgewoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbigkbi0+dmFsdWUgKiAxMDAsICclJyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNvbG9yKCRuKSB7CgoJCWlmKCAkbiBpbnN0YW5jZW9mIExlc3NfVHJlZV9RdW90ZWQgKXsKCQkJJGNvbG9yQ2FuZGlkYXRlID0gJG4tPnZhbHVlOwoJCQkkcmV0dXJuQ29sb3IgPSBMZXNzX1RyZWVfQ29sb3I6OmZyb21LZXl3b3JkKCRjb2xvckNhbmRpZGF0ZSk7CgkJCWlmKCAkcmV0dXJuQ29sb3IgKXsKCQkJCXJldHVybiAkcmV0dXJuQ29sb3I7CgkJCX0KCQkJaWYoIHByZWdfbWF0Y2goJy9eIyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkvJywkY29sb3JDYW5kaWRhdGUpICl7CgkJCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9Db2xvcihzdWJzdHIoJGNvbG9yQ2FuZGlkYXRlLCAxKSk7CgkJCX0KCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJhcmd1bWVudCBtdXN0IGJlIGEgY29sb3Iga2V5d29yZCBvciAzLzYgZGlnaXQgaGV4IGUuZy4gI0ZGRiIpOwoJCX0gZWxzZSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcigiYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOwoJCX0KCX0KCgoJcHVibGljIGZ1bmN0aW9uIGlzY29sb3IoJG4pIHsKCQlyZXR1cm4gJHRoaXMtPl9pc2EoJG4sICdMZXNzX1RyZWVfQ29sb3InKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNudW1iZXIoJG4pIHsKCQlyZXR1cm4gJHRoaXMtPl9pc2EoJG4sICdMZXNzX1RyZWVfRGltZW5zaW9uJyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzc3RyaW5nKCRuKSB7CgkJcmV0dXJuICR0aGlzLT5faXNhKCRuLCAnTGVzc19UcmVlX1F1b3RlZCcpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc2tleXdvcmQoJG4pIHsKCQlyZXR1cm4gJHRoaXMtPl9pc2EoJG4sICdMZXNzX1RyZWVfS2V5d29yZCcpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc3VybCgkbikgewoJCXJldHVybiAkdGhpcy0+X2lzYSgkbiwgJ0xlc3NfVHJlZV9VcmwnKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNwaXhlbCgkbikgewoJCXJldHVybiAkdGhpcy0+aXN1bml0KCRuLCAncHgnKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNwZXJjZW50YWdlKCRuKSB7CgkJcmV0dXJuICR0aGlzLT5pc3VuaXQoJG4sICclJyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzZW0oJG4pIHsKCQlyZXR1cm4gJHRoaXMtPmlzdW5pdCgkbiwgJ2VtJyk7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gc3RyaW5nICR1bml0CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc3VuaXQoICRuLCAkdW5pdCApewoJCXJldHVybiAoJG4gaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGltZW5zaW9uKSAmJiAkbi0+dW5pdC0+aXMoICggcHJvcGVydHlfZXhpc3RzKCR1bml0LCd2YWx1ZScpID8gJHVuaXQtPnZhbHVlIDogJHVuaXQpICkgPyBuZXcgTGVzc19UcmVlX0tleXdvcmQoJ3RydWUnKSA6IG5ldyBMZXNzX1RyZWVfS2V5d29yZCgnZmFsc2UnKTsKCX0KCgkvKioKCSAqIEBwYXJhbSBzdHJpbmcgJHR5cGUKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBfaXNhKCRuLCAkdHlwZSkgewoJCXJldHVybiBpc19hKCRuLCAkdHlwZSkgPyBuZXcgTGVzc19UcmVlX0tleXdvcmQoJ3RydWUnKSA6IG5ldyBMZXNzX1RyZWVfS2V5d29yZCgnZmFsc2UnKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdGludCgkY29sb3IsICRhbW91bnQpIHsKCQlyZXR1cm4gJHRoaXMtPm1peCggJHRoaXMtPnJnYigyNTUsMjU1LDI1NSksICRjb2xvciwgJGFtb3VudCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNoYWRlKCRjb2xvciwgJGFtb3VudCkgewoJCXJldHVybiAkdGhpcy0+bWl4KCR0aGlzLT5yZ2IoMCwgMCwgMCksICRjb2xvciwgJGFtb3VudCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGV4dHJhY3QoJHZhbHVlcywgJGluZGV4ICl7CgkJJGluZGV4ID0gKGludCkkaW5kZXgtPnZhbHVlIC0gMTsgLy8gKDEtYmFzZWQgaW5kZXgpCgkJLy8gaGFuZGxlIG5vbi1hcnJheSB2YWx1ZXMgYXMgYW4gYXJyYXkgb2YgbGVuZ3RoIDEKCQkvLyByZXR1cm4gJ3VuZGVmaW5lZCcgaWYgaW5kZXggaXMgaW52YWxpZAoJCWlmKCBwcm9wZXJ0eV9leGlzdHMoJHZhbHVlcywndmFsdWUnKSAmJiBpc19hcnJheSgkdmFsdWVzLT52YWx1ZSkgKXsKCQkJaWYoIGlzc2V0KCR2YWx1ZXMtPnZhbHVlWyRpbmRleF0pICl7CgkJCQlyZXR1cm4gJHZhbHVlcy0+dmFsdWVbJGluZGV4XTsKCQkJfQoJCQlyZXR1cm4gbnVsbDsKCgkJfWVsc2VpZiggKGludCkkaW5kZXggPT09IDAgKXsKCQkJcmV0dXJuICR2YWx1ZXM7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbGVuZ3RoKCR2YWx1ZXMpewoJCSRuID0gKHByb3BlcnR5X2V4aXN0cygkdmFsdWVzLCd2YWx1ZScpICYmIGlzX2FycmF5KCR2YWx1ZXMtPnZhbHVlKSkgPyBjb3VudCgkdmFsdWVzLT52YWx1ZSkgOiAxOwoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RpbWVuc2lvbigkbik7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGRhdGF1cmkoJG1pbWV0eXBlTm9kZSwgJGZpbGVQYXRoTm9kZSA9IG51bGwgKSB7CgoJCSRmaWxlUGF0aCA9ICggJGZpbGVQYXRoTm9kZSA/ICRmaWxlUGF0aE5vZGUtPnZhbHVlIDogbnVsbCApOwoJCSRtaW1ldHlwZSA9ICRtaW1ldHlwZU5vZGUtPnZhbHVlOwoKCQkkYXJncyA9IDI7CgkJaWYoICEkZmlsZVBhdGggKXsKCQkJJGZpbGVQYXRoID0gJG1pbWV0eXBlOwoJCQkkYXJncyA9IDE7CgkJfQoKCQkkZmlsZVBhdGggPSBzdHJfcmVwbGFjZSgnXFwnLCcvJywkZmlsZVBhdGgpOwoJCWlmKCBMZXNzX0Vudmlyb25tZW50Ojppc1BhdGhSZWxhdGl2ZSgkZmlsZVBhdGgpICl7CgoJCQlpZiggTGVzc19QYXJzZXI6OiRvcHRpb25zWydyZWxhdGl2ZVVybHMnXSApewoJCQkJJHRlbXAgPSAkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydjdXJyZW50RGlyZWN0b3J5J107CgkJCX0gZWxzZSB7CgkJCQkkdGVtcCA9ICR0aGlzLT5jdXJyZW50RmlsZUluZm9bJ2VudHJ5UGF0aCddOwoJCQl9CgoJCQlpZiggIWVtcHR5KCR0ZW1wKSApewoJCQkJJGZpbGVQYXRoID0gTGVzc19FbnZpcm9ubWVudDo6bm9ybWFsaXplUGF0aChydHJpbSgkdGVtcCwnLycpLicvJy4kZmlsZVBhdGgpOwoJCQl9CgoJCX0KCgoJCS8vIGRldGVjdCB0aGUgbWltZXR5cGUgaWYgbm90IGdpdmVuCgkJaWYoICRhcmdzIDwgMiApewoKCQkJLyogaW5jb21wbGV0ZQoJCQkkbWltZSA9IHJlcXVpcmUoJ21pbWUnKTsKCQkJbWltZXR5cGUgPSBtaW1lLmxvb2t1cChwYXRoKTsKCgkJCS8vIHVzZSBiYXNlIDY0IHVubGVzcyBpdCdzIGFuIEFTQ0lJIG9yIFVURi04IGZvcm1hdAoJCQl2YXIgY2hhcnNldCA9IG1pbWUuY2hhcnNldHMubG9va3VwKG1pbWV0eXBlKTsKCQkJdXNlQmFzZTY0ID0gWydVUy1BU0NJSScsICdVVEYtOCddLmluZGV4T2YoY2hhcnNldCkgPCAwOwoJCQlpZiAodXNlQmFzZTY0KSBtaW1ldHlwZSArPSAnO2Jhc2U2NCc7CgkJCSovCgoJCQkkbWltZXR5cGUgPSBMZXNzX01pbWU6Omxvb2t1cCgkZmlsZVBhdGgpOwoKCQkJJGNoYXJzZXQgPSBMZXNzX01pbWU6OmNoYXJzZXRzX2xvb2t1cCgkbWltZXR5cGUpOwoJCQkkdXNlQmFzZTY0ID0gIWluX2FycmF5KCRjaGFyc2V0LGFycmF5KCdVUy1BU0NJSScsICdVVEYtOCcpKTsKCQkJaWYoICR1c2VCYXNlNjQgKXsgJG1pbWV0eXBlIC49ICc7YmFzZTY0JzsgfQoKCQl9ZWxzZXsKCQkJJHVzZUJhc2U2NCA9IHByZWdfbWF0Y2goJy87YmFzZTY0JC8nLCRtaW1ldHlwZSk7CgkJfQoKCgkJaWYoIGZpbGVfZXhpc3RzKCRmaWxlUGF0aCkgKXsKCQkJJGJ1ZiA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZVBhdGgpOwoJCX1lbHNlewoJCQkkYnVmID0gZmFsc2U7CgkJfQoKCgkJLy8gSUU4IGNhbm5vdCBoYW5kbGUgYSBkYXRhLXVyaSBsYXJnZXIgdGhhbiAzMktCLiBJZiB0aGlzIGlzIGV4Y2VlZGVkCgkJLy8gYW5kIHRoZSAtLWllQ29tcGF0IGZsYWcgaXMgZW5hYmxlZCwgcmV0dXJuIGEgbm9ybWFsIHVybCgpIGluc3RlYWQuCgkJJERBVEFfVVJJX01BWF9LQiA9IDMyOwoJCSRmaWxlU2l6ZUluS0IgPSByb3VuZCggc3RybGVuKCRidWYpIC8gMTAyNCApOwoJCWlmKCAkZmlsZVNpemVJbktCID49ICREQVRBX1VSSV9NQVhfS0IgKXsKCQkJJHVybCA9IG5ldyBMZXNzX1RyZWVfVXJsKCAoJGZpbGVQYXRoTm9kZSA/ICRmaWxlUGF0aE5vZGUgOiAkbWltZXR5cGVOb2RlKSwgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyk7CgkJCXJldHVybiAkdXJsLT5jb21waWxlKCR0aGlzKTsKCQl9CgoJCWlmKCAkYnVmICl7CgkJCSRidWYgPSAkdXNlQmFzZTY0ID8gYmFzZTY0X2VuY29kZSgkYnVmKSA6IHJhd3VybGVuY29kZSgkYnVmKTsKCQkJJGZpbGVQYXRoID0gJyJkYXRhOicgLiAkbWltZXR5cGUgLiAnLCcgLiAkYnVmIC4gJyInOwoJCX0KCgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfVXJsKCBuZXcgTGVzc19UcmVlX0Fub255bW91cygkZmlsZVBhdGgpICk7Cgl9CgoJLy9zdmctZ3JhZGllbnQKCXB1YmxpYyBmdW5jdGlvbiBzdmdncmFkaWVudCggJGRpcmVjdGlvbiApewoKCQkkdGhyb3dfbWVzc2FnZSA9ICdzdmctZ3JhZGllbnQgZXhwZWN0cyBkaXJlY3Rpb24sIHN0YXJ0X2NvbG9yIFtzdGFydF9wb3NpdGlvbl0sIFtjb2xvciBwb3NpdGlvbixdLi4uLCBlbmRfY29sb3IgW2VuZF9wb3NpdGlvbl0nOwoJCSRhcmd1bWVudHMgPSBmdW5jX2dldF9hcmdzKCk7CgoJCWlmKCBjb3VudCgkYXJndW1lbnRzKSA8IDMgKXsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCAkdGhyb3dfbWVzc2FnZSApOwoJCX0KCgkJJHN0b3BzID0gYXJyYXlfc2xpY2UoJGFyZ3VtZW50cywxKTsKCQkkZ3JhZGllbnRUeXBlID0gJ2xpbmVhcic7CgkJJHJlY3RhbmdsZURpbWVuc2lvbiA9ICd4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIic7CgkJJHVzZUJhc2U2NCA9IHRydWU7CgkJJGRpcmVjdGlvblZhbHVlID0gJGRpcmVjdGlvbi0+dG9DU1MoKTsKCgoJCXN3aXRjaCggJGRpcmVjdGlvblZhbHVlICl7CgkJCWNhc2UgInRvIGJvdHRvbSI6CgkJCQkkZ3JhZGllbnREaXJlY3Rpb25TdmcgPSAneDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiJzsKCQkJCWJyZWFrOwoJCQljYXNlICJ0byByaWdodCI6CgkJCQkkZ3JhZGllbnREaXJlY3Rpb25TdmcgPSAneDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiJzsKCQkJCWJyZWFrOwoJCQljYXNlICJ0byBib3R0b20gcmlnaHQiOgoJCQkJJGdyYWRpZW50RGlyZWN0aW9uU3ZnID0gJ3gxPSIwJSIgeTE9IjAlIiB4Mj0iMTAwJSIgeTI9IjEwMCUiJzsKCQkJCWJyZWFrOwoJCQljYXNlICJ0byB0b3AgcmlnaHQiOgoJCQkJJGdyYWRpZW50RGlyZWN0aW9uU3ZnID0gJ3gxPSIwJSIgeTE9IjEwMCUiIHgyPSIxMDAlIiB5Mj0iMCUiJzsKCQkJCWJyZWFrOwoJCQljYXNlICJlbGxpcHNlIjoKCQkJY2FzZSAiZWxsaXBzZSBhdCBjZW50ZXIiOgoJCQkJJGdyYWRpZW50VHlwZSA9ICJyYWRpYWwiOwoJCQkJJGdyYWRpZW50RGlyZWN0aW9uU3ZnID0gJ2N4PSI1MCUiIGN5PSI1MCUiIHI9Ijc1JSInOwoJCQkJJHJlY3RhbmdsZURpbWVuc2lvbiA9ICd4PSItNTAiIHk9Ii01MCIgd2lkdGg9IjEwMSIgaGVpZ2h0PSIxMDEiJzsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCAic3ZnLWdyYWRpZW50IGRpcmVjdGlvbiBtdXN0IGJlICd0byBib3R0b20nLCAndG8gcmlnaHQnLCAndG8gYm90dG9tIHJpZ2h0JywgJ3RvIHRvcCByaWdodCcgb3IgJ2VsbGlwc2UgYXQgY2VudGVyJyIgKTsKCQl9CgoJCSRyZXR1cm5lciA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiID8+JyAuCgkJCSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMSAxIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj4nIC4KCQkJJzwnIC4gJGdyYWRpZW50VHlwZSAuICdHcmFkaWVudCBpZD0iZ3JhZGllbnQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAnIC4gJGdyYWRpZW50RGlyZWN0aW9uU3ZnIC4gJz4nOwoKCQlmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkc3RvcHMpOyAkaSsrICl7CgkJCWlmKCBpc19vYmplY3QoJHN0b3BzWyRpXSkgJiYgcHJvcGVydHlfZXhpc3RzKCRzdG9wc1skaV0sJ3ZhbHVlJykgKXsKCQkJCSRjb2xvciA9ICRzdG9wc1skaV0tPnZhbHVlWzBdOwoJCQkJJHBvc2l0aW9uID0gJHN0b3BzWyRpXS0+dmFsdWVbMV07CgkJCX1lbHNlewoJCQkJJGNvbG9yID0gJHN0b3BzWyRpXTsKCQkJCSRwb3NpdGlvbiA9IG51bGw7CgkJCX0KCgkJCWlmKCAhKCRjb2xvciBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgfHwgKCEoKCRpID09PSAwIHx8ICRpKzEgPT09IGNvdW50KCRzdG9wcykpICYmICRwb3NpdGlvbiA9PT0gbnVsbCkgJiYgISgkcG9zaXRpb24gaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGltZW5zaW9uKSkgKXsKCQkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlciggJHRocm93X21lc3NhZ2UgKTsKCQkJfQoJCQlpZiggJHBvc2l0aW9uICl7CgkJCQkkcG9zaXRpb25WYWx1ZSA9ICRwb3NpdGlvbi0+dG9DU1MoKTsKCQkJfWVsc2VpZiggJGkgPT09IDAgKXsKCQkJCSRwb3NpdGlvblZhbHVlID0gJzAlJzsKCQkJfWVsc2V7CgkJCQkkcG9zaXRpb25WYWx1ZSA9ICcxMDAlJzsKCQkJfQoJCQkkYWxwaGEgPSAkY29sb3ItPmFscGhhOwoJCQkkcmV0dXJuZXIgLj0gJzxzdG9wIG9mZnNldD0iJyAuICRwb3NpdGlvblZhbHVlIC4gJyIgc3RvcC1jb2xvcj0iJyAuICRjb2xvci0+dG9SR0IoKSAuICciJyAuICgkYWxwaGEgPCAxID8gJyBzdG9wLW9wYWNpdHk9IicgLiAkYWxwaGEgLiAnIicgOiAnJykgLiAnLz4nOwoJCX0KCgkJJHJldHVybmVyIC49ICc8LycgLiAkZ3JhZGllbnRUeXBlIC4gJ0dyYWRpZW50PjxyZWN0ICcgLiAkcmVjdGFuZ2xlRGltZW5zaW9uIC4gJyBmaWxsPSJ1cmwoI2dyYWRpZW50KSIgLz48L3N2Zz4nOwoKCgkJaWYoICR1c2VCYXNlNjQgKXsKCQkJJHJldHVybmVyID0gIidkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIuYmFzZTY0X2VuY29kZSgkcmV0dXJuZXIpLiInIjsKCQl9ZWxzZXsKCQkJJHJldHVybmVyID0gIidkYXRhOmltYWdlL3N2Zyt4bWwsIi4kcmV0dXJuZXIuIiciOwoJCX0KCgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfVVJMKCBuZXcgTGVzc19UcmVlX0Fub255bW91cyggJHJldHVybmVyICkgKTsKCX0KCgoJLyoqCgkgKiBQaHAgdmVyc2lvbiBvZiBqYXZhc2NyaXB0J3MgYGVuY29kZVVSSUNvbXBvbmVudGAgZnVuY3Rpb24KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyB0byBlbmNvZGUKCSAqIEByZXR1cm4gc3RyaW5nIFRoZSBlbmNvZGVkIHN0cmluZwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudCgkc3RyaW5nKXsKCQkkcmV2ZXJ0ID0gYXJyYXkoJyUyMScgPT4gJyEnLCAnJTJBJyA9PiAnKicsICclMjcnID0+ICInIiwgJyUyOCcgPT4gJygnLCAnJTI5JyA9PiAnKScpOwoJCXJldHVybiBzdHJ0cihyYXd1cmxlbmNvZGUoJHN0cmluZyksICRyZXZlcnQpOwoJfQoKCgkvLyBDb2xvciBCbGVuZGluZwoJLy8gcmVmOiBodHRwOi8vd3d3LnczLm9yZy9UUi9jb21wb3NpdGluZy0xCgoJcHVibGljIGZ1bmN0aW9uIGNvbG9yQmxlbmQoICRtb2RlLCAkY29sb3IxLCAkY29sb3IyICl7CgkJJGFiID0gJGNvbG9yMS0+YWxwaGE7CS8vIGJhY2tkcm9wCgkJJGFzID0gJGNvbG9yMi0+YWxwaGE7CS8vIHNvdXJjZQoJCSRyID0gYXJyYXkoKTsJCQkvLyByZXN1bHQKCgkJJGFyID0gJGFzICsgJGFiICogKDEgLSAkYXMpOwoJCWZvciggJGkgPSAwOyAkaSA8IDM7ICRpKysgKXsKCQkJJGNiID0gJGNvbG9yMS0+cmdiWyRpXSAvIDI1NTsKCQkJJGNzID0gJGNvbG9yMi0+cmdiWyRpXSAvIDI1NTsKCQkJJGNyID0gY2FsbF91c2VyX2Z1bmMoICRtb2RlLCAkY2IsICRjcyApOwoJCQlpZiggJGFyICl7CgkJCQkkY3IgPSAoJGFzICogJGNzICsgJGFiICogKCRjYiAtICRhcyAqICgkY2IgKyAkY3MgLSAkY3IpKSkgLyAkYXI7CgkJCX0KCQkJJHJbJGldID0gJGNyICogMjU1OwoJCX0KCgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfQ29sb3IoJHIsICRhcik7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG11bHRpcGx5KCRjb2xvcjEgPSBudWxsLCAkY29sb3IyID0gbnVsbCApewoJCWlmICghJGNvbG9yMSBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBtdWx0aXBseSBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCQlpZiAoISRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIG11bHRpcGx5IG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yMiBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQlyZXR1cm4gJHRoaXMtPmNvbG9yQmxlbmQoIGFycmF5KCR0aGlzLCdjb2xvckJsZW5kTXVsdGlwbHknKSwgICRjb2xvcjEsICRjb2xvcjIgKTsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIGNvbG9yQmxlbmRNdWx0aXBseSgkY2IsICRjcyl7CgkJcmV0dXJuICRjYiAqICRjczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2NyZWVuKCRjb2xvcjEgPSBudWxsLCAkY29sb3IyID0gbnVsbCApewoJCWlmICghJGNvbG9yMSBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBzY3JlZW4gbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IxIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkY29sb3IyIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIHNlY29uZCBhcmd1bWVudCB0byBzY3JlZW4gbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IyIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCXJldHVybiAkdGhpcy0+Y29sb3JCbGVuZCggYXJyYXkoJHRoaXMsJ2NvbG9yQmxlbmRTY3JlZW4nKSwgICRjb2xvcjEsICRjb2xvcjIgKTsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIGNvbG9yQmxlbmRTY3JlZW4oICRjYiwgJGNzKXsKCQlyZXR1cm4gJGNiICsgJGNzIC0gJGNiICogJGNzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBvdmVybGF5KCRjb2xvcjEgPSBudWxsLCAkY29sb3IyID0gbnVsbCl7CgkJaWYgKCEkY29sb3IxIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIG92ZXJsYXkgbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IxIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgkJaWYgKCEkY29sb3IyIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIHNlY29uZCBhcmd1bWVudCB0byBvdmVybGF5IG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yMiBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQlyZXR1cm4gJHRoaXMtPmNvbG9yQmxlbmQoIGFycmF5KCR0aGlzLCdjb2xvckJsZW5kT3ZlcmxheScpLCAgJGNvbG9yMSwgJGNvbG9yMiApOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gY29sb3JCbGVuZE92ZXJsYXkoJGNiLCAkY3MgKXsKCQkkY2IgKj0gMjsKCQlyZXR1cm4gKCRjYiA8PSAxKQoJCQk/ICR0aGlzLT5jb2xvckJsZW5kTXVsdGlwbHkoJGNiLCAkY3MpCgkJCTogJHRoaXMtPmNvbG9yQmxlbmRTY3JlZW4oJGNiIC0gMSwgJGNzKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc29mdGxpZ2h0KCRjb2xvcjEgPSBudWxsLCAkY29sb3IyID0gbnVsbCl7CgkJaWYgKCEkY29sb3IxIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNvZnRsaWdodCBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCQlpZiAoISRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNvZnRsaWdodCBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJcmV0dXJuICR0aGlzLT5jb2xvckJsZW5kKCBhcnJheSgkdGhpcywnY29sb3JCbGVuZFNvZnRsaWdodCcpLCAgJGNvbG9yMSwgJGNvbG9yMiApOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gY29sb3JCbGVuZFNvZnRsaWdodCgkY2IsICRjcyApewoJCSRkID0gMTsKCQkkZSA9ICRjYjsKCQlpZiggJGNzID4gMC41ICl7CgkJCSRlID0gMTsKCQkJJGQgPSAoJGNiID4gMC4yNSkgPyBzcXJ0KCRjYikKCQkJCTogKCgxNiAqICRjYiAtIDEyKSAqICRjYiArIDQpICogJGNiOwoJCX0KCQlyZXR1cm4gJGNiIC0gKDEgLSAyICogJGNzKSAqICRlICogKCRkIC0gJGNiKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaGFyZGxpZ2h0KCRjb2xvcjEgPSBudWxsLCAkY29sb3IyID0gbnVsbCl7CgkJaWYgKCEkY29sb3IxIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGhhcmRsaWdodCBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCQlpZiAoISRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGhhcmRsaWdodCBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJcmV0dXJuICR0aGlzLT5jb2xvckJsZW5kKCBhcnJheSgkdGhpcywnY29sb3JCbGVuZEhhcmRsaWdodCcpLCAgJGNvbG9yMSwgJGNvbG9yMiApOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gY29sb3JCbGVuZEhhcmRsaWdodCggJGNiLCAkY3MgKXsKCQlyZXR1cm4gJHRoaXMtPmNvbG9yQmxlbmRPdmVybGF5KCRjcywgJGNiKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZGlmZmVyZW5jZSgkY29sb3IxID0gbnVsbCwgJGNvbG9yMiA9IG51bGwpIHsKCQlpZiAoISRjb2xvcjEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgZmlyc3QgYXJndW1lbnQgdG8gZGlmZmVyZW5jZSBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCQlpZiAoISRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGRpZmZlcmVuY2UgbXVzdCBiZSBhIGNvbG9yJyAuICgkY29sb3IyIGluc3RhbmNlb2YgTGVzc19UcmVlX0V4cHJlc3Npb24gPyAnIChkaWQgeW91IGZvcmdvdCBjb21tYXM/KScgOiAnJykgKTsKCQl9CgoJCXJldHVybiAkdGhpcy0+Y29sb3JCbGVuZCggYXJyYXkoJHRoaXMsJ2NvbG9yQmxlbmREaWZmZXJlbmNlJyksICAkY29sb3IxLCAkY29sb3IyICk7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBjb2xvckJsZW5kRGlmZmVyZW5jZSggJGNiLCAkY3MgKXsKCQlyZXR1cm4gYWJzKCRjYiAtICRjcyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGV4Y2x1c2lvbiggJGNvbG9yMSA9IG51bGwsICRjb2xvcjIgPSBudWxsICl7CgkJaWYgKCEkY29sb3IxIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yKSB7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGV4Y2x1c2lvbiBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCQlpZiAoISRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGV4Y2x1c2lvbiBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJcmV0dXJuICR0aGlzLT5jb2xvckJsZW5kKCBhcnJheSgkdGhpcywnY29sb3JCbGVuZEV4Y2x1c2lvbicpLCAgJGNvbG9yMSwgJGNvbG9yMiApOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gY29sb3JCbGVuZEV4Y2x1c2lvbiggJGNiLCAkY3MgKXsKCQlyZXR1cm4gJGNiICsgJGNzIC0gMiAqICRjYiAqICRjczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gYXZlcmFnZSgkY29sb3IxID0gbnVsbCwgJGNvbG9yMiA9IG51bGwpewoJCWlmICghJGNvbG9yMSBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBhdmVyYWdlIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yMSBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoJCWlmICghJGNvbG9yMiBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBzZWNvbmQgYXJndW1lbnQgdG8gYXZlcmFnZSBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCgkJcmV0dXJuICR0aGlzLT5jb2xvckJsZW5kKCBhcnJheSgkdGhpcywnY29sb3JCbGVuZEF2ZXJhZ2UnKSwgICRjb2xvcjEsICRjb2xvcjIgKTsKCX0KCgkvLyBub24tdzNjIGZ1bmN0aW9uczoKCXB1YmxpYyBmdW5jdGlvbiBjb2xvckJsZW5kQXZlcmFnZSgkY2IsICRjcyApewoJCXJldHVybiAoJGNiICsgJGNzKSAvIDI7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG5lZ2F0aW9uKCRjb2xvcjEgPSBudWxsLCAkY29sb3IyID0gbnVsbCApewoJCWlmICghJGNvbG9yMSBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvcikgewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ1RoZSBmaXJzdCBhcmd1bWVudCB0byBuZWdhdGlvbiBtdXN0IGJlIGEgY29sb3InIC4gKCRjb2xvcjEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiA/ICcgKGRpZCB5b3UgZm9yZ290IGNvbW1hcz8pJyA6ICcnKSApOwoJCX0KCQlpZiAoISRjb2xvcjIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQ29sb3IpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIG5lZ2F0aW9uIG11c3QgYmUgYSBjb2xvcicgLiAoJGNvbG9yMiBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uID8gJyAoZGlkIHlvdSBmb3Jnb3QgY29tbWFzPyknIDogJycpICk7CgkJfQoKCQlyZXR1cm4gJHRoaXMtPmNvbG9yQmxlbmQoIGFycmF5KCR0aGlzLCdjb2xvckJsZW5kTmVnYXRpb24nKSwgICRjb2xvcjEsICRjb2xvcjIgKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY29sb3JCbGVuZE5lZ2F0aW9uKCRjYiwgJGNzKXsKCQlyZXR1cm4gMSAtIGFicygkY2IgKyAkY3MgLSAxKTsKCX0KCgkvLyB+IEVuZCBvZiBDb2xvciBCbGVuZGluZwoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Less.php.combine</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ci4vUGFyc2VyLnBocAouL0NvbG9ycy5waHAKLi9FbnZpcm9ubWVudC5waHAKLi9GdW5jdGlvbnMucGhwCi4vTWltZS5waHAKLi9UcmVlLnBocAouL091dHB1dC5waHAKLi9WaXNpdG9yLnBocAouL1Zpc2l0b3JSZXBsYWNpbmcucGhwCi4vQ29uZmlndXJhYmxlLnBocAouL1RyZWUKLi9WaXNpdG9yCi4vRXhjZXB0aW9uL1BhcnNlci5waHAKLi9FeGNlcHRpb24vCi4vT3V0cHV0Ci4vU291cmNlTWFwCg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Mime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBNaW1lIGxvb2t1cAogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIG5vZGUKICovCmNsYXNzIExlc3NfTWltZXsKCgkvLyB0aGlzIG1hcCBpcyBpbnRlbnRpb25hbGx5IGluY29tcGxldGUKCS8vIGlmIHlvdSB3YW50IG1vcmUsIGluc3RhbGwgJ21pbWUnIGRlcAoJc3RhdGljICRfdHlwZXMgPSBhcnJheSgKCSAgICAgICAgJy5odG0nID0+ICd0ZXh0L2h0bWwnLAoJICAgICAgICAnLmh0bWwnPT4gJ3RleHQvaHRtbCcsCgkgICAgICAgICcuZ2lmJyA9PiAnaW1hZ2UvZ2lmJywKCSAgICAgICAgJy5qcGcnID0+ICdpbWFnZS9qcGVnJywKCSAgICAgICAgJy5qcGVnJz0+ICdpbWFnZS9qcGVnJywKCSAgICAgICAgJy5wbmcnID0+ICdpbWFnZS9wbmcnLAoJICAgICAgICAnLnR0ZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10dGYnLAoJICAgICAgICAnLm90ZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC1vdGYnLAoJICAgICAgICAnLmVvdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JywKCSAgICAgICAgJy53b2ZmJyA9PiAnYXBwbGljYXRpb24veC1mb250LXdvZmYnLAoJICAgICAgICAnLnN2ZycgPT4gJ2ltYWdlL3N2Zyt4bWwnLAoJICAgICAgICApOwoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9va3VwKCAkZmlsZXBhdGggKXsKCQkkcGFydHMgPSBleHBsb2RlKCcuJywkZmlsZXBhdGgpOwoJCSRleHQgPSAnLicuc3RydG9sb3dlcihhcnJheV9wb3AoJHBhcnRzKSk7CgoJCWlmKCAhaXNzZXQoc2VsZjo6JF90eXBlc1skZXh0XSkgKXsKCQkJcmV0dXJuIG51bGw7CgkJfQoJCXJldHVybiBzZWxmOjokX3R5cGVzWyRleHRdOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hhcnNldHNfbG9va3VwKCAkdHlwZSA9IG51bGwgKXsKCQkvLyBhc3N1bWVzIGFsbCB0ZXh0IHR5cGVzIGFyZSBVVEYtOAoJCXJldHVybiAkdHlwZSAmJiBwcmVnX21hdGNoKCcvXnRleHRcLy8nLCR0eXBlKSA/ICdVVEYtOCcgOiAnJzsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Output.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBQYXJzZXIgb3V0cHV0CiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2Ugb3V0cHV0CiAqLwpjbGFzcyBMZXNzX091dHB1dHsKCgkvKioKCSAqIE91dHB1dCBob2xkZXIKCSAqCgkgKiBAdmFyIHN0cmluZwoJICovCglwcm90ZWN0ZWQgJHN0cnMgPSBhcnJheSgpOwoKCS8qKgoJICogQWRkcyBhIGNodW5rIHRvIHRoZSBzdGFjawoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGNodW5rIFRoZSBjaHVuayB0byBvdXRwdXQKCSAqIEBwYXJhbSBMZXNzX0ZpbGVJbmZvICRmaWxlSW5mbyBUaGUgZmlsZSBpbmZvcm1hdGlvbgoJICogQHBhcmFtIGludGVnZXIgJGluZGV4IFRoZSBpbmRleAoJICogQHBhcmFtIG1peGVkICRtYXBMaW5lcwoJICovCglwdWJsaWMgZnVuY3Rpb24gYWRkKCRjaHVuaywgJGZpbGVJbmZvID0gbnVsbCwgJGluZGV4ID0gMCwgJG1hcExpbmVzID0gbnVsbCl7CgkJJHRoaXMtPnN0cnNbXSA9ICRjaHVuazsKCX0KCgkvKioKCSAqIElzIHRoZSBvdXRwdXQgZW1wdHk/CgkgKgoJICogQHJldHVybiBib29sZWFuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc0VtcHR5KCl7CgkJcmV0dXJuIGNvdW50KCR0aGlzLT5zdHJzKSA9PT0gMDsKCX0KCgoJLyoqCgkgKiBDb252ZXJ0cyB0aGUgb3V0cHV0IHRvIHN0cmluZwoJICoKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpewoJCXJldHVybiBpbXBsb2RlKCcnLCR0aGlzLT5zdHJzKTsKCX0KCn0=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Output/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Output/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Output/Mapped.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBQYXJzZXIgb3V0cHV0IHdpdGggc291cmNlIG1hcA0KICoNCiAqIEBwYWNrYWdlIExlc3MNCiAqIEBzdWJwYWNrYWdlIE91dHB1dA0KICovDQpjbGFzcyBMZXNzX091dHB1dF9NYXBwZWQgZXh0ZW5kcyBMZXNzX091dHB1dCB7DQoNCgkvKioNCgkgKiBUaGUgc291cmNlIG1hcCBnZW5lcmF0b3INCgkgKg0KCSAqIEB2YXIgTGVzc19Tb3VyY2VNYXBfR2VuZXJhdG9yDQoJICovDQoJcHJvdGVjdGVkICRnZW5lcmF0b3I7DQoNCgkvKioNCgkgKiBDdXJyZW50IGxpbmUNCgkgKg0KCSAqIEB2YXIgaW50ZWdlcg0KCSAqLw0KCXByb3RlY3RlZCAkbGluZU51bWJlciA9IDA7DQoNCgkvKioNCgkgKiBDdXJyZW50IGNvbHVtbg0KCSAqDQoJICogQHZhciBpbnRlZ2VyDQoJICovDQoJcHJvdGVjdGVkICRjb2x1bW4gPSAwOw0KDQoJLyoqDQoJICogQXJyYXkgb2YgY29udGVudHMgbWFwIChmaWxlIGFuZCBpdHMgY29udGVudCkNCgkgKg0KCSAqIEB2YXIgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJGNvbnRlbnRzTWFwID0gYXJyYXkoKTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgJGNvbnRlbnRzTWFwIEFycmF5IG9mIGZpbGVuYW1lIHRvIGNvbnRlbnRzIG1hcA0KCSAqIEBwYXJhbSBMZXNzX1NvdXJjZU1hcF9HZW5lcmF0b3IgJGdlbmVyYXRvcg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY29udGVudHNNYXAsICRnZW5lcmF0b3Ipew0KCQkkdGhpcy0+Y29udGVudHNNYXAgPSAkY29udGVudHNNYXA7DQoJCSR0aGlzLT5nZW5lcmF0b3IgPSAkZ2VuZXJhdG9yOw0KCX0NCg0KCS8qKg0KCSAqIEFkZHMgYSBjaHVuayB0byB0aGUgc3RhY2sNCgkgKiBUaGUgJGluZGV4IGZvciBsZXNzLnBocCBtYXkgYmUgZGlmZmVyZW50IGZyb20gbGVzcy5qcyBzaW5jZSBsZXNzLnBocCBkb2VzIG5vdCBjaHVua2lmeSBpbnB1dHMNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGNodW5rDQoJICogQHBhcmFtIHN0cmluZyAkZmlsZUluZm8NCgkgKiBAcGFyYW0gaW50ZWdlciAkaW5kZXgNCgkgKiBAcGFyYW0gbWl4ZWQgJG1hcExpbmVzDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGFkZCgkY2h1bmssICRmaWxlSW5mbyA9IG51bGwsICRpbmRleCA9IDAsICRtYXBMaW5lcyA9IG51bGwpew0KDQoJCS8vaWdub3JlIGFkZGluZyBlbXB0eSBzdHJpbmdzDQoJCWlmKCAkY2h1bmsgPT09ICcnICl7DQoJCQlyZXR1cm47DQoJCX0NCg0KDQoJCSRzb3VyY2VMaW5lcyA9IGFycmF5KCk7DQoJCSRzb3VyY2VDb2x1bW5zID0gJyAnOw0KDQoNCgkJaWYoICRmaWxlSW5mbyApew0KDQoJCQkkdXJsID0gJGZpbGVJbmZvWydjdXJyZW50VXJpJ107DQoNCgkJCWlmKCBpc3NldCgkdGhpcy0+Y29udGVudHNNYXBbJHVybF0pICl7DQoJCQkJJGlucHV0U291cmNlID0gc3Vic3RyKCR0aGlzLT5jb250ZW50c01hcFskdXJsXSwgMCwgJGluZGV4KTsNCgkJCQkkc291cmNlTGluZXMgPSBleHBsb2RlKCJcbiIsICRpbnB1dFNvdXJjZSk7DQoJCQkJJHNvdXJjZUNvbHVtbnMgPSBlbmQoJHNvdXJjZUxpbmVzKTsNCgkJCX1lbHNlew0KCQkJCXRocm93IG5ldyBFeGNlcHRpb24oJ0ZpbGVuYW1lICcuJHVybC4nIG5vdCBpbiBjb250ZW50c01hcCcpOw0KCQkJfQ0KDQoJCX0NCg0KCQkkbGluZXMgPSBleHBsb2RlKCJcbiIsICRjaHVuayk7DQoJCSRjb2x1bW5zID0gZW5kKCRsaW5lcyk7DQoNCgkJaWYoJGZpbGVJbmZvKXsNCg0KCQkJaWYoISRtYXBMaW5lcyl7DQoJCQkJJHRoaXMtPmdlbmVyYXRvci0+YWRkTWFwcGluZygNCgkJCQkJCSR0aGlzLT5saW5lTnVtYmVyICsgMSwJCQkJCS8vIGdlbmVyYXRlZF9saW5lDQoJCQkJCQkkdGhpcy0+Y29sdW1uLAkJCQkJCQkvLyBnZW5lcmF0ZWRfY29sdW1uDQoJCQkJCQljb3VudCgkc291cmNlTGluZXMpLAkJCQkJLy8gb3JpZ2luYWxfbGluZQ0KCQkJCQkJc3RybGVuKCRzb3VyY2VDb2x1bW5zKSwJCQkJCS8vIG9yaWdpbmFsX2NvbHVtbg0KCQkJCQkJJGZpbGVJbmZvDQoJCQkJKTsNCgkJCX1lbHNlew0KCQkJCWZvcigkaSA9IDAsICRjb3VudCA9IGNvdW50KCRsaW5lcyk7ICRpIDwgJGNvdW50OyAkaSsrKXsNCgkJCQkJJHRoaXMtPmdlbmVyYXRvci0+YWRkTWFwcGluZygNCgkJCQkJCSR0aGlzLT5saW5lTnVtYmVyICsgJGkgKyAxLAkJCQkvLyBnZW5lcmF0ZWRfbGluZQ0KCQkJCQkJJGkgPT09IDAgPyAkdGhpcy0+Y29sdW1uIDogMCwJCQkvLyBnZW5lcmF0ZWRfY29sdW1uDQoJCQkJCQljb3VudCgkc291cmNlTGluZXMpICsgJGksCQkJCS8vIG9yaWdpbmFsX2xpbmUNCgkJCQkJCSRpID09PSAwID8gc3RybGVuKCRzb3VyY2VDb2x1bW5zKSA6IDAsIAkvLyBvcmlnaW5hbF9jb2x1bW4NCgkJCQkJCSRmaWxlSW5mbw0KCQkJCQkpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCWlmKGNvdW50KCRsaW5lcykgPT09IDEpew0KCQkJJHRoaXMtPmNvbHVtbiArPSBzdHJsZW4oJGNvbHVtbnMpOw0KCQl9ZWxzZXsNCgkJCSR0aGlzLT5saW5lTnVtYmVyICs9IGNvdW50KCRsaW5lcykgLSAxOw0KCQkJJHRoaXMtPmNvbHVtbiA9IHN0cmxlbigkY29sdW1ucyk7DQoJCX0NCg0KCQkvLyBhZGQgb25seSBjaHVuaw0KCQlwYXJlbnQ6OmFkZCgkY2h1bmspOw0KCX0NCg0KfQ==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZSggZGlybmFtZShfX0ZJTEVfXykuJy9DYWNoZS5waHAnKTsKCi8qKgogKiBDbGFzcyBmb3IgcGFyc2luZyBhbmQgY29tcGlsaW5nIGxlc3MgZmlsZXMgaW50byBjc3MKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSBwYXJzZXIKICoKICovCmNsYXNzIExlc3NfUGFyc2VyewoKCgkvKioKCSAqIERlZmF1bHQgcGFyc2VyIG9wdGlvbnMKCSAqLwoJcHVibGljIHN0YXRpYyAkZGVmYXVsdF9vcHRpb25zID0gYXJyYXkoCgkJJ2NvbXByZXNzJwkJCQk9PiBmYWxzZSwJCQkvLyBvcHRpb24gLSB3aGV0aGVyIHRvIGNvbXByZXNzCgkJJ3N0cmljdFVuaXRzJwkJCT0+IGZhbHNlLAkJCS8vIHdoZXRoZXIgdW5pdHMgbmVlZCB0byBldmFsdWF0ZSBjb3JyZWN0bHkKCQknc3RyaWN0TWF0aCcJCQk9PiBmYWxzZSwJCQkvLyB3aGV0aGVyIG1hdGggaGFzIHRvIGJlIHdpdGhpbiBwYXJlbnRoZXNpcwoJCSdyZWxhdGl2ZVVybHMnCQkJPT4gdHJ1ZSwJCQkvLyBvcHRpb24gLSB3aGV0aGVyIHRvIGFkanVzdCBVUkwncyB0byBiZSByZWxhdGl2ZQoJCSd1cmxBcmdzJwkJCQk9PiAnJywJCQkJLy8gd2hldGhlciB0byBhZGQgYXJncyBpbnRvIHVybCB0b2tlbnMKCQknbnVtUHJlY2lzaW9uJwkJCT0+IDgsCgoJCSdpbXBvcnRfZGlycycJCQk9PiBhcnJheSgpLAoJCSdpbXBvcnRfY2FsbGJhY2snCQk9PiBudWxsLAoJCSdjYWNoZV9kaXInCQkJCT0+IG51bGwsCgkJJ2NhY2hlX21ldGhvZCcJCQk9PiAncGhwJywgCQkJLy8gZmFsc2UsICdzZXJpYWxpemUnLCAncGhwJywgJ3Zhcl9leHBvcnQnLCAnY2FsbGJhY2snOwoJCSdjYWNoZV9jYWxsYmFja19nZXQnCT0+IG51bGwsCgkJJ2NhY2hlX2NhbGxiYWNrX3NldCcJPT4gbnVsbCwKCgkJJ3NvdXJjZU1hcCcJCQkJPT4gZmFsc2UsCQkJLy8gd2hldGhlciB0byBvdXRwdXQgYSBzb3VyY2UgbWFwCgkJJ3NvdXJjZU1hcEJhc2VwYXRoJwkJPT4gbnVsbCwKCQknc291cmNlTWFwV3JpdGVUbycJCT0+IG51bGwsCgkJJ3NvdXJjZU1hcFVSTCcJCQk9PiBudWxsLAoKCQknaW5kZW50YXRpb24nIAkJCT0+ICcgICcsCgoJCSdwbHVnaW5zJwkJCQk9PiBhcnJheSgpLAoKCSk7CgoJcHVibGljIHN0YXRpYyAkb3B0aW9ucyA9IGFycmF5KCk7CgoKCXByaXZhdGUgJGlucHV0OwkJCQkJLy8gTGVzcyBpbnB1dCBzdHJpbmcKCXByaXZhdGUgJGlucHV0X2xlbjsJCQkJLy8gaW5wdXQgc3RyaW5nIGxlbmd0aAoJcHJpdmF0ZSAkcG9zOwkJCQkJLy8gY3VycmVudCBpbmRleCBpbiBgaW5wdXRgCglwcml2YXRlICRzYXZlU3RhY2sgPSBhcnJheSgpOwkvLyBob2xkcyBzdGF0ZSBmb3IgYmFja3RyYWNraW5nCglwcml2YXRlICRmdXJ0aGVzdDsKCXByaXZhdGUgJG1iX2ludGVybmFsX2VuY29kaW5nID0gJyc7IC8vIGZvciByZW1lbWJlciBleGlzdHMgdmFsdWUgb2YgbWJzdHJpbmcuaW50ZXJuYWxfZW5jb2RpbmcKCgkvKioKCSAqIEB2YXIgTGVzc19FbnZpcm9ubWVudAoJICovCglwcml2YXRlICRlbnY7CgoJcHJvdGVjdGVkICRydWxlcyA9IGFycmF5KCk7CgoJcHJpdmF0ZSBzdGF0aWMgJGltcG9ydHMgPSBhcnJheSgpOwoKCXB1YmxpYyBzdGF0aWMgJGhhc19leHRlbmRzID0gZmFsc2U7CgoJcHVibGljIHN0YXRpYyAkbmV4dF9pZCA9IDA7CgoJLyoqCgkgKiBGaWxlbmFtZSB0byBjb250ZW50cyBvZiBhbGwgcGFyc2VkIHRoZSBmaWxlcwoJICoKCSAqIEB2YXIgYXJyYXkKCSAqLwoJcHVibGljIHN0YXRpYyAkY29udGVudHNNYXAgPSBhcnJheSgpOwoKCgkvKioKCSAqIEBwYXJhbSBMZXNzX0Vudmlyb25tZW50fGFycmF5fG51bGwgJGVudgoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoICRlbnYgPSBudWxsICl7CgoJCS8vIFRvcCBwYXJzZXIgb24gYW4gaW1wb3J0IHRyZWUgbXVzdCBiZSBzdXJlIHRoZXJlIGlzIG9uZSAiZW52IgoJCS8vIHdoaWNoIHdpbGwgdGhlbiBiZSBwYXNzZWQgYXJvdW5kIGJ5IHJlZmVyZW5jZS4KCQlpZiggJGVudiBpbnN0YW5jZW9mIExlc3NfRW52aXJvbm1lbnQgKXsKCQkJJHRoaXMtPmVudiA9ICRlbnY7CgkJfWVsc2V7CgkJCSR0aGlzLT5TZXRPcHRpb25zKExlc3NfUGFyc2VyOjokZGVmYXVsdF9vcHRpb25zKTsKCQkJJHRoaXMtPlJlc2V0KCAkZW52ICk7CgkJfQoKCQkvLyBtYnN0cmluZy5mdW5jX292ZXJsb2FkID4gMSBidWdmaXgKCQkvLyBUaGUgZW5jb2RpbmcgdmFsdWUgbXVzdCBiZSBzZXQgZm9yIGVhY2ggc291cmNlIGZpbGUsCgkJLy8gdGhlcmVmb3JlLCB0byBjb25zZXJ2ZSByZXNvdXJjZXMgYW5kIGltcHJvdmUgdGhlIHNwZWVkIG9mIHRoaXMgZGVzaWduIGlzIHRha2VuIGhlcmUKCQlpZiAoaW5pX2dldCgnbWJzdHJpbmcuZnVuY19vdmVybG9hZCcpKSB7CgkJCSR0aGlzLT5tYl9pbnRlcm5hbF9lbmNvZGluZyA9IGluaV9nZXQoJ21ic3RyaW5nLmludGVybmFsX2VuY29kaW5nJyk7CgkJCUBpbmlfc2V0KCdtYnN0cmluZy5pbnRlcm5hbF9lbmNvZGluZycsICdhc2NpaScpOwoJCX0KCgl9CgoKCS8qKgoJICogUmVzZXQgdGhlIHBhcnNlciBzdGF0ZSBjb21wbGV0ZWx5CgkgKgoJICovCglwdWJsaWMgZnVuY3Rpb24gUmVzZXQoICRvcHRpb25zID0gbnVsbCApewoJCSR0aGlzLT5ydWxlcyA9IGFycmF5KCk7CgkJc2VsZjo6JGltcG9ydHMgPSBhcnJheSgpOwoJCXNlbGY6OiRoYXNfZXh0ZW5kcyA9IGZhbHNlOwoJCXNlbGY6OiRpbXBvcnRzID0gYXJyYXkoKTsKCQlzZWxmOjokY29udGVudHNNYXAgPSBhcnJheSgpOwoKCQkkdGhpcy0+ZW52ID0gbmV3IExlc3NfRW52aXJvbm1lbnQoJG9wdGlvbnMpOwoJCSR0aGlzLT5lbnYtPkluaXQoKTsKCgkJLy9zZXQgbmV3IG9wdGlvbnMKCQlpZiggaXNfYXJyYXkoJG9wdGlvbnMpICl7CgkJCSR0aGlzLT5TZXRPcHRpb25zKExlc3NfUGFyc2VyOjokZGVmYXVsdF9vcHRpb25zKTsKCQkJJHRoaXMtPlNldE9wdGlvbnMoJG9wdGlvbnMpOwoJCX0KCX0KCgkvKioKCSAqIFNldCBvbmUgb3IgbW9yZSBjb21waWxlciBvcHRpb25zCgkgKiAgb3B0aW9uczogaW1wb3J0X2RpcnMsIGNhY2hlX2RpciwgY2FjaGVfbWV0aG9kCgkgKgoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0T3B0aW9ucyggJG9wdGlvbnMgKXsKCQlmb3JlYWNoKCRvcHRpb25zIGFzICRvcHRpb24gPT4gJHZhbHVlKXsKCQkJJHRoaXMtPlNldE9wdGlvbigkb3B0aW9uLCR2YWx1ZSk7CgkJfQoJfQoKCS8qKgoJICogU2V0IG9uZSBjb21waWxlciBvcHRpb24KCSAqCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRPcHRpb24oJG9wdGlvbiwkdmFsdWUpewoKCQlzd2l0Y2goJG9wdGlvbil7CgoJCQljYXNlICdpbXBvcnRfZGlycyc6CgkJCQkkdGhpcy0+U2V0SW1wb3J0RGlycygkdmFsdWUpOwoJCQlyZXR1cm47CgoJCQljYXNlICdjYWNoZV9kaXInOgoJCQkJaWYoIGlzX3N0cmluZygkdmFsdWUpICl7CgkJCQkJTGVzc19DYWNoZTo6U2V0Q2FjaGVEaXIoJHZhbHVlKTsKCQkJCQlMZXNzX0NhY2hlOjpDaGVja0NhY2hlRGlyKCk7CgkJCQl9CgkJCXJldHVybjsKCQl9CgoJCUxlc3NfUGFyc2VyOjokb3B0aW9uc1skb3B0aW9uXSA9ICR2YWx1ZTsKCX0KCgkvKioKCSAqIFJlZ2lzdGVycyBhIG5ldyBjdXN0b20gZnVuY3Rpb24KCSAqCgkgKiBAcGFyYW0gIHN0cmluZyAgICRuYW1lICAgICBmdW5jdGlvbiBuYW1lCgkgKiBAcGFyYW0gIGNhbGxhYmxlICRjYWxsYmFjayBjYWxsYmFjawoJICovCglwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJGdW5jdGlvbigkbmFtZSwgJGNhbGxiYWNrKSB7CgkJJHRoaXMtPmVudi0+ZnVuY3Rpb25zWyRuYW1lXSA9ICRjYWxsYmFjazsKCX0KCgkvKioKCSAqIFJlbW92ZWQgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGZ1bmN0aW9uCgkgKgoJICogQHBhcmFtICBzdHJpbmcgJG5hbWUgZnVuY3Rpb24gbmFtZQoJICovCglwdWJsaWMgZnVuY3Rpb24gdW5yZWdpc3RlckZ1bmN0aW9uKCRuYW1lKSB7CgkJaWYoIGlzc2V0KCR0aGlzLT5lbnYtPmZ1bmN0aW9uc1skbmFtZV0pICkKCQkJdW5zZXQoJHRoaXMtPmVudi0+ZnVuY3Rpb25zWyRuYW1lXSk7Cgl9CgoKCS8qKgoJICogR2V0IHRoZSBjdXJyZW50IGNzcyBidWZmZXIKCSAqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q3NzKCl7CgoJCSRwcmVjaXNpb24gPSBpbmlfZ2V0KCdwcmVjaXNpb24nKTsKCQlAaW5pX3NldCgncHJlY2lzaW9uJywxNik7CgkJJGxvY2FsZSA9IHNldGxvY2FsZShMQ19OVU1FUklDLCAwKTsKCQlzZXRsb2NhbGUoTENfTlVNRVJJQywgIkMiKTsKCgkJdHJ5IHsKCgkgCQkkcm9vdCA9IG5ldyBMZXNzX1RyZWVfUnVsZXNldChhcnJheSgpLCAkdGhpcy0+cnVsZXMgKTsKCQkJJHJvb3QtPnJvb3QgPSB0cnVlOwoJCQkkcm9vdC0+Zmlyc3RSb290ID0gdHJ1ZTsKCgoJCQkkdGhpcy0+UHJlVmlzaXRvcnMoJHJvb3QpOwoKCQkJc2VsZjo6JGhhc19leHRlbmRzID0gZmFsc2U7CgkJCSRldmFsZFJvb3QgPSAkcm9vdC0+Y29tcGlsZSgkdGhpcy0+ZW52KTsKCgoKCQkJJHRoaXMtPlBvc3RWaXNpdG9ycygkZXZhbGRSb290KTsKCgkJCWlmKCBMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ3NvdXJjZU1hcCddICl7CgkJCQkkZ2VuZXJhdG9yID0gbmV3IExlc3NfU291cmNlTWFwX0dlbmVyYXRvcigkZXZhbGRSb290LCBMZXNzX1BhcnNlcjo6JGNvbnRlbnRzTWFwLCBMZXNzX1BhcnNlcjo6JG9wdGlvbnMgKTsKCQkJCS8vIHdpbGwgYWxzbyBzYXZlIGZpbGUKCQkJCS8vIEZJWE1FOiBzaG91bGQgaGFwcGVuIHNvbWV3aGVyZSBlbHNlPwoJCQkJJGNzcyA9ICRnZW5lcmF0b3ItPmdlbmVyYXRlQ1NTKCk7CgkJCX1lbHNlewoJCQkJJGNzcyA9ICRldmFsZFJvb3QtPnRvQ1NTKCk7CgkJCX0KCgkJCWlmKCBMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2NvbXByZXNzJ10gKXsKCQkJCSRjc3MgPSBwcmVnX3JlcGxhY2UoJy8oXihccykrKXwoKFxzKSskKS8nLCAnJywgJGNzcyk7CgkJCX0KCgkJfSBjYXRjaCAoRXhjZXB0aW9uICRleGMpIHsKCQkJLy8gSW50ZW50aW9uYWwgZmFsbC10aHJvdWdoIHNvIHdlIGNhbiByZXNldCBlbnZpcm9ubWVudAoJCX0KCgkJLy9yZXNldCBwaHAgc2V0dGluZ3MKCQlAaW5pX3NldCgncHJlY2lzaW9uJywkcHJlY2lzaW9uKTsKCQlzZXRsb2NhbGUoTENfTlVNRVJJQywgJGxvY2FsZSk7CgoJCS8vIElmIHlvdSBwcmV2aW91c2x5IGRlZmluZWQgJHRoaXMtPm1iX2ludGVybmFsX2VuY29kaW5nCgkJLy8gaXMgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZSBlbmNvZGluZyBhcyBpdCB3YXMgYmVmb3JlCgkJaWYgKCR0aGlzLT5tYl9pbnRlcm5hbF9lbmNvZGluZyAhPSAnJykgewoJCQlAaW5pX3NldCgibWJzdHJpbmcuaW50ZXJuYWxfZW5jb2RpbmciLCAkdGhpcy0+bWJfaW50ZXJuYWxfZW5jb2RpbmcpOwoJCQkkdGhpcy0+bWJfaW50ZXJuYWxfZW5jb2RpbmcgPSAnJzsKCQl9CgoJCS8vIFJldGhyb3cgZXhjZXB0aW9uIGFmdGVyIHdlIGhhbmRsZWQgcmVzZXR0aW5nIHRoZSBlbnZpcm9ubWVudAoJCWlmICghZW1wdHkoJGV4YykpIHsKCQkJdGhyb3cgJGV4YzsKCQl9CgoKCgkJcmV0dXJuICRjc3M7Cgl9CgoJLyoqCgkgKiBSdW4gcHJlLWNvbXBpbGUgdmlzaXRvcnMKCSAqCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gUHJlVmlzaXRvcnMoJHJvb3QpewoKCQlpZiggTGVzc19QYXJzZXI6OiRvcHRpb25zWydwbHVnaW5zJ10gKXsKCQkJZm9yZWFjaChMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ3BsdWdpbnMnXSBhcyAkcGx1Z2luKXsKCQkJCWlmKCAhZW1wdHkoJHBsdWdpbi0+aXNQcmVFdmFsVmlzaXRvcikgKXsKCQkJCQkkcGx1Z2luLT5ydW4oJHJvb3QpOwoJCQkJfQoJCQl9CgkJfQoJfQoKCgkvKioKCSAqIFJ1biBwb3N0LWNvbXBpbGUgdmlzaXRvcnMKCSAqCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gUG9zdFZpc2l0b3JzKCRldmFsZFJvb3QpewoKCQkkdmlzaXRvcnMgPSBhcnJheSgpOwoJCSR2aXNpdG9yc1tdID0gbmV3IExlc3NfVmlzaXRvcl9qb2luU2VsZWN0b3IoKTsKCQlpZiggc2VsZjo6JGhhc19leHRlbmRzICl7CgkJCSR2aXNpdG9yc1tdID0gbmV3IExlc3NfVmlzaXRvcl9wcm9jZXNzRXh0ZW5kcygpOwoJCX0KCQkkdmlzaXRvcnNbXSA9IG5ldyBMZXNzX1Zpc2l0b3JfdG9DU1MoKTsKCgoJCWlmKCBMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ3BsdWdpbnMnXSApewoJCQlmb3JlYWNoKExlc3NfUGFyc2VyOjokb3B0aW9uc1sncGx1Z2lucyddIGFzICRwbHVnaW4pewoJCQkJaWYoIHByb3BlcnR5X2V4aXN0cygkcGx1Z2luLCdpc1ByZUV2YWxWaXNpdG9yJykgJiYgJHBsdWdpbi0+aXNQcmVFdmFsVmlzaXRvciApewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoKCQkJCWlmKCBwcm9wZXJ0eV9leGlzdHMoJHBsdWdpbiwnaXNQcmVWaXNpdG9yJykgJiYgJHBsdWdpbi0+aXNQcmVWaXNpdG9yICl7CgkJCQkJYXJyYXlfdW5zaGlmdCggJHZpc2l0b3JzLCAkcGx1Z2luKTsKCQkJCX1lbHNlewoJCQkJCSR2aXNpdG9yc1tdID0gJHBsdWdpbjsKCQkJCX0KCQkJfQoJCX0KCgoJCWZvcigkaSA9IDA7ICRpIDwgY291bnQoJHZpc2l0b3JzKTsgJGkrKyApewoJCQkkdmlzaXRvcnNbJGldLT5ydW4oJGV2YWxkUm9vdCk7CgkJfQoKCX0KCgoJLyoqCgkgKiBQYXJzZSBhIExlc3Mgc3RyaW5nIGludG8gY3NzCgkgKgoJICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBzdHJpbmcgdG8gY29udmVydAoJICogQHBhcmFtIHN0cmluZyAkdXJpX3Jvb3QgVGhlIHVybCBvZiB0aGUgZmlsZQoJICogQHJldHVybiBMZXNzX1RyZWVfUnVsZXNldHxMZXNzX1BhcnNlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gcGFyc2UoICRzdHIsICRmaWxlX3VyaSA9IG51bGwgKXsKCgkJaWYoICEkZmlsZV91cmkgKXsKCQkJJHVyaV9yb290ID0gJyc7CgkJCSRmaWxlbmFtZSA9ICdhbm9ueW1vdXMtZmlsZS0nLkxlc3NfUGFyc2VyOjokbmV4dF9pZCsrLicubGVzcyc7CgkJfWVsc2V7CgkJCSRmaWxlX3VyaSA9IHNlbGY6OldpblBhdGgoJGZpbGVfdXJpKTsKCQkJJGZpbGVuYW1lID0gJGZpbGVfdXJpOwoJCQkkdXJpX3Jvb3QgPSBkaXJuYW1lKCRmaWxlX3VyaSk7CgkJfQoKCQkkcHJldmlvdXNGaWxlSW5mbyA9ICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbzsKCQkkdXJpX3Jvb3QgPSBzZWxmOjpXaW5QYXRoKCR1cmlfcm9vdCk7CgkJJHRoaXMtPlNldEZpbGVJbmZvKCRmaWxlbmFtZSwgJHVyaV9yb290KTsKCgkJJHRoaXMtPmlucHV0ID0gJHN0cjsKCQkkdGhpcy0+X3BhcnNlKCk7CgoJCWlmKCAkcHJldmlvdXNGaWxlSW5mbyApewoJCQkkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8gPSAkcHJldmlvdXNGaWxlSW5mbzsKCQl9CgoJCXJldHVybiAkdGhpczsKCX0KCgoJLyoqCgkgKiBQYXJzZSBhIExlc3Mgc3RyaW5nIGZyb20gYSBnaXZlbiBmaWxlCgkgKgoJICogQHRocm93cyBMZXNzX0V4Y2VwdGlvbl9QYXJzZXIKCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBmaWxlIHRvIHBhcnNlCgkgKiBAcGFyYW0gc3RyaW5nICR1cmlfcm9vdCBUaGUgdXJsIG9mIHRoZSBmaWxlCgkgKiBAcGFyYW0gYm9vbCAkcmV0dXJuUm9vdCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBhIGNzcyBzdHJpbmcgYSByb290IG5vZGUKCSAqIEByZXR1cm4gTGVzc19UcmVlX1J1bGVzZXR8TGVzc19QYXJzZXIKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHBhcnNlRmlsZSggJGZpbGVuYW1lLCAkdXJpX3Jvb3QgPSAnJywgJHJldHVyblJvb3QgPSBmYWxzZSl7CgoJCWlmKCAhZmlsZV9leGlzdHMoJGZpbGVuYW1lKSApewoJCQkkdGhpcy0+RXJyb3Ioc3ByaW50ZignRmlsZSBgJXNgIG5vdCBmb3VuZC4nLCAkZmlsZW5hbWUpKTsKCQl9CgoKCQkvLyBmaXggdXJpX3Jvb3Q/CgkJLy8gSW5zdGVhZCBvZiBUaGUgbWl4dHVyZSBvZiBmaWxlIHBhdGggZm9yIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgZGlyZWN0b3J5IHBhdGggZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgaGFzIGJlZQoJCWlmKCAhJHJldHVyblJvb3QgJiYgIWVtcHR5KCR1cmlfcm9vdCkgJiYgYmFzZW5hbWUoJHVyaV9yb290KSA9PSBiYXNlbmFtZSgkZmlsZW5hbWUpICl7CgkJCSR1cmlfcm9vdCA9IGRpcm5hbWUoJHVyaV9yb290KTsKCQl9CgoKCQkkcHJldmlvdXNGaWxlSW5mbyA9ICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbzsKCgoJCWlmKCAkZmlsZW5hbWUgKXsKCQkJJGZpbGVuYW1lID0gc2VsZjo6V2luUGF0aChyZWFscGF0aCgkZmlsZW5hbWUpKTsKCQl9CgkJJHVyaV9yb290ID0gc2VsZjo6V2luUGF0aCgkdXJpX3Jvb3QpOwoKCQkkdGhpcy0+U2V0RmlsZUluZm8oJGZpbGVuYW1lLCAkdXJpX3Jvb3QpOwoKCQlzZWxmOjpBZGRQYXJzZWRGaWxlKCRmaWxlbmFtZSk7CgoJCWlmKCAkcmV0dXJuUm9vdCApewoJCQkkcnVsZXMgPSAkdGhpcy0+R2V0UnVsZXMoICRmaWxlbmFtZSApOwoJCQkkcmV0dXJuID0gbmV3IExlc3NfVHJlZV9SdWxlc2V0KGFycmF5KCksICRydWxlcyApOwoJCX1lbHNlewoJCQkkdGhpcy0+X3BhcnNlKCAkZmlsZW5hbWUgKTsKCQkJJHJldHVybiA9ICR0aGlzOwoJCX0KCgkJaWYoICRwcmV2aW91c0ZpbGVJbmZvICl7CgkJCSR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbyA9ICRwcmV2aW91c0ZpbGVJbmZvOwoJCX0KCgkJcmV0dXJuICRyZXR1cm47Cgl9CgoKCS8qKgoJICogQWxsb3dzIGEgdXNlciB0byBzZXQgdmFyaWFibGVzIHZhbHVlcwoJICogQHBhcmFtIGFycmF5ICR2YXJzCgkgKiBAcmV0dXJuIExlc3NfUGFyc2VyCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBNb2RpZnlWYXJzKCAkdmFycyApewoKCQkkdGhpcy0+aW5wdXQgPSBMZXNzX1BhcnNlcjo6c2VyaWFsaXplVmFycyggJHZhcnMgKTsKCQkkdGhpcy0+X3BhcnNlKCk7CgoJCXJldHVybiAkdGhpczsKCX0KCgoJLyoqCgkgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0RmlsZUluZm8oICRmaWxlbmFtZSwgJHVyaV9yb290ID0gJycpewoKCQkkZmlsZW5hbWUgPSBMZXNzX0Vudmlyb25tZW50Ojpub3JtYWxpemVQYXRoKCRmaWxlbmFtZSk7CgkJJGRpcm5hbWUgPSBwcmVnX3JlcGxhY2UoJy9bXlwvXFxcXF0qJC8nLCcnLCRmaWxlbmFtZSk7CgoJCWlmKCAhZW1wdHkoJHVyaV9yb290KSApewoJCQkkdXJpX3Jvb3QgPSBydHJpbSgkdXJpX3Jvb3QsJy8nKS4nLyc7CgkJfQoKCQkkY3VycmVudEZpbGVJbmZvID0gYXJyYXkoKTsKCgkJLy9lbnRyeSBpbmZvCgkJaWYoIGlzc2V0KCR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbykgKXsKCQkJJGN1cnJlbnRGaWxlSW5mb1snZW50cnlQYXRoJ10gPSAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm9bJ2VudHJ5UGF0aCddOwoJCQkkY3VycmVudEZpbGVJbmZvWydlbnRyeVVyaSddID0gJHRoaXMtPmVudi0+Y3VycmVudEZpbGVJbmZvWydlbnRyeVVyaSddOwoJCQkkY3VycmVudEZpbGVJbmZvWydyb290cGF0aCddID0gJHRoaXMtPmVudi0+Y3VycmVudEZpbGVJbmZvWydyb290cGF0aCddOwoKCQl9ZWxzZXsKCQkJJGN1cnJlbnRGaWxlSW5mb1snZW50cnlQYXRoJ10gPSAkZGlybmFtZTsKCQkJJGN1cnJlbnRGaWxlSW5mb1snZW50cnlVcmknXSA9ICR1cmlfcm9vdDsKCQkJJGN1cnJlbnRGaWxlSW5mb1sncm9vdHBhdGgnXSA9ICRkaXJuYW1lOwoJCX0KCgkJJGN1cnJlbnRGaWxlSW5mb1snY3VycmVudERpcmVjdG9yeSddID0gJGRpcm5hbWU7CgkJJGN1cnJlbnRGaWxlSW5mb1snY3VycmVudFVyaSddID0gJHVyaV9yb290LmJhc2VuYW1lKCRmaWxlbmFtZSk7CgkJJGN1cnJlbnRGaWxlSW5mb1snZmlsZW5hbWUnXSA9ICRmaWxlbmFtZTsKCQkkY3VycmVudEZpbGVJbmZvWyd1cmlfcm9vdCddID0gJHVyaV9yb290OwoKCgkJLy9pbmhlcml0IHJlZmVyZW5jZQoJCWlmKCBpc3NldCgkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm9bJ3JlZmVyZW5jZSddKSAmJiAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm9bJ3JlZmVyZW5jZSddICl7CgkJCSRjdXJyZW50RmlsZUluZm9bJ3JlZmVyZW5jZSddID0gdHJ1ZTsKCQl9CgoJCSR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbyA9ICRjdXJyZW50RmlsZUluZm87Cgl9CgoKCS8qKgoJICogQGRlcHJlY2F0ZWQgMS41LjEuMgoJICoKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldENhY2hlRGlyKCAkZGlyICl7CgoJCWlmKCAhZmlsZV9leGlzdHMoJGRpcikgKXsKCQkJaWYoIG1rZGlyKCRkaXIpICl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fUGFyc2VyKCdMZXNzLnBocCBjYWNoZSBkaXJlY3RvcnkgY291bGRuXCd0IGJlIGNyZWF0ZWQ6ICcuJGRpcik7CgoJCX1lbHNlaWYoICFpc19kaXIoJGRpcikgKXsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX1BhcnNlcignTGVzcy5waHAgY2FjaGUgZGlyZWN0b3J5IGRvZXNuXCd0IGV4aXN0OiAnLiRkaXIpOwoKCQl9ZWxzZWlmKCAhaXNfd3JpdGFibGUoJGRpcikgKXsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX1BhcnNlcignTGVzcy5waHAgY2FjaGUgZGlyZWN0b3J5IGlzblwndCB3cml0YWJsZTogJy4kZGlyKTsKCgkJfWVsc2V7CgkJCSRkaXIgPSBzZWxmOjpXaW5QYXRoKCRkaXIpOwoJCQlMZXNzX0NhY2hlOjokY2FjaGVfZGlyID0gcnRyaW0oJGRpciwnLycpLicvJzsKCQkJcmV0dXJuIHRydWU7CgkJfQoJfQoKCgkvKioKCSAqIFNldCBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgb3IgY2FsbGJhY2tzIHRoZSBwYXJzZXIgc2hvdWxkIHVzZSBmb3IgZGV0ZXJtaW5pbmcgaW1wb3J0IHBhdGhzCgkgKgoJICogQHBhcmFtIGFycmF5ICRkaXJzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRJbXBvcnREaXJzKCAkZGlycyApewoJCUxlc3NfUGFyc2VyOjokb3B0aW9uc1snaW1wb3J0X2RpcnMnXSA9IGFycmF5KCk7CgoJCWZvcmVhY2goJGRpcnMgYXMgJHBhdGggPT4gJHVyaV9yb290KXsKCgkJCSRwYXRoID0gc2VsZjo6V2luUGF0aCgkcGF0aCk7CgkJCWlmKCAhZW1wdHkoJHBhdGgpICl7CgkJCQkkcGF0aCA9IHJ0cmltKCRwYXRoLCcvJykuJy8nOwoJCQl9CgoJCQlpZiAoICFpc19jYWxsYWJsZSgkdXJpX3Jvb3QpICl7CgkJCQkkdXJpX3Jvb3QgPSBzZWxmOjpXaW5QYXRoKCR1cmlfcm9vdCk7CgkJCQlpZiggIWVtcHR5KCR1cmlfcm9vdCkgKXsKCQkJCQkkdXJpX3Jvb3QgPSBydHJpbSgkdXJpX3Jvb3QsJy8nKS4nLyc7CgkJCQl9CgkJCX0KCgkJCUxlc3NfUGFyc2VyOjokb3B0aW9uc1snaW1wb3J0X2RpcnMnXVskcGF0aF0gPSAkdXJpX3Jvb3Q7CgkJfQoJfQoKCS8qKgoJICogQHBhcmFtIHN0cmluZyAkZmlsZV9wYXRoCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gX3BhcnNlKCAkZmlsZV9wYXRoID0gbnVsbCApewoJCSR0aGlzLT5ydWxlcyA9IGFycmF5X21lcmdlKCR0aGlzLT5ydWxlcywgJHRoaXMtPkdldFJ1bGVzKCAkZmlsZV9wYXRoICkpOwoJfQoKCgkvKioKCSAqIFJldHVybiB0aGUgcmVzdWx0cyBvZiBwYXJzZVByaW1hcnkgZm9yICRmaWxlX3BhdGgKCSAqIFVzZSBjYWNoZSBhbmQgc2F2ZSBjYWNoZWQgcmVzdWx0cyBpZiBwb3NzaWJsZQoJICoKCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmlsZV9wYXRoCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gR2V0UnVsZXMoICRmaWxlX3BhdGggKXsKCgkJJHRoaXMtPlNldElucHV0KCRmaWxlX3BhdGgpOwoKCQkkY2FjaGVfZmlsZSA9ICR0aGlzLT5DYWNoZUZpbGUoICRmaWxlX3BhdGggKTsKCQlpZiggJGNhY2hlX2ZpbGUgKXsKCQkJaWYoIExlc3NfUGFyc2VyOjokb3B0aW9uc1snY2FjaGVfbWV0aG9kJ10gPT0gJ2NhbGxiYWNrJyApewoJCQkJaWYoIGlzX2NhbGxhYmxlKExlc3NfUGFyc2VyOjokb3B0aW9uc1snY2FjaGVfY2FsbGJhY2tfZ2V0J10pICl7CgkJCQkJJGNhY2hlID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoCgkJCQkJCUxlc3NfUGFyc2VyOjokb3B0aW9uc1snY2FjaGVfY2FsbGJhY2tfZ2V0J10sCgkJCQkJCWFycmF5KCR0aGlzLCAkZmlsZV9wYXRoLCAkY2FjaGVfZmlsZSkKCQkJCQkpOwoKCQkJCQlpZiggJGNhY2hlICl7CgkJCQkJCSR0aGlzLT5VbnNldElucHV0KCk7CgkJCQkJCXJldHVybiAkY2FjaGU7CgkJCQkJfQoJCQkJfQoKCQkJfWVsc2VpZiggZmlsZV9leGlzdHMoJGNhY2hlX2ZpbGUpICl7CgkJCQlzd2l0Y2goTGVzc19QYXJzZXI6OiRvcHRpb25zWydjYWNoZV9tZXRob2QnXSl7CgoJCQkJCS8vIFVzaW5nIHNlcmlhbGl6ZQoJCQkJCS8vIEZhc3RlciBidXQgdXNlcyBtb3JlIG1lbW9yeQoJCQkJCWNhc2UgJ3NlcmlhbGl6ZSc6CgkJCQkJCSRjYWNoZSA9IHVuc2VyaWFsaXplKGZpbGVfZ2V0X2NvbnRlbnRzKCRjYWNoZV9maWxlKSk7CgkJCQkJCWlmKCAkY2FjaGUgKXsKCQkJCQkJCXRvdWNoKCRjYWNoZV9maWxlKTsKCQkJCQkJCSR0aGlzLT5VbnNldElucHV0KCk7CgkJCQkJCQlyZXR1cm4gJGNhY2hlOwoJCQkJCQl9CgkJCQkJYnJlYWs7CgoKCQkJCQkvLyBVc2luZyBnZW5lcmF0ZWQgcGhwIGNvZGUKCQkJCQljYXNlICd2YXJfZXhwb3J0JzoKCQkJCQljYXNlICdwaHAnOgoJCQkJCSR0aGlzLT5VbnNldElucHV0KCk7CgkJCQkJcmV0dXJuIGluY2x1ZGUoJGNhY2hlX2ZpbGUpOwoJCQkJfQoJCQl9CgkJfQoKCQkkcnVsZXMgPSAkdGhpcy0+cGFyc2VQcmltYXJ5KCk7CgoJCWlmKCAkdGhpcy0+cG9zIDwgJHRoaXMtPmlucHV0X2xlbiApewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ2h1bmsoJHRoaXMtPmlucHV0LCBudWxsLCAkdGhpcy0+ZnVydGhlc3QsICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbyk7CgkJfQoKCQkkdGhpcy0+VW5zZXRJbnB1dCgpOwoKCgkJLy9zYXZlIHRoZSBjYWNoZQoJCWlmKCAkY2FjaGVfZmlsZSApewoJCQlpZiggTGVzc19QYXJzZXI6OiRvcHRpb25zWydjYWNoZV9tZXRob2QnXSA9PSAnY2FsbGJhY2snICl7CgkJCQlpZiggaXNfY2FsbGFibGUoTGVzc19QYXJzZXI6OiRvcHRpb25zWydjYWNoZV9jYWxsYmFja19zZXQnXSkgKXsKCQkJCQljYWxsX3VzZXJfZnVuY19hcnJheSgKCQkJCQkJTGVzc19QYXJzZXI6OiRvcHRpb25zWydjYWNoZV9jYWxsYmFja19zZXQnXSwKCQkJCQkJYXJyYXkoJHRoaXMsICRmaWxlX3BhdGgsICRjYWNoZV9maWxlLCAkcnVsZXMpCgkJCQkJKTsKCQkJCX0KCgkJCX1lbHNlewoJCQkJLy9tc2coJ3dyaXRlIGNhY2hlIGZpbGUnKTsKCQkJCXN3aXRjaChMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2NhY2hlX21ldGhvZCddKXsKCQkJCQljYXNlICdzZXJpYWxpemUnOgoJCQkJCQlmaWxlX3B1dF9jb250ZW50cyggJGNhY2hlX2ZpbGUsIHNlcmlhbGl6ZSgkcnVsZXMpICk7CgkJCQkJYnJlYWs7CgkJCQkJY2FzZSAncGhwJzoKCQkJCQkJZmlsZV9wdXRfY29udGVudHMoICRjYWNoZV9maWxlLCAnPD9waHAgcmV0dXJuICcuc2VsZjo6QXJnU3RyaW5nKCRydWxlcykuJzsgPz4nICk7CgkJCQkJYnJlYWs7CgkJCQkJY2FzZSAndmFyX2V4cG9ydCc6CgkJCQkJCS8vUmVxdWlyZXMgX19zZXRfc3RhdGUoKQoJCQkJCQlmaWxlX3B1dF9jb250ZW50cyggJGNhY2hlX2ZpbGUsICc8P3BocCByZXR1cm4gJy52YXJfZXhwb3J0KCRydWxlcyx0cnVlKS4nOyA/PicgKTsKCQkJCQlicmVhazsKCQkJCX0KCgkJCQlMZXNzX0NhY2hlOjpDbGVhbkNhY2hlKCk7CgkJCX0KCQl9CgoJCXJldHVybiAkcnVsZXM7Cgl9CgoKCS8qKgoJICogU2V0IHVwIHRoZSBpbnB1dCBidWZmZXIKCSAqCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRJbnB1dCggJGZpbGVfcGF0aCApewoKCQlpZiggJGZpbGVfcGF0aCApewoJCQkkdGhpcy0+aW5wdXQgPSBmaWxlX2dldF9jb250ZW50cyggJGZpbGVfcGF0aCApOwoJCX0KCgkJJHRoaXMtPnBvcyA9ICR0aGlzLT5mdXJ0aGVzdCA9IDA7CgoJCS8vIFJlbW92ZSBwb3RlbnRpYWwgVVRGIEJ5dGUgT3JkZXIgTWFyawoJCSR0aGlzLT5pbnB1dCA9IHByZWdfcmVwbGFjZSgnL1xcR1x4RUZceEJCXHhCRi8nLCAnJywgJHRoaXMtPmlucHV0KTsKCQkkdGhpcy0+aW5wdXRfbGVuID0gc3RybGVuKCR0aGlzLT5pbnB1dCk7CgoKCQlpZiggTGVzc19QYXJzZXI6OiRvcHRpb25zWydzb3VyY2VNYXAnXSAmJiAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8gKXsKCQkJJHVyaSA9ICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mb1snY3VycmVudFVyaSddOwoJCQlMZXNzX1BhcnNlcjo6JGNvbnRlbnRzTWFwWyR1cmldID0gJHRoaXMtPmlucHV0OwoJCX0KCgl9CgoKCS8qKgoJICogRnJlZSB1cCBzb21lIG1lbW9yeQoJICoKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFVuc2V0SW5wdXQoKXsKCQl1bnNldCgkdGhpcy0+aW5wdXQsICR0aGlzLT5wb3MsICR0aGlzLT5pbnB1dF9sZW4sICR0aGlzLT5mdXJ0aGVzdCk7CgkJJHRoaXMtPnNhdmVTdGFjayA9IGFycmF5KCk7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBDYWNoZUZpbGUoICRmaWxlX3BhdGggKXsKCgkJaWYoICRmaWxlX3BhdGggJiYgJHRoaXMtPkNhY2hlRW5hYmxlZCgpICl7CgoJCQkkZW52ID0gZ2V0X29iamVjdF92YXJzKCR0aGlzLT5lbnYpOwoJCQl1bnNldCgkZW52WydmcmFtZXMnXSk7CgoJCQkkcGFydHMgPSBhcnJheSgpOwoJCQkkcGFydHNbXSA9ICRmaWxlX3BhdGg7CgkJCSRwYXJ0c1tdID0gZmlsZXNpemUoICRmaWxlX3BhdGggKTsKCQkJJHBhcnRzW10gPSBmaWxlbXRpbWUoICRmaWxlX3BhdGggKTsKCQkJJHBhcnRzW10gPSAkZW52OwoJCQkkcGFydHNbXSA9IExlc3NfVmVyc2lvbjo6Y2FjaGVfdmVyc2lvbjsKCQkJJHBhcnRzW10gPSBMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2NhY2hlX21ldGhvZCddOwoJCQlyZXR1cm4gTGVzc19DYWNoZTo6JGNhY2hlX2RpciAuIExlc3NfQ2FjaGU6OiRwcmVmaXggLiBiYXNlX2NvbnZlcnQoIHNoYTEoanNvbl9lbmNvZGUoJHBhcnRzKSApLCAxNiwgMzYpIC4gJy5sZXNzY2FjaGUnOwoJCX0KCX0KCgoJc3RhdGljIGZ1bmN0aW9uIEFkZFBhcnNlZEZpbGUoJGZpbGUpewoJCXNlbGY6OiRpbXBvcnRzW10gPSAkZmlsZTsKCX0KCglzdGF0aWMgZnVuY3Rpb24gQWxsUGFyc2VkRmlsZXMoKXsKCQlyZXR1cm4gc2VsZjo6JGltcG9ydHM7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gc3RyaW5nICRmaWxlCgkgKi8KCXN0YXRpYyBmdW5jdGlvbiBGaWxlUGFyc2VkKCRmaWxlKXsKCQlyZXR1cm4gaW5fYXJyYXkoJGZpbGUsc2VsZjo6JGltcG9ydHMpOwoJfQoKCglmdW5jdGlvbiBzYXZlKCkgewoJCSR0aGlzLT5zYXZlU3RhY2tbXSA9ICR0aGlzLT5wb3M7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiByZXN0b3JlKCkgewoJCSR0aGlzLT5wb3MgPSBhcnJheV9wb3AoJHRoaXMtPnNhdmVTdGFjayk7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBmb3JnZXQoKXsKCQlhcnJheV9wb3AoJHRoaXMtPnNhdmVTdGFjayk7Cgl9CgoKCXByaXZhdGUgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKCRvZmZzZXQgPSAwKSB7CgkJcmV0dXJuIHByZWdfbWF0Y2goJy9ccy8nLCR0aGlzLT5pbnB1dFsgJHRoaXMtPnBvcyArICRvZmZzZXRdKTsKCX0KCgkvKioKCSAqIFBhcnNlIGZyb20gYSB0b2tlbiwgcmVnZXhwIG9yIHN0cmluZywgYW5kIG1vdmUgZm9yd2FyZCBpZiBtYXRjaAoJICoKCSAqIEBwYXJhbSBhcnJheSAkdG9rcwoJICogQHJldHVybiBhcnJheQoJICovCglwcml2YXRlIGZ1bmN0aW9uIG1hdGNoKCR0b2tzKXsKCgkJLy8gVGhlIG1hdGNoIGlzIGNvbmZpcm1lZCwgYWRkIHRoZSBtYXRjaCBsZW5ndGggdG8gYHRoaXM6OnBvc2AsCgkJLy8gYW5kIGNvbnN1bWUgYW55IGV4dHJhIHdoaXRlLXNwYWNlIGNoYXJhY3RlcnMgKCcgJyB8fCAnXG4nKQoJCS8vIHdoaWNoIGNvbWUgYWZ0ZXIgdGhhdC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IExlU1MncwoJCS8vIGdyYW1tYXIgaXMgbW9zdGx5IHdoaXRlLXNwYWNlIGluc2Vuc2l0aXZlLgoJCS8vCgoJCWZvcmVhY2goJHRva3MgYXMgJHRvayl7CgoJCQkkY2hhciA9ICR0b2tbMF07CgoJCQlpZiggJGNoYXIgPT09ICcvJyApewoJCQkJJG1hdGNoID0gJHRoaXMtPk1hdGNoUmVnKCR0b2spOwoKCQkJCWlmKCAkbWF0Y2ggKXsKCQkJCQlyZXR1cm4gY291bnQoJG1hdGNoKSA9PT0gMSA/ICRtYXRjaFswXSA6ICRtYXRjaDsKCQkJCX0KCgkJCX1lbHNlaWYoICRjaGFyID09PSAnIycgKXsKCQkJCSRtYXRjaCA9ICR0aGlzLT5NYXRjaENoYXIoJHRva1sxXSk7CgoJCQl9ZWxzZXsKCQkJCS8vIE5vbi10ZXJtaW5hbCwgbWF0Y2ggdXNpbmcgYSBmdW5jdGlvbiBjYWxsCgkJCQkkbWF0Y2ggPSAkdGhpcy0+JHRvaygpOwoKCQkJfQoKCQkJaWYoICRtYXRjaCApewoJCQkJcmV0dXJuICRtYXRjaDsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIEBwYXJhbSBzdHJpbmdbXSAkdG9rcwoJICoKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gTWF0Y2hGdW5jcygkdG9rcyl7CgoJCWlmKCAkdGhpcy0+cG9zIDwgJHRoaXMtPmlucHV0X2xlbiApewoJCQlmb3JlYWNoKCR0b2tzIGFzICR0b2spewoJCQkJJG1hdGNoID0gJHRoaXMtPiR0b2soKTsKCQkJCWlmKCAkbWF0Y2ggKXsKCQkJCQlyZXR1cm4gJG1hdGNoOwoJCQkJfQoJCQl9CgkJfQoKCX0KCgkvLyBNYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0LAoJcHJpdmF0ZSBmdW5jdGlvbiBNYXRjaENoYXIoJHRvayl7CgkJaWYoICgkdGhpcy0+cG9zIDwgJHRoaXMtPmlucHV0X2xlbikgJiYgKCR0aGlzLT5pbnB1dFskdGhpcy0+cG9zXSA9PT0gJHRvaykgKXsKCQkJJHRoaXMtPnNraXBXaGl0ZXNwYWNlKDEpOwoJCQlyZXR1cm4gJHRvazsKCQl9Cgl9CgoJLy8gTWF0Y2ggYSByZWdleHAgZnJvbSB0aGUgY3VycmVudCBzdGFydCBwb2ludAoJcHJpdmF0ZSBmdW5jdGlvbiBNYXRjaFJlZygkdG9rKXsKCgkJaWYoIHByZWdfbWF0Y2goJHRvaywgJHRoaXMtPmlucHV0LCAkbWF0Y2gsIDAsICR0aGlzLT5wb3MpICl7CgkJCSR0aGlzLT5za2lwV2hpdGVzcGFjZShzdHJsZW4oJG1hdGNoWzBdKSk7CgkJCXJldHVybiAkbWF0Y2g7CgkJfQoJfQoKCgkvKioKCSAqIFNhbWUgYXMgbWF0Y2goKSwgYnV0IGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHBhcnNlciwKCSAqIGp1c3QgcmV0dXJuIHRoZSBtYXRjaC4KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICR0b2sKCSAqIEByZXR1cm4gaW50ZWdlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gUGVla1JlZygkdG9rKXsKCQlyZXR1cm4gcHJlZ19tYXRjaCgkdG9rLCAkdGhpcy0+aW5wdXQsICRtYXRjaCwgMCwgJHRoaXMtPnBvcyk7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gc3RyaW5nICR0b2sKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFBlZWtDaGFyKCR0b2spewoJCS8vcmV0dXJuICgkdGhpcy0+aW5wdXRbJHRoaXMtPnBvc10gPT09ICR0b2sgKTsKCQlyZXR1cm4gKCR0aGlzLT5wb3MgPCAkdGhpcy0+aW5wdXRfbGVuKSAmJiAoJHRoaXMtPmlucHV0WyR0aGlzLT5wb3NdID09PSAkdG9rICk7Cgl9CgoKCS8qKgoJICogQHBhcmFtIGludGVnZXIgJGxlbmd0aAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2tpcFdoaXRlc3BhY2UoJGxlbmd0aCl7CgoJCSR0aGlzLT5wb3MgKz0gJGxlbmd0aDsKCgkJZm9yKDsgJHRoaXMtPnBvcyA8ICR0aGlzLT5pbnB1dF9sZW47ICR0aGlzLT5wb3MrKyApewoJCQkkYyA9ICR0aGlzLT5pbnB1dFskdGhpcy0+cG9zXTsKCgkJCWlmKCAoJGMgIT09ICJcbiIpICYmICgkYyAhPT0gIlxyIikgJiYgKCRjICE9PSAiXHQiKSAmJiAoJGMgIT09ICcgJykgKXsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoKCgkvKioKCSAqIEBwYXJhbSBzdHJpbmcgJHRvawoJICogQHBhcmFtIHN0cmluZ3xudWxsICRtc2cKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGV4cGVjdCgkdG9rLCAkbXNnID0gTlVMTCkgewoJCSRyZXN1bHQgPSAkdGhpcy0+bWF0Y2goIGFycmF5KCR0b2spICk7CgkJaWYgKCEkcmVzdWx0KSB7CgkJCSR0aGlzLT5FcnJvciggJG1zZwk/ICJFeHBlY3RlZCAnIiAuICR0b2sgLiAiJyBnb3QgJyIgLiAkdGhpcy0+aW5wdXRbJHRoaXMtPnBvc10gLiAiJyIgOiAkbXNnICk7CgkJfSBlbHNlIHsKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoKCS8qKgoJICogQHBhcmFtIHN0cmluZyAkdG9rCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBleHBlY3RDaGFyKCR0b2ssICRtc2cgPSBudWxsICl7CgkJJHJlc3VsdCA9ICR0aGlzLT5NYXRjaENoYXIoJHRvayk7CgkJaWYoICEkcmVzdWx0ICl7CgkJCSR0aGlzLT5FcnJvciggJG1zZyA/ICJFeHBlY3RlZCAnIiAuICR0b2sgLiAiJyBnb3QgJyIgLiAkdGhpcy0+aW5wdXRbJHRoaXMtPnBvc10gLiAiJyIgOiAkbXNnICk7CgkJfWVsc2V7CgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCgkvLwoJLy8gSGVyZSBpbiwgdGhlIHBhcnNpbmcgcnVsZXMvZnVuY3Rpb25zCgkvLwoJLy8gVGhlIGJhc2ljIHN0cnVjdHVyZSBvZiB0aGUgc3ludGF4IHRyZWUgZ2VuZXJhdGVkIGlzIGFzIGZvbGxvd3M6CgkvLwoJLy8gICBSdWxlc2V0IC0+ICBSdWxlIC0+IFZhbHVlIC0+IEV4cHJlc3Npb24gLT4gRW50aXR5CgkvLwoJLy8gSGVyZSdzIHNvbWUgTEVTUyBjb2RlOgoJLy8KCS8vCS5jbGFzcyB7CgkvLwkgIGNvbG9yOiAjZmZmOwoJLy8JICBib3JkZXI6IDFweCBzb2xpZCAjMDAwOwoJLy8JICB3aWR0aDogQHcgKyA0cHg7CgkvLwkgID4gLmNoaWxkIHsuLi59CgkvLwl9CgkvLwoJLy8gQW5kIGhlcmUncyB3aGF0IHRoZSBwYXJzZSB0cmVlIG1pZ2h0IGxvb2sgbGlrZToKCS8vCgkvLwkgUnVsZXNldCAoU2VsZWN0b3IgJy5jbGFzcycsIFsKCS8vCQkgUnVsZSAoImNvbG9yIiwgIFZhbHVlIChbRXhwcmVzc2lvbiBbQ29sb3IgI2ZmZl1dKSkKCS8vCQkgUnVsZSAoImJvcmRlciIsIFZhbHVlIChbRXhwcmVzc2lvbiBbRGltZW5zaW9uIDFweF1bS2V5d29yZCAic29saWQiXVtDb2xvciAjMDAwXV0pKQoJLy8JCSBSdWxlICgid2lkdGgiLCAgVmFsdWUgKFtFeHByZXNzaW9uIFtPcGVyYXRpb24gIisiIFtWYXJpYWJsZSAiQHciXVtEaW1lbnNpb24gNHB4XV1dKSkKCS8vCQkgUnVsZXNldCAoU2VsZWN0b3IgW0VsZW1lbnQgJz4nLCAnLmNoaWxkJ10sIFsuLi5dKQoJLy8JIF0pCgkvLwoJLy8gIEluIGdlbmVyYWwsIG1vc3QgcnVsZXMgd2lsbCB0cnkgdG8gcGFyc2UgYSB0b2tlbiB3aXRoIHRoZSBgJCgpYCBmdW5jdGlvbiwgYW5kIGlmIHRoZSByZXR1cm4KCS8vICB2YWx1ZSBpcyB0cnVseSwgd2lsbCByZXR1cm4gYSBuZXcgbm9kZSwgb2YgdGhlIHJlbGV2YW50IHR5cGUuIFNvbWV0aW1lcywgd2UgbmVlZCB0byBjaGVjawoJLy8gIGZpcnN0LCBiZWZvcmUgcGFyc2luZywgdGhhdCdzIHdoZW4gd2UgdXNlIGBwZWVrKClgLgoJLy8KCgkvLwoJLy8gVGhlIGBwcmltYXJ5YCBydWxlIGlzIHRoZSAqZW50cnkqIGFuZCAqZXhpdCogcG9pbnQgb2YgdGhlIHBhcnNlci4KCS8vIFRoZSBydWxlcyBoZXJlIGNhbiBhcHBlYXIgYXQgYW55IGxldmVsIG9mIHRoZSBwYXJzZSB0cmVlLgoJLy8KCS8vIFRoZSByZWN1cnNpdmUgbmF0dXJlIG9mIHRoZSBncmFtbWFyIGlzIGFuIGludGVycGxheSBiZXR3ZWVuIHRoZSBgYmxvY2tgCgkvLyBydWxlLCB3aGljaCByZXByZXNlbnRzIGB7IC4uLiB9YCwgdGhlIGBydWxlc2V0YCBydWxlLCBhbmQgdGhpcyBgcHJpbWFyeWAgcnVsZSwKCS8vIGFzIHJlcHJlc2VudGVkIGJ5IHRoaXMgc2ltcGxpZmllZCBncmFtbWFyOgoJLy8KCS8vCSBwcmltYXJ5ICDihpIgIChydWxlc2V0IHwgcnVsZSkrCgkvLwkgcnVsZXNldCAg4oaSICBzZWxlY3RvcisgYmxvY2sKCS8vCSBibG9jawnihpIgICd7JyBwcmltYXJ5ICd9JwoJLy8KCS8vIE9ubHkgYXQgb25lIHBvaW50IGlzIHRoZSBwcmltYXJ5IHJ1bGUgbm90IGNhbGxlZCBmcm9tIHRoZQoJLy8gYmxvY2sgcnVsZTogYXQgdGhlIHJvb3QgbGV2ZWwuCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVByaW1hcnkoKXsKCQkkcm9vdCA9IGFycmF5KCk7CgoJCXdoaWxlKCB0cnVlICl7CgoJCQlpZiggJHRoaXMtPnBvcyA+PSAkdGhpcy0+aW5wdXRfbGVuICl7CgkJCQlicmVhazsKCQkJfQoKCQkJJG5vZGUgPSAkdGhpcy0+cGFyc2VFeHRlbmQodHJ1ZSk7CgkJCWlmKCAkbm9kZSApewoJCQkJJHJvb3QgPSBhcnJheV9tZXJnZSgkcm9vdCwkbm9kZSk7CgkJCQljb250aW51ZTsKCQkJfQoKCQkJLy8kbm9kZSA9ICR0aGlzLT5NYXRjaEZ1bmNzKCBhcnJheSggJ3BhcnNlTWl4aW5EZWZpbml0aW9uJywgJ3BhcnNlUnVsZScsICdwYXJzZVJ1bGVzZXQnLCAncGFyc2VNaXhpbkNhbGwnLCAncGFyc2VDb21tZW50JywgJ3BhcnNlRGlyZWN0aXZlJykpOwoJCQkkbm9kZSA9ICR0aGlzLT5NYXRjaEZ1bmNzKCBhcnJheSggJ3BhcnNlTWl4aW5EZWZpbml0aW9uJywgJ3BhcnNlTmFtZVZhbHVlJywgJ3BhcnNlUnVsZScsICdwYXJzZVJ1bGVzZXQnLCAncGFyc2VNaXhpbkNhbGwnLCAncGFyc2VDb21tZW50JywgJ3BhcnNlUnVsZXNldENhbGwnLCAncGFyc2VEaXJlY3RpdmUnKSk7CgoJCQlpZiggJG5vZGUgKXsKCQkJCSRyb290W10gPSAkbm9kZTsKCQkJfWVsc2VpZiggISR0aGlzLT5NYXRjaFJlZygnL1xcR1tcc1xuO10rLycpICl7CgkJCQlicmVhazsKCQkJfQoKICAgICAgICAgICAgaWYoICR0aGlzLT5QZWVrQ2hhcignfScpICl7CgkJCQlicmVhazsKCQkJfQoJCX0KCgkJcmV0dXJuICRyb290OwoJfQoKCgoJLy8gV2UgY3JlYXRlIGEgQ29tbWVudCBub2RlIGZvciBDU1MgY29tbWVudHMgYC8qICovYCwKCS8vIGJ1dCBrZWVwIHRoZSBMZVNTIGNvbW1lbnRzIGAvL2Agc2lsZW50LCBieSBqdXN0IHNraXBwaW5nCgkvLyBvdmVyIHRoZW0uCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQ29tbWVudCgpewoKCQlpZiggJHRoaXMtPmlucHV0WyR0aGlzLT5wb3NdICE9PSAnLycgKXsKCQkJcmV0dXJuOwoJCX0KCgkJaWYoICR0aGlzLT5pbnB1dFskdGhpcy0+cG9zKzFdID09PSAnLycgKXsKCQkJJG1hdGNoID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHXC9cLy4qLycpOwoJCQlyZXR1cm4gJHRoaXMtPk5ld09iajQoJ0xlc3NfVHJlZV9Db21tZW50JyxhcnJheSgkbWF0Y2hbMF0sIHRydWUsICR0aGlzLT5wb3MsICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbykpOwoJCX0KCgkJLy8kY29tbWVudCA9ICR0aGlzLT5NYXRjaFJlZygnL1xcR1wvXCooPzpbXipdfFwqK1teXC8qXSkqXCorXC9cbj8vJyk7CgkJJGNvbW1lbnQgPSAkdGhpcy0+TWF0Y2hSZWcoJy9cXEdcL1wqKD9zKS4qP1wqK1wvXG4/LycpOy8vbm90IHRoZSBzYW1lIGFzIGxlc3MuanMgdG8gcHJldmVudCBmYXRhbCBlcnJvcnMKCQlpZiggJGNvbW1lbnQgKXsKCQkJcmV0dXJuICR0aGlzLT5OZXdPYmo0KCdMZXNzX1RyZWVfQ29tbWVudCcsYXJyYXkoJGNvbW1lbnRbMF0sIGZhbHNlLCAkdGhpcy0+cG9zLCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQl9Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUNvbW1lbnRzKCl7CgkJJGNvbW1lbnRzID0gYXJyYXkoKTsKCgkJd2hpbGUoICR0aGlzLT5wb3MgPCAkdGhpcy0+aW5wdXRfbGVuICl7CgkJCSRjb21tZW50ID0gJHRoaXMtPnBhcnNlQ29tbWVudCgpOwoJCQlpZiggISRjb21tZW50ICl7CgkJCQlicmVhazsKCQkJfQoKCQkJJGNvbW1lbnRzW10gPSAkY29tbWVudDsKCQl9CgoJCXJldHVybiAkY29tbWVudHM7Cgl9CgoKCgkvLwoJLy8gQSBzdHJpbmcsIHdoaWNoIHN1cHBvcnRzIGVzY2FwaW5nICIgYW5kICcKCS8vCgkvLwkgIm1pbGt5IHdheSIgJ2hlXCdzIHRoZSBvbmUhJwoJLy8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VFbnRpdGllc1F1b3RlZCgpIHsKCQkkaiA9ICR0aGlzLT5wb3M7CgkJJGUgPSBmYWxzZTsKCQkkaW5kZXggPSAkdGhpcy0+cG9zOwoKCQlpZiggJHRoaXMtPmlucHV0WyR0aGlzLT5wb3NdID09PSAnficgKXsKCQkJJGorKzsKCQkJJGUgPSB0cnVlOyAvLyBFc2NhcGVkIHN0cmluZ3MKCQl9CgoJCWlmKCAkdGhpcy0+aW5wdXRbJGpdICE9ICciJyAmJiAkdGhpcy0+aW5wdXRbJGpdICE9PSAiJyIgKXsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCRlKSB7CgkJCSR0aGlzLT5NYXRjaENoYXIoJ34nKTsKCQl9CgogICAgICAgICAgICAgICAgLy8gRml4IGZvciAjMTI0OiBtYXRjaCBlc2NhcGVkIG5ld2xpbmVzCiAgICAgICAgICAgICAgICAvLyRzdHIgPSAkdGhpcy0+TWF0Y2hSZWcoJy9cXEciKCg/OlteIlxcXFxcclxuXXxcXFxcLikqKSJ8XCcoKD86W15cJ1xcXFxcclxuXXxcXFxcLikqKVwnLycpOwoJCSRzdHIgPSAkdGhpcy0+TWF0Y2hSZWcoJy9cXEciKCg/OlteIlxcXFxcclxuXXxcXFxcLnxcXFxcXHJcbnxcXFxcW1xuXHJcZl0pKikifFwnKCg/OlteXCdcXFxcXHJcbl18XFxcXC58XFxcXFxyXG58XFxcXFtcblxyXGZdKSopXCcvJyk7CgoJCWlmKCAkc3RyICl7CgkJCSRyZXN1bHQgPSAkc3RyWzBdWzBdID09ICciJyA/ICRzdHJbMV0gOiAkc3RyWzJdOwoJCQlyZXR1cm4gJHRoaXMtPk5ld09iajUoJ0xlc3NfVHJlZV9RdW90ZWQnLGFycmF5KCRzdHJbMF0sICRyZXN1bHQsICRlLCAkaW5kZXgsICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbykgKTsKCQl9CgkJcmV0dXJuOwoJfQoKCgkvLwoJLy8gQSBjYXRjaC1hbGwgd29yZCwgc3VjaCBhczoKCS8vCgkvLwkgYmxhY2sgYm9yZGVyLWNvbGxhcHNlCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUVudGl0aWVzS2V5d29yZCgpewoKCQkvLyRrID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHW19BLVphLXotXVtfQS1aYS16MC05LV0qLycpOwoJCSRrID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHJXxcXEdbX0EtWmEtei1dW19BLVphLXowLTktXSovJyk7CgkJaWYoICRrICl7CgkJCSRrID0gJGtbMF07CgkJCSRjb2xvciA9ICR0aGlzLT5mcm9tS2V5d29yZCgkayk7CgkJCWlmKCAkY29sb3IgKXsKCQkJCXJldHVybiAkY29sb3I7CgkJCX0KCQkJcmV0dXJuICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfS2V5d29yZCcsJGspOwoJCX0KCX0KCgkvLyBkdXBsaWNhdGUgb2YgTGVzc19UcmVlX0NvbG9yOjpGcm9tS2V5d29yZAoJcHJpdmF0ZSBmdW5jdGlvbiBGcm9tS2V5d29yZCggJGtleXdvcmQgKXsKCQkka2V5d29yZCA9IHN0cnRvbG93ZXIoJGtleXdvcmQpOwoKCQlpZiggTGVzc19Db2xvcnM6Omhhc093blByb3BlcnR5KCRrZXl3b3JkKSApewoJCQkvLyBkZXRlY3QgbmFtZWQgY29sb3IKCQkJcmV0dXJuICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfQ29sb3InLHN1YnN0cihMZXNzX0NvbG9yczo6Y29sb3IoJGtleXdvcmQpLCAxKSk7CgkJfQoKCQlpZiggJGtleXdvcmQgPT09ICd0cmFuc3BhcmVudCcgKXsKCQkJcmV0dXJuICR0aGlzLT5OZXdPYmozKCdMZXNzX1RyZWVfQ29sb3InLCBhcnJheSggYXJyYXkoMCwgMCwgMCksIDAsIHRydWUpKTsKCQl9Cgl9CgoJLy8KCS8vIEEgZnVuY3Rpb24gY2FsbAoJLy8KCS8vCSByZ2IoMjU1LCAwLCAyNTUpCgkvLwoJLy8gV2UgYWxzbyB0cnkgdG8gY2F0Y2ggSUUncyBgYWxwaGEoKWAsIGJ1dCBsZXQgdGhlIGBhbHBoYWAgcGFyc2VyCgkvLyBkZWFsIHdpdGggdGhlIGRldGFpbHMuCgkvLwoJLy8gVGhlIGFyZ3VtZW50cyBhcmUgcGFyc2VkIHdpdGggdGhlIGBlbnRpdGllcy5hcmd1bWVudHNgIHBhcnNlci4KCS8vCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRW50aXRpZXNDYWxsKCl7CgkJJGluZGV4ID0gJHRoaXMtPnBvczsKCgkJaWYoICFwcmVnX21hdGNoKCcvXFxHKFtcdy1dK3wlfHByb2dpZDpbXHdcLl0rKVwoLycsICR0aGlzLT5pbnB1dCwgJG5hbWUsMCwkdGhpcy0+cG9zKSApewoJCQlyZXR1cm47CgkJfQoJCSRuYW1lID0gJG5hbWVbMV07CgkJJG5hbWVMQyA9IHN0cnRvbG93ZXIoJG5hbWUpOwoKCQlpZiAoJG5hbWVMQyA9PT0gJ3VybCcpIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoKCQkkdGhpcy0+cG9zICs9IHN0cmxlbigkbmFtZSk7CgoJCWlmKCAkbmFtZUxDID09PSAnYWxwaGEnICl7CgkJCSRhbHBoYV9yZXQgPSAkdGhpcy0+cGFyc2VBbHBoYSgpOwoJCQlpZiggJGFscGhhX3JldCApewoJCQkJcmV0dXJuICRhbHBoYV9yZXQ7CgkJCX0KCQl9CgoJCSR0aGlzLT5NYXRjaENoYXIoJygnKTsgLy8gUGFyc2UgdGhlICcoJyBhbmQgY29uc3VtZSB3aGl0ZXNwYWNlLgoKCQkkYXJncyA9ICR0aGlzLT5wYXJzZUVudGl0aWVzQXJndW1lbnRzKCk7CgoJCWlmKCAhJHRoaXMtPk1hdGNoQ2hhcignKScpICl7CgkJCXJldHVybjsKCQl9CgoJCWlmICgkbmFtZSkgewoJCQlyZXR1cm4gJHRoaXMtPk5ld09iajQoJ0xlc3NfVHJlZV9DYWxsJyxhcnJheSgkbmFtZSwgJGFyZ3MsICRpbmRleCwgJHRoaXMtPmVudi0+Y3VycmVudEZpbGVJbmZvKSApOwoJCX0KCX0KCgkvKioKCSAqIFBhcnNlIGEgbGlzdCBvZiBhcmd1bWVudHMKCSAqCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VFbnRpdGllc0FyZ3VtZW50cygpewoKCQkkYXJncyA9IGFycmF5KCk7CgkJd2hpbGUoIHRydWUgKXsKCQkJJGFyZyA9ICR0aGlzLT5NYXRjaEZ1bmNzKCBhcnJheSgncGFyc2VFbnRpdGllc0Fzc2lnbm1lbnQnLCdwYXJzZUV4cHJlc3Npb24nKSApOwoJCQlpZiggISRhcmcgKXsKCQkJCWJyZWFrOwoJCQl9CgoJCQkkYXJnc1tdID0gJGFyZzsKCQkJaWYoICEkdGhpcy0+TWF0Y2hDaGFyKCcsJykgKXsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXJldHVybiAkYXJnczsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRW50aXRpZXNMaXRlcmFsKCl7CgkJcmV0dXJuICR0aGlzLT5NYXRjaEZ1bmNzKCBhcnJheSgncGFyc2VFbnRpdGllc0RpbWVuc2lvbicsJ3BhcnNlRW50aXRpZXNDb2xvcicsJ3BhcnNlRW50aXRpZXNRdW90ZWQnLCdwYXJzZVVuaWNvZGVEZXNjcmlwdG9yJykgKTsKCX0KCgkvLyBBc3NpZ25tZW50cyBhcmUgYXJndW1lbnQgZW50aXRpZXMgZm9yIGNhbGxzLgoJLy8gVGhleSBhcmUgcHJlc2VudCBpbiBpZSBmaWx0ZXIgcHJvcGVydGllcyBhcyBzaG93biBiZWxvdy4KCS8vCgkvLwkgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoICpvcGFjaXR5PTUwKiApCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUVudGl0aWVzQXNzaWdubWVudCgpIHsKCgkJJGtleSA9ICR0aGlzLT5NYXRjaFJlZygnL1xcR1x3Kyg/PVxzPz0pLycpOwoJCWlmKCAhJGtleSApewoJCQlyZXR1cm47CgkJfQoKCQlpZiggISR0aGlzLT5NYXRjaENoYXIoJz0nKSApewoJCQlyZXR1cm47CgkJfQoKCQkkdmFsdWUgPSAkdGhpcy0+cGFyc2VFbnRpdHkoKTsKCQlpZiggJHZhbHVlICl7CgkJCXJldHVybiAkdGhpcy0+TmV3T2JqMignTGVzc19UcmVlX0Fzc2lnbm1lbnQnLGFycmF5KCRrZXlbMF0sICR2YWx1ZSkpOwoJCX0KCX0KCgkvLwoJLy8gUGFyc2UgdXJsKCkgdG9rZW5zCgkvLwoJLy8gV2UgdXNlIGEgc3BlY2lmaWMgcnVsZSBmb3IgdXJscywgYmVjYXVzZSB0aGV5IGRvbid0IHJlYWxseSBiZWhhdmUgbGlrZQoJLy8gc3RhbmRhcmQgZnVuY3Rpb24gY2FsbHMuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIGFyZ3VtZW50IGRvZXNuJ3QgaGF2ZQoJLy8gdG8gYmUgZW5jbG9zZWQgd2l0aGluIGEgc3RyaW5nLCBzbyBpdCBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gRXhwcmVzc2lvbi4KCS8vCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRW50aXRpZXNVcmwoKXsKCgoJCWlmKCAkdGhpcy0+aW5wdXRbJHRoaXMtPnBvc10gIT09ICd1JyB8fCAhJHRoaXMtPm1hdGNoUmVnKCcvXFxHdXJsXCgvJykgKXsKCQkJcmV0dXJuOwoJCX0KCgkJJHZhbHVlID0gJHRoaXMtPm1hdGNoKCBhcnJheSgncGFyc2VFbnRpdGllc1F1b3RlZCcsJ3BhcnNlRW50aXRpZXNWYXJpYWJsZScsJy9cXEdkYXRhXDouKj9bXlwpXSsvJywnL1xcRyg/Oig/OlxcXFxbXChcKVwnIl0pfFteXChcKVwnIl0pKy8nKSApOwoJCWlmKCAhJHZhbHVlICl7CgkJCSR2YWx1ZSA9ICcnOwoJCX0KCgoJCSR0aGlzLT5leHBlY3RDaGFyKCcpJyk7CgoKCQlpZiggaXNzZXQoJHZhbHVlLT52YWx1ZSkgfHwgJHZhbHVlIGluc3RhbmNlb2YgTGVzc19UcmVlX1ZhcmlhYmxlICl7CgkJCXJldHVybiAkdGhpcy0+TmV3T2JqMignTGVzc19UcmVlX1VybCcsYXJyYXkoJHZhbHVlLCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQl9CgoJCXJldHVybiAkdGhpcy0+TmV3T2JqMignTGVzc19UcmVlX1VybCcsIGFycmF5KCAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX0Fub255bW91cycsJHZhbHVlKSwgJHRoaXMtPmVudi0+Y3VycmVudEZpbGVJbmZvKSApOwoJfQoKCgkvLwoJLy8gQSBWYXJpYWJsZSBlbnRpdHksIHN1Y2ggYXMgYEBmaW5rYCwgaW4KCS8vCgkvLwkgd2lkdGg6IEBmaW5rICsgMnB4CgkvLwoJLy8gV2UgdXNlIGEgZGlmZmVyZW50IHBhcnNlciBmb3IgdmFyaWFibGUgZGVmaW5pdGlvbnMsCgkvLyBzZWUgYHBhcnNlcnMudmFyaWFibGVgLgoJLy8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VFbnRpdGllc1ZhcmlhYmxlKCl7CgkJJGluZGV4ID0gJHRoaXMtPnBvczsKCQlpZiAoJHRoaXMtPlBlZWtDaGFyKCdAJykgJiYgKCRuYW1lID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHQEA/W1x3LV0rLycpKSkgewoJCQlyZXR1cm4gJHRoaXMtPk5ld09iajMoJ0xlc3NfVHJlZV9WYXJpYWJsZScsIGFycmF5KCAkbmFtZVswXSwgJGluZGV4LCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQl9Cgl9CgoKCS8vIEEgdmFyaWFibGUgZW50aXR5IHVzZWluZyB0aGUgcHJvdGVjdGl2ZSB7fSBlLmcuIEB7dmFyfQoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUVudGl0aWVzVmFyaWFibGVDdXJseSgpIHsKCQkkaW5kZXggPSAkdGhpcy0+cG9zOwoKCQlpZiggJHRoaXMtPmlucHV0X2xlbiA+ICgkdGhpcy0+cG9zKzEpICYmICR0aGlzLT5pbnB1dFskdGhpcy0+cG9zXSA9PT0gJ0AnICYmICgkY3VybHkgPSAkdGhpcy0+TWF0Y2hSZWcoJy9cXEdAXHsoW1x3LV0rKVx9LycpKSApewoJCQlyZXR1cm4gJHRoaXMtPk5ld09iajMoJ0xlc3NfVHJlZV9WYXJpYWJsZScsYXJyYXkoJ0AnLiRjdXJseVsxXSwgJGluZGV4LCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQl9Cgl9CgoJLy8KCS8vIEEgSGV4YWRlY2ltYWwgY29sb3IKCS8vCgkvLwkgIzRGM0MyRgoJLy8KCS8vIGByZ2JgIGFuZCBgaHNsYCBjb2xvcnMgYXJlIHBhcnNlZCB0aHJvdWdoIHRoZSBgZW50aXRpZXMuY2FsbGAgcGFyc2VyLgoJLy8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VFbnRpdGllc0NvbG9yKCl7CgkJaWYgKCR0aGlzLT5QZWVrQ2hhcignIycpICYmICgkcmdiID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHIyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkvJykpKSB7CgkJCXJldHVybiAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX0NvbG9yJywkcmdiWzFdKTsKCQl9Cgl9CgoJLy8KCS8vIEEgRGltZW5zaW9uLCB0aGF0IGlzLCBhIG51bWJlciBhbmQgYSB1bml0CgkvLwoJLy8JIDAuNWVtIDk1JQoJLy8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VFbnRpdGllc0RpbWVuc2lvbigpewoKCQkkYyA9IEBvcmQoJHRoaXMtPmlucHV0WyR0aGlzLT5wb3NdKTsKCgkJLy9JcyB0aGUgZmlyc3QgY2hhciBvZiB0aGUgZGltZW5zaW9uIDAtOSwgJy4nLCAnKycgb3IgJy0nCgkJaWYgKCgkYyA+IDU3IHx8ICRjIDwgNDMpIHx8ICRjID09PSA0NyB8fCAkYyA9PSA0NCl7CgkJCXJldHVybjsKCQl9CgoJCSR2YWx1ZSA9ICR0aGlzLT5NYXRjaFJlZygnL1xcRyhbKy1dP1xkKlwuP1xkKykoJXxbYS16XSspPy8nKTsKCQlpZiggJHZhbHVlICl7CgoJCQlpZiggaXNzZXQoJHZhbHVlWzJdKSApewoJCQkJcmV0dXJuICR0aGlzLT5OZXdPYmoyKCdMZXNzX1RyZWVfRGltZW5zaW9uJywgYXJyYXkoJHZhbHVlWzFdLCR2YWx1ZVsyXSkpOwoJCQl9CgkJCXJldHVybiAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX0RpbWVuc2lvbicsJHZhbHVlWzFdKTsKCQl9Cgl9CgoKCS8vCgkvLyBBIHVuaWNvZGUgZGVzY3JpcHRvciwgYXMgaXMgdXNlZCBpbiB1bmljb2RlLXJhbmdlCgkvLwoJLy8gVSswPz8gb3IgVSswMEExLTAwQTkKCS8vCglmdW5jdGlvbiBwYXJzZVVuaWNvZGVEZXNjcmlwdG9yKCkgewoJCSR1ZCA9ICR0aGlzLT5NYXRjaFJlZygnL1xcRyhVXCtbMC05YS1mQS1GP10rKShcLVswLTlhLWZBLUY/XSspPy8nKTsKCQlpZiggJHVkICl7CgkJCXJldHVybiAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX1VuaWNvZGVEZXNjcmlwdG9yJywgJHVkWzBdKTsKCQl9Cgl9CgoKCS8vCgkvLyBKYXZhU2NyaXB0IGNvZGUgdG8gYmUgZXZhbHVhdGVkCgkvLwoJLy8JIGB3aW5kb3cubG9jYXRpb24uaHJlZmAKCS8vCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRW50aXRpZXNKYXZhc2NyaXB0KCl7CgkJJGUgPSBmYWxzZTsKCQkkaiA9ICR0aGlzLT5wb3M7CgkJaWYoICR0aGlzLT5pbnB1dFskal0gPT09ICd+JyApewoJCQkkaisrOwoJCQkkZSA9IHRydWU7CgkJfQoJCWlmKCAkdGhpcy0+aW5wdXRbJGpdICE9PSAnYCcgKXsKCQkJcmV0dXJuOwoJCX0KCQlpZiggJGUgKXsKCQkJJHRoaXMtPk1hdGNoQ2hhcignficpOwoJCX0KCQkkc3RyID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHYChbXmBdKilgLycpOwoJCWlmKCAkc3RyICl7CgkJCXJldHVybiAkdGhpcy0+TmV3T2JqMygnTGVzc19UcmVlX0phdmFzY3JpcHQnLCBhcnJheSgkc3RyWzFdLCAkdGhpcy0+cG9zLCAkZSkpOwoJCX0KCX0KCgoJLy8KCS8vIFRoZSB2YXJpYWJsZSBwYXJ0IG9mIGEgdmFyaWFibGUgZGVmaW5pdGlvbi4gVXNlZCBpbiB0aGUgYHJ1bGVgIHBhcnNlcgoJLy8KCS8vCSBAZmluazoKCS8vCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGUoKXsKCQlpZiAoJHRoaXMtPlBlZWtDaGFyKCdAJykgJiYgKCRuYW1lID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHKEBbXHctXSspXHMqOi8nKSkpIHsKCQkJcmV0dXJuICRuYW1lWzFdOwoJCX0KCX0KCgoJLy8KCS8vIFRoZSB2YXJpYWJsZSBwYXJ0IG9mIGEgdmFyaWFibGUgZGVmaW5pdGlvbi4gVXNlZCBpbiB0aGUgYHJ1bGVgIHBhcnNlcgoJLy8KCS8vIEBmaW5rKCk7CgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVJ1bGVzZXRDYWxsKCl7CgoJCWlmKCAkdGhpcy0+aW5wdXRbJHRoaXMtPnBvc10gPT09ICdAJyAmJiAoJG5hbWUgPSAkdGhpcy0+TWF0Y2hSZWcoJy9cXEcoQFtcdy1dKylccypcKFxzKlwpXHMqOy8nKSkgKXsKCQkJcmV0dXJuICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfUnVsZXNldENhbGwnLCAkbmFtZVsxXSApOwoJCX0KCX0KCgoJLy8KCS8vIGV4dGVuZCBzeW50YXggLSB1c2VkIHRvIGV4dGVuZCBzZWxlY3RvcnMKCS8vCglmdW5jdGlvbiBwYXJzZUV4dGVuZCgkaXNSdWxlID0gZmFsc2UpewoKCQkkaW5kZXggPSAkdGhpcy0+cG9zOwoJCSRleHRlbmRMaXN0ID0gYXJyYXkoKTsKCgoJCWlmKCAhJHRoaXMtPk1hdGNoUmVnKCAkaXNSdWxlID8gJy9cXEcmOmV4dGVuZFwoLycgOiAnL1xcRzpleHRlbmRcKC8nICkgKXsgcmV0dXJuOyB9CgoJCWRvewoJCQkkb3B0aW9uID0gbnVsbDsKCQkJJGVsZW1lbnRzID0gYXJyYXkoKTsKCQkJd2hpbGUoIHRydWUgKXsKCQkJCSRvcHRpb24gPSAkdGhpcy0+TWF0Y2hSZWcoJy9cXEcoYWxsKSg/PVxzKihcKXwsKSkvJyk7CgkJCQlpZiggJG9wdGlvbiApeyBicmVhazsgfQoJCQkJJGUgPSAkdGhpcy0+cGFyc2VFbGVtZW50KCk7CgkJCQlpZiggISRlICl7IGJyZWFrOyB9CgkJCQkkZWxlbWVudHNbXSA9ICRlOwoJCQl9CgoJCQlpZiggJG9wdGlvbiApewoJCQkJJG9wdGlvbiA9ICRvcHRpb25bMV07CgkJCX0KCgkJCSRleHRlbmRMaXN0W10gPSAkdGhpcy0+TmV3T2JqMygnTGVzc19UcmVlX0V4dGVuZCcsIGFycmF5KCAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX1NlbGVjdG9yJywkZWxlbWVudHMpLCAkb3B0aW9uLCAkaW5kZXggKSk7CgoJCX13aGlsZSggJHRoaXMtPk1hdGNoQ2hhcigiLCIpICk7CgoJCSR0aGlzLT5leHBlY3QoJy9cXEdcKS8nKTsKCgkJaWYoICRpc1J1bGUgKXsKCQkJJHRoaXMtPmV4cGVjdCgnL1xcRzsvJyk7CgkJfQoKCQlyZXR1cm4gJGV4dGVuZExpc3Q7Cgl9CgoKCS8vCgkvLyBBIE1peGluIGNhbGwsIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQgbGlzdAoJLy8KCS8vCSAjbWl4aW5zID4gLnNxdWFyZSgjZmZmKTsKCS8vCSAucm91bmRlZCg0cHgsIGJsYWNrKTsKCS8vCSAuYnV0dG9uOwoJLy8KCS8vIFRoZSBgd2hpbGVgIGxvb3AgaXMgdGhlcmUgYmVjYXVzZSBtaXhpbnMgY2FuIGJlCgkvLyBuYW1lc3BhY2VkLCBidXQgd2Ugb25seSBzdXBwb3J0IHRoZSBjaGlsZCBhbmQgZGVzY2VuZGFudAoJLy8gc2VsZWN0b3IgZm9yIG5vdy4KCS8vCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlTWl4aW5DYWxsKCl7CgoJCSRjaGFyID0gJHRoaXMtPmlucHV0WyR0aGlzLT5wb3NdOwoJCWlmKCAkY2hhciAhPT0gJy4nICYmICRjaGFyICE9PSAnIycgKXsKCQkJcmV0dXJuOwoJCX0KCgkJJGluZGV4ID0gJHRoaXMtPnBvczsKCQkkdGhpcy0+c2F2ZSgpOyAvLyBzdG9wIHVzIGFic29yYmluZyBwYXJ0IG9mIGFuIGludmFsaWQgc2VsZWN0b3IKCgkJJGVsZW1lbnRzID0gJHRoaXMtPnBhcnNlTWl4aW5DYWxsRWxlbWVudHMoKTsKCgkJaWYoICRlbGVtZW50cyApewoKCQkJaWYoICR0aGlzLT5NYXRjaENoYXIoJygnKSApewoJCQkJJHJldHVybmVkID0gJHRoaXMtPnBhcnNlTWl4aW5BcmdzKHRydWUpOwoJCQkJJGFyZ3MgPSAkcmV0dXJuZWRbJ2FyZ3MnXTsKCQkJCSR0aGlzLT5leHBlY3RDaGFyKCcpJyk7CgkJCX1lbHNlewoJCQkJJGFyZ3MgPSBhcnJheSgpOwoJCQl9CgoJCQkkaW1wb3J0YW50ID0gJHRoaXMtPnBhcnNlSW1wb3J0YW50KCk7CgoJCQlpZiggJHRoaXMtPnBhcnNlRW5kKCkgKXsKCQkJCSR0aGlzLT5mb3JnZXQoKTsKCQkJCXJldHVybiAkdGhpcy0+TmV3T2JqNSgnTGVzc19UcmVlX01peGluX0NhbGwnLCBhcnJheSggJGVsZW1lbnRzLCAkYXJncywgJGluZGV4LCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8sICRpbXBvcnRhbnQpKTsKCQkJfQoJCX0KCgkJJHRoaXMtPnJlc3RvcmUoKTsKCX0KCgoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZU1peGluQ2FsbEVsZW1lbnRzKCl7CgkJJGVsZW1lbnRzID0gYXJyYXkoKTsKCQkkYyA9IG51bGw7CgoJCXdoaWxlKCB0cnVlICl7CgkJCSRlbGVtSW5kZXggPSAkdGhpcy0+cG9zOwoJCQkkZSA9ICR0aGlzLT5NYXRjaFJlZygnL1xcR1sjLl0oPzpbXHctXXxcXFxcKD86W0EtRmEtZjAtOV17MSw2fSA/fFteQS1GYS1mMC05XSkpKy8nKTsKCQkJaWYoICEkZSApewoJCQkJYnJlYWs7CgkJCX0KCQkJJGVsZW1lbnRzW10gPSAkdGhpcy0+TmV3T2JqNCgnTGVzc19UcmVlX0VsZW1lbnQnLCBhcnJheSgkYywgJGVbMF0sICRlbGVtSW5kZXgsICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbykpOwoJCQkkYyA9ICR0aGlzLT5NYXRjaENoYXIoJz4nKTsKCQl9CgoJCXJldHVybiAkZWxlbWVudHM7Cgl9CgoKCgkvKioKCSAqIEBwYXJhbSBib29sZWFuICRpc0NhbGwKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZU1peGluQXJncyggJGlzQ2FsbCApewoJCSRleHByZXNzaW9ucyA9IGFycmF5KCk7CgkJJGFyZ3NTZW1pQ29sb24gPSBhcnJheSgpOwoJCSRpc1NlbWlDb2xvblNlcGVyYXRlZCA9IG51bGw7CgkJJGFyZ3NDb21tYSA9IGFycmF5KCk7CgkJJGV4cHJlc3Npb25Db250YWluc05hbWVkID0gbnVsbDsKCQkkbmFtZSA9IG51bGw7CgkJJHJldHVybmVyID0gYXJyYXkoJ2FyZ3MnPT5hcnJheSgpLCAndmFyaWFkaWMnPT4gZmFsc2UpOwoKCQkkdGhpcy0+c2F2ZSgpOwoKCQl3aGlsZSggdHJ1ZSApewoJCQlpZiggJGlzQ2FsbCApewoJCQkJJGFyZyA9ICR0aGlzLT5NYXRjaEZ1bmNzKCBhcnJheSggJ3BhcnNlRGV0YWNoZWRSdWxlc2V0JywncGFyc2VFeHByZXNzaW9uJyApICk7CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+cGFyc2VDb21tZW50cygpOwoJCQkJaWYoICR0aGlzLT5pbnB1dFsgJHRoaXMtPnBvcyBdID09PSAnLicgJiYgJHRoaXMtPk1hdGNoUmVnKCcvXFxHXC57M30vJykgKXsKCQkJCQkkcmV0dXJuZXJbJ3ZhcmlhZGljJ10gPSB0cnVlOwoJCQkJCWlmKCAkdGhpcy0+TWF0Y2hDaGFyKCI7IikgJiYgISRpc1NlbWlDb2xvblNlcGVyYXRlZCApewoJCQkJCQkkaXNTZW1pQ29sb25TZXBlcmF0ZWQgPSB0cnVlOwoJCQkJCX0KCgkJCQkJaWYoICRpc1NlbWlDb2xvblNlcGVyYXRlZCApewoJCQkJCQkkYXJnc1NlbWlDb2xvbltdID0gYXJyYXkoJ3ZhcmlhZGljJz0+dHJ1ZSk7CgkJCQkJfWVsc2V7CgkJCQkJCSRhcmdzQ29tbWFbXSA9IGFycmF5KCd2YXJpYWRpYyc9PnRydWUpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCSRhcmcgPSAkdGhpcy0+TWF0Y2hGdW5jcyggYXJyYXkoJ3BhcnNlRW50aXRpZXNWYXJpYWJsZScsJ3BhcnNlRW50aXRpZXNMaXRlcmFsJywncGFyc2VFbnRpdGllc0tleXdvcmQnKSApOwoJCQl9CgoJCQlpZiggISRhcmcgKXsKCQkJCWJyZWFrOwoJCQl9CgoKCQkJJG5hbWVMb29wID0gbnVsbDsKCQkJaWYoICRhcmcgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRXhwcmVzc2lvbiApewoJCQkJJGFyZy0+dGhyb3dBd2F5Q29tbWVudHMoKTsKCQkJfQoJCQkkdmFsdWUgPSAkYXJnOwoJCQkkdmFsID0gbnVsbDsKCgkJCWlmKCAkaXNDYWxsICl7CgkJCQkvLyBWYXJpYWJsZQoJCQkJaWYoIHByb3BlcnR5X2V4aXN0cygkYXJnLCd2YWx1ZScpICYmIGNvdW50KCRhcmctPnZhbHVlKSA9PSAxICl7CgkJCQkJJHZhbCA9ICRhcmctPnZhbHVlWzBdOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJJHZhbCA9ICRhcmc7CgkJCX0KCgoJCQlpZiggJHZhbCBpbnN0YW5jZW9mIExlc3NfVHJlZV9WYXJpYWJsZSApewoKCQkJCWlmKCAkdGhpcy0+TWF0Y2hDaGFyKCc6JykgKXsKCQkJCQlpZiggJGV4cHJlc3Npb25zICl7CgkJCQkJCWlmKCAkaXNTZW1pQ29sb25TZXBlcmF0ZWQgKXsKCQkJCQkJCSR0aGlzLT5FcnJvcignQ2Fubm90IG1peCA7IGFuZCAsIGFzIGRlbGltaXRlciB0eXBlcycpOwoJCQkJCQl9CgkJCQkJCSRleHByZXNzaW9uQ29udGFpbnNOYW1lZCA9IHRydWU7CgkJCQkJfQoKCQkJCQkvLyB3ZSBkbyBub3Qgc3VwcG9ydCBzZXR0aW5nIGEgcnVsZXNldCBhcyBhIGRlZmF1bHQgdmFyaWFibGUgLSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UKCQkJCQkvLyBIb3dldmVyIGlmIHdlIGRvIHdhbnQgdG8gYWRkIGl0LCB0aGVyZSBpcyBub3RoaW5nIGJsb2NraW5nIGl0LCBqdXN0IGRvbid0IGVycm9yCgkJCQkJLy8gYW5kIHJlbW92ZSBpc0NhbGwgZGVwZW5kZW5jeSBiZWxvdwoJCQkJCSR2YWx1ZSA9IG51bGw7CgkJCQkJaWYoICRpc0NhbGwgKXsKCQkJCQkJJHZhbHVlID0gJHRoaXMtPnBhcnNlRGV0YWNoZWRSdWxlc2V0KCk7CgkJCQkJfQoJCQkJCWlmKCAhJHZhbHVlICl7CgkJCQkJCSR2YWx1ZSA9ICR0aGlzLT5wYXJzZUV4cHJlc3Npb24oKTsKCQkJCQl9CgoJCQkJCWlmKCAhJHZhbHVlICl7CgkJCQkJCWlmKCAkaXNDYWxsICl7CgkJCQkJCQkkdGhpcy0+RXJyb3IoJ2NvdWxkIG5vdCB1bmRlcnN0YW5kIHZhbHVlIGZvciBuYW1lZCBhcmd1bWVudCcpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHRoaXMtPnJlc3RvcmUoKTsKCQkJCQkJCSRyZXR1cm5lclsnYXJncyddID0gYXJyYXkoKTsKCQkJCQkJCXJldHVybiAkcmV0dXJuZXI7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCSRuYW1lTG9vcCA9ICgkbmFtZSA9ICR2YWwtPm5hbWUpOwoJCQkJfWVsc2VpZiggISRpc0NhbGwgJiYgJHRoaXMtPk1hdGNoUmVnKCcvXFxHXC57M30vJykgKXsKCQkJCQkkcmV0dXJuZXJbJ3ZhcmlhZGljJ10gPSB0cnVlOwoJCQkJCWlmKCAkdGhpcy0+TWF0Y2hDaGFyKCI7IikgJiYgISRpc1NlbWlDb2xvblNlcGVyYXRlZCApewoJCQkJCQkkaXNTZW1pQ29sb25TZXBlcmF0ZWQgPSB0cnVlOwoJCQkJCX0KCQkJCQlpZiggJGlzU2VtaUNvbG9uU2VwZXJhdGVkICl7CgkJCQkJCSRhcmdzU2VtaUNvbG9uW10gPSBhcnJheSgnbmFtZSc9PiAkYXJnLT5uYW1lLCAndmFyaWFkaWMnID0+IHRydWUpOwoJCQkJCX1lbHNlewoJCQkJCQkkYXJnc0NvbW1hW10gPSBhcnJheSgnbmFtZSc9PiAkYXJnLT5uYW1lLCAndmFyaWFkaWMnID0+IHRydWUpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX1lbHNlaWYoICEkaXNDYWxsICl7CgkJCQkJJG5hbWUgPSAkbmFtZUxvb3AgPSAkdmFsLT5uYW1lOwoJCQkJCSR2YWx1ZSA9IG51bGw7CgkJCQl9CgkJCX0KCgkJCWlmKCAkdmFsdWUgKXsKCQkJCSRleHByZXNzaW9uc1tdID0gJHZhbHVlOwoJCQl9CgoJCQkkYXJnc0NvbW1hW10gPSBhcnJheSgnbmFtZSc9PiRuYW1lTG9vcCwgJ3ZhbHVlJz0+JHZhbHVlICk7CgoJCQlpZiggJHRoaXMtPk1hdGNoQ2hhcignLCcpICl7CgkJCQljb250aW51ZTsKCQkJfQoKCQkJaWYoICR0aGlzLT5NYXRjaENoYXIoJzsnKSB8fCAkaXNTZW1pQ29sb25TZXBlcmF0ZWQgKXsKCgkJCQlpZiggJGV4cHJlc3Npb25Db250YWluc05hbWVkICl7CgkJCQkJJHRoaXMtPkVycm9yKCdDYW5ub3QgbWl4IDsgYW5kICwgYXMgZGVsaW1pdGVyIHR5cGVzJyk7CgkJCQl9CgoJCQkJJGlzU2VtaUNvbG9uU2VwZXJhdGVkID0gdHJ1ZTsKCgkJCQlpZiggY291bnQoJGV4cHJlc3Npb25zKSA+IDEgKXsKCQkJCQkkdmFsdWUgPSAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX1ZhbHVlJywgJGV4cHJlc3Npb25zKTsKCQkJCX0KCQkJCSRhcmdzU2VtaUNvbG9uW10gPSBhcnJheSgnbmFtZSc9PiRuYW1lLCAndmFsdWUnPT4kdmFsdWUgKTsKCgkJCQkkbmFtZSA9IG51bGw7CgkJCQkkZXhwcmVzc2lvbnMgPSBhcnJheSgpOwoJCQkJJGV4cHJlc3Npb25Db250YWluc05hbWVkID0gZmFsc2U7CgkJCX0KCQl9CgoJCSR0aGlzLT5mb3JnZXQoKTsKCQkkcmV0dXJuZXJbJ2FyZ3MnXSA9ICgkaXNTZW1pQ29sb25TZXBlcmF0ZWQgPyAkYXJnc1NlbWlDb2xvbiA6ICRhcmdzQ29tbWEpOwoJCXJldHVybiAkcmV0dXJuZXI7Cgl9CgoKCgkvLwoJLy8gQSBNaXhpbiBkZWZpbml0aW9uLCB3aXRoIGEgbGlzdCBvZiBwYXJhbWV0ZXJzCgkvLwoJLy8JIC5yb3VuZGVkIChAcmFkaXVzOiAycHgsIEBjb2xvcikgewoJLy8JCS4uLgoJLy8JIH0KCS8vCgkvLyBVbnRpbCB3ZSBoYXZlIGEgZmluZXIgZ3JhaW5lZCBzdGF0ZS1tYWNoaW5lLCB3ZSBoYXZlIHRvCgkvLyBkbyBhIGxvb2stYWhlYWQsIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgbWl4aW4gY2FsbC4KCS8vIFNlZSB0aGUgYHJ1bGVgIGZ1bmN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgoJLy8KCS8vIFdlIHN0YXJ0IGJ5IG1hdGNoaW5nIGAucm91bmRlZCAoYCwgYW5kIHRoZW4gcHJvY2VlZCBvbiB0bwoJLy8gdGhlIGFyZ3VtZW50IGxpc3QsIHdoaWNoIGhhcyBvcHRpb25hbCBkZWZhdWx0IHZhbHVlcy4KCS8vIFdlIHN0b3JlIHRoZSBwYXJhbWV0ZXJzIGluIGBwYXJhbXNgLCB3aXRoIGEgYHZhbHVlYCBrZXksCgkvLyBpZiB0aGVyZSBpcyBhIHZhbHVlLCBzdWNoIGFzIGluIHRoZSBjYXNlIG9mIGBAcmFkaXVzYC4KCS8vCgkvLyBPbmNlIHdlJ3ZlIGdvdCBvdXIgcGFyYW1zIGxpc3QsIGFuZCBhIGNsb3NpbmcgYClgLCB3ZSBwYXJzZQoJLy8gdGhlIGB7Li4ufWAgYmxvY2suCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZU1peGluRGVmaW5pdGlvbigpewoJCSRjb25kID0gbnVsbDsKCgkJJGNoYXIgPSAkdGhpcy0+aW5wdXRbJHRoaXMtPnBvc107CgkJaWYoICgkY2hhciAhPT0gJy4nICYmICRjaGFyICE9PSAnIycpIHx8ICgkY2hhciA9PT0gJ3snICYmICR0aGlzLT5QZWVrUmVnKCcvXFxHW157XSpcfS8nKSkgKXsKCQkJcmV0dXJuOwoJCX0KCgkJJHRoaXMtPnNhdmUoKTsKCgkJJG1hdGNoID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHKFsjLl0oPzpbXHctXXxcXFwoPzpbQS1GYS1mMC05XXsxLDZ9ID98W15BLUZhLWYwLTldKSkrKVxzKlwoLycpOwoJCWlmKCAkbWF0Y2ggKXsKCQkJJG5hbWUgPSAkbWF0Y2hbMV07CgoJCQkkYXJnSW5mbyA9ICR0aGlzLT5wYXJzZU1peGluQXJncyggZmFsc2UgKTsKCQkJJHBhcmFtcyA9ICRhcmdJbmZvWydhcmdzJ107CgkJCSR2YXJpYWRpYyA9ICRhcmdJbmZvWyd2YXJpYWRpYyddOwoKCgkJCS8vIC5taXhpbmNhbGwoIkB7YX0iKTsKCQkJLy8gbG9va3MgYSBiaXQgbGlrZSBhIG1peGluIGRlZmluaXRpb24uLgoJCQkvLyBhbHNvCgkJCS8vIC5taXhpbmNhbGwoQGE6IHtydWxlOiBzZXQ7fSk7CgkJCS8vIHNvIHdlIGhhdmUgdG8gYmUgbmljZSBhbmQgcmVzdG9yZQoJCQlpZiggISR0aGlzLT5NYXRjaENoYXIoJyknKSApewoJCQkJJHRoaXMtPmZ1cnRoZXN0ID0gJHRoaXMtPnBvczsKCQkJCSR0aGlzLT5yZXN0b3JlKCk7CgkJCQlyZXR1cm47CgkJCX0KCgoJCQkkdGhpcy0+cGFyc2VDb21tZW50cygpOwoKCQkJaWYgKCR0aGlzLT5NYXRjaFJlZygnL1xcR3doZW4vJykpIHsgLy8gR3VhcmQKCQkJCSRjb25kID0gJHRoaXMtPmV4cGVjdCgncGFyc2VDb25kaXRpb25zJywgJ0V4cGVjdGVkIGNvbmRpdGlvbnMnKTsKCQkJfQoKCQkJJHJ1bGVzZXQgPSAkdGhpcy0+cGFyc2VCbG9jaygpOwoKCQkJaWYoIGlzX2FycmF5KCRydWxlc2V0KSApewoJCQkJJHRoaXMtPmZvcmdldCgpOwoJCQkJcmV0dXJuICR0aGlzLT5OZXdPYmo1KCdMZXNzX1RyZWVfTWl4aW5fRGVmaW5pdGlvbicsIGFycmF5KCAkbmFtZSwgJHBhcmFtcywgJHJ1bGVzZXQsICRjb25kLCAkdmFyaWFkaWMpKTsKCQkJfQoKCQkJJHRoaXMtPnJlc3RvcmUoKTsKCQl9ZWxzZXsKCQkJJHRoaXMtPmZvcmdldCgpOwoJCX0KCX0KCgkvLwoJLy8gRW50aXRpZXMgYXJlIHRoZSBzbWFsbGVzdCByZWNvZ25pemVkIHRva2VuLAoJLy8gYW5kIGNhbiBiZSBmb3VuZCBpbnNpZGUgYSBydWxlJ3MgdmFsdWUuCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUVudGl0eSgpewoKCQlyZXR1cm4gJHRoaXMtPk1hdGNoRnVuY3MoIGFycmF5KCdwYXJzZUVudGl0aWVzTGl0ZXJhbCcsJ3BhcnNlRW50aXRpZXNWYXJpYWJsZScsJ3BhcnNlRW50aXRpZXNVcmwnLCdwYXJzZUVudGl0aWVzQ2FsbCcsJ3BhcnNlRW50aXRpZXNLZXl3b3JkJywncGFyc2VFbnRpdGllc0phdmFzY3JpcHQnLCdwYXJzZUNvbW1lbnQnKSApOwoJfQoKCS8vCgkvLyBBIFJ1bGUgdGVybWluYXRvci4gTm90ZSB0aGF0IHdlIHVzZSBgcGVlaygpYCB0byBjaGVjayBmb3IgJ30nLAoJLy8gYmVjYXVzZSB0aGUgYGJsb2NrYCBydWxlIHdpbGwgYmUgZXhwZWN0aW5nIGl0LCBidXQgd2Ugc3RpbGwgbmVlZCB0byBtYWtlIHN1cmUKCS8vIGl0J3MgdGhlcmUsIGlmICc7JyB3YXMgb21taXR0ZWQuCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUVuZCgpewoJCXJldHVybiAkdGhpcy0+TWF0Y2hDaGFyKCc7JykgfHwgJHRoaXMtPlBlZWtDaGFyKCd9Jyk7Cgl9CgoJLy8KCS8vIElFJ3MgYWxwaGEgZnVuY3Rpb24KCS8vCgkvLwkgYWxwaGEob3BhY2l0eT04OCkKCS8vCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQWxwaGEoKXsKCgkJaWYgKCAhICR0aGlzLT5NYXRjaFJlZygnL1xcR1wob3BhY2l0eT0vaScpKSB7CgkJCXJldHVybjsKCQl9CgoJCSR2YWx1ZSA9ICR0aGlzLT5NYXRjaFJlZygnL1xcR1swLTldKy8nKTsKCQlpZiggJHZhbHVlICl7CgkJCSR2YWx1ZSA9ICR2YWx1ZVswXTsKCQl9ZWxzZXsKCQkJJHZhbHVlID0gJHRoaXMtPnBhcnNlRW50aXRpZXNWYXJpYWJsZSgpOwoJCQlpZiggISR2YWx1ZSApewoJCQkJcmV0dXJuOwoJCQl9CgkJfQoKCQkkdGhpcy0+ZXhwZWN0Q2hhcignKScpOwoJCXJldHVybiAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX0FscGhhJywkdmFsdWUpOwoJfQoKCgkvLwoJLy8gQSBTZWxlY3RvciBFbGVtZW50CgkvLwoJLy8JIGRpdgoJLy8JICsgaDEKCS8vCSAjc29ja3MKCS8vCSBpbnB1dFt0eXBlPSJ0ZXh0Il0KCS8vCgkvLyBFbGVtZW50cyBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgU2VsZWN0b3JzLAoJLy8gdGhleSBhcmUgbWFkZSBvdXQgb2YgYSBgQ29tYmluYXRvcmAgKHNlZSBjb21iaW5hdG9yIHJ1bGUpLAoJLy8gYW5kIGFuIGVsZW1lbnQgbmFtZSwgc3VjaCBhcyBhIHRhZyBhIGNsYXNzLCBvciBgKmAuCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUVsZW1lbnQoKXsKCQkkYyA9ICR0aGlzLT5wYXJzZUNvbWJpbmF0b3IoKTsKCQkkaW5kZXggPSAkdGhpcy0+cG9zOwoKCQkkZSA9ICR0aGlzLT5tYXRjaCggYXJyYXkoJy9cXEcoPzpcZCtcLlxkK3xcZCspJS8nLCAnL1xcRyg/OlsuI10/fDoqKSg/Oltcdy1dfFteXHgwMC1ceDlmXXxcXFxcKD86W0EtRmEtZjAtOV17MSw2fSA/fFteQS1GYS1mMC05XSkpKy8nLAoJCQknIyonLCAnIyYnLCAncGFyc2VBdHRyaWJ1dGUnLCAnL1xcR1woW14oKUBdK1wpLycsICcvXFxHW1wuI10oPz1AKS8nLCAncGFyc2VFbnRpdGllc1ZhcmlhYmxlQ3VybHknKSApOwoKCQlpZiggaXNfbnVsbCgkZSkgKXsKCQkJJHRoaXMtPnNhdmUoKTsKCQkJaWYoICR0aGlzLT5NYXRjaENoYXIoJygnKSApewoJCQkJaWYoICgkdiA9ICR0aGlzLT5wYXJzZVNlbGVjdG9yKCkpICYmICR0aGlzLT5NYXRjaENoYXIoJyknKSApewoJCQkJCSRlID0gJHRoaXMtPk5ld09iajEoJ0xlc3NfVHJlZV9QYXJlbicsJHYpOwoJCQkJCSR0aGlzLT5mb3JnZXQoKTsKCQkJCX1lbHNlewoJCQkJCSR0aGlzLT5yZXN0b3JlKCk7CgkJCQl9CgkJCX1lbHNlewoJCQkJJHRoaXMtPmZvcmdldCgpOwoJCQl9CgkJfQoKCQlpZiggIWlzX251bGwoJGUpICl7CgkJCXJldHVybiAkdGhpcy0+TmV3T2JqNCgnTGVzc19UcmVlX0VsZW1lbnQnLGFycmF5KCAkYywgJGUsICRpbmRleCwgJHRoaXMtPmVudi0+Y3VycmVudEZpbGVJbmZvKSk7CgkJfQoJfQoKCS8vCgkvLyBDb21iaW5hdG9ycyBjb21iaW5lIGVsZW1lbnRzIHRvZ2V0aGVyLCBpbiBhIFNlbGVjdG9yLgoJLy8KCS8vIEJlY2F1c2Ugb3VyIHBhcnNlciBpc24ndCB3aGl0ZS1zcGFjZSBzZW5zaXRpdmUsIHNwZWNpYWwgY2FyZQoJLy8gaGFzIHRvIGJlIHRha2VuLCB3aGVuIHBhcnNpbmcgdGhlIGRlc2NlbmRhbnQgY29tYmluYXRvciwgYCBgLAoJLy8gYXMgaXQncyBhbiBlbXB0eSBzcGFjZS4gV2UgaGF2ZSB0byBjaGVjayB0aGUgcHJldmlvdXMgY2hhcmFjdGVyCgkvLyBpbiB0aGUgaW5wdXQsIHRvIHNlZSBpZiBpdCdzIGEgYCBgIGNoYXJhY3Rlci4KCS8vCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQ29tYmluYXRvcigpewoJCWlmKCAkdGhpcy0+cG9zIDwgJHRoaXMtPmlucHV0X2xlbiApewoJCQkkYyA9ICR0aGlzLT5pbnB1dFskdGhpcy0+cG9zXTsKCQkJaWYgKCRjID09PSAnPicgfHwgJGMgPT09ICcrJyB8fCAkYyA9PT0gJ34nIHx8ICRjID09PSAnfCcgfHwgJGMgPT09ICdeJyApewoKCQkJCSR0aGlzLT5wb3MrKzsKCQkJCWlmKCAkdGhpcy0+aW5wdXRbJHRoaXMtPnBvc10gPT09ICdeJyApewoJCQkJCSRjID0gJ15eJzsKCQkJCQkkdGhpcy0+cG9zKys7CgkJCQl9CgoJCQkJJHRoaXMtPnNraXBXaGl0ZXNwYWNlKDApOwoKCQkJCXJldHVybiAkYzsKCQkJfQoKCQkJaWYoICR0aGlzLT5wb3MgPiAwICYmICR0aGlzLT5pc1doaXRlc3BhY2UoLTEpICl7CgkJCQlyZXR1cm4gJyAnOwoJCQl9CgkJfQoJfQoKCS8vCgkvLyBBIENTUyBzZWxlY3RvciAoc2VlIHNlbGVjdG9yIGJlbG93KQoJLy8gd2l0aCBsZXNzIGV4dGVuc2lvbnMgZS5nLiB0aGUgYWJpbGl0eSB0byBleHRlbmQgYW5kIGd1YXJkCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUxlc3NTZWxlY3RvcigpewoJCXJldHVybiAkdGhpcy0+cGFyc2VTZWxlY3Rvcih0cnVlKTsKCX0KCgkvLwoJLy8gQSBDU1MgU2VsZWN0b3IKCS8vCgkvLwkgLmNsYXNzID4gZGl2ICsgaDEKCS8vCSBsaSBhOmhvdmVyCgkvLwoJLy8gU2VsZWN0b3JzIGFyZSBtYWRlIG91dCBvZiBvbmUgb3IgbW9yZSBFbGVtZW50cywgc2VlIGFib3ZlLgoJLy8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VTZWxlY3RvciggJGlzTGVzcyA9IGZhbHNlICl7CgkJJGVsZW1lbnRzID0gYXJyYXkoKTsKCQkkZXh0ZW5kTGlzdCA9IGFycmF5KCk7CgkJJGNvbmRpdGlvbiA9IG51bGw7CgkJJHdoZW4gPSBmYWxzZTsKCQkkZXh0ZW5kID0gZmFsc2U7CgkJJGUgPSBudWxsOwoJCSRjID0gbnVsbDsKCQkkaW5kZXggPSAkdGhpcy0+cG9zOwoKCQl3aGlsZSggKCRpc0xlc3MgJiYgKCRleHRlbmQgPSAkdGhpcy0+cGFyc2VFeHRlbmQoKSkpIHx8ICgkaXNMZXNzICYmICgkd2hlbiA9ICR0aGlzLT5NYXRjaFJlZygnL1xcR3doZW4vJykgKSkgfHwgKCRlID0gJHRoaXMtPnBhcnNlRWxlbWVudCgpKSApewoJCQlpZiggJHdoZW4gKXsKCQkJCSRjb25kaXRpb24gPSAkdGhpcy0+ZXhwZWN0KCdwYXJzZUNvbmRpdGlvbnMnLCAnZXhwZWN0ZWQgY29uZGl0aW9uJyk7CgkJCX1lbHNlaWYoICRjb25kaXRpb24gKXsKCQkJCS8vZXJyb3IoIkNTUyBndWFyZCBjYW4gb25seSBiZSB1c2VkIGF0IHRoZSBlbmQgb2Ygc2VsZWN0b3IiKTsKCQkJfWVsc2VpZiggJGV4dGVuZCApewoJCQkJJGV4dGVuZExpc3QgPSBhcnJheV9tZXJnZSgkZXh0ZW5kTGlzdCwkZXh0ZW5kKTsKCQkJfWVsc2V7CgkJCQkvL2lmKCBjb3VudCgkZXh0ZW5kTGlzdCkgKXsKCQkJCQkvL2Vycm9yKCJFeHRlbmQgY2FuIG9ubHkgYmUgdXNlZCBhdCB0aGUgZW5kIG9mIHNlbGVjdG9yIik7CgkJCQkvL30KCQkJCWlmKCAkdGhpcy0+cG9zIDwgJHRoaXMtPmlucHV0X2xlbiApewoJCQkJCSRjID0gJHRoaXMtPmlucHV0WyAkdGhpcy0+cG9zIF07CgkJCQl9CgkJCQkkZWxlbWVudHNbXSA9ICRlOwoJCQkJJGUgPSBudWxsOwoJCQl9CgoJCQlpZiggJGMgPT09ICd7JyB8fCAkYyA9PT0gJ30nIHx8ICRjID09PSAnOycgfHwgJGMgPT09ICcsJyB8fCAkYyA9PT0gJyknKSB7IGJyZWFrOyB9CgkJfQoKCQlpZiggJGVsZW1lbnRzICl7CgkJCXJldHVybiAkdGhpcy0+TmV3T2JqNSgnTGVzc19UcmVlX1NlbGVjdG9yJyxhcnJheSgkZWxlbWVudHMsICRleHRlbmRMaXN0LCAkY29uZGl0aW9uLCAkaW5kZXgsICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbykpOwoJCX0KCQlpZiggJGV4dGVuZExpc3QgKSB7CgkJCSR0aGlzLT5FcnJvcignRXh0ZW5kIG11c3QgYmUgdXNlZCB0byBleHRlbmQgYSBzZWxlY3RvciwgaXQgY2Fubm90IGJlIHVzZWQgb24gaXRzIG93bicpOwoJCX0KCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlVGFnKCl7CgkJcmV0dXJuICggJHRhZyA9ICR0aGlzLT5NYXRjaFJlZygnL1xcR1tBLVphLXpdW0EtWmEtei1dKlswLTldPy8nKSApID8gJHRhZyA6ICR0aGlzLT5NYXRjaENoYXIoJyonKTsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlKCl7CgoJCSR2YWwgPSBudWxsOwoKCQlpZiggISR0aGlzLT5NYXRjaENoYXIoJ1snKSApewoJCQlyZXR1cm47CgkJfQoKCQkka2V5ID0gJHRoaXMtPnBhcnNlRW50aXRpZXNWYXJpYWJsZUN1cmx5KCk7CgkJaWYoICEka2V5ICl7CgkJCSRrZXkgPSAkdGhpcy0+ZXhwZWN0KCcvXFxHKD86W19BLVphLXowLTktXCpdKlx8KT8oPzpbX0EtWmEtejAtOS1dfFxcXFwuKSsvJyk7CgkJfQoKCQkkb3AgPSAkdGhpcy0+TWF0Y2hSZWcoJy9cXEdbfH4qJF5dPz0vJyk7CgkJaWYoICRvcCApewoJCQkkdmFsID0gJHRoaXMtPm1hdGNoKCBhcnJheSgncGFyc2VFbnRpdGllc1F1b3RlZCcsJy9cXEdbMC05XSslLycsJy9cXEdbXHctXSsvJywncGFyc2VFbnRpdGllc1ZhcmlhYmxlQ3VybHknKSApOwoJCX0KCgkJJHRoaXMtPmV4cGVjdENoYXIoJ10nKTsKCgkJcmV0dXJuICR0aGlzLT5OZXdPYmozKCdMZXNzX1RyZWVfQXR0cmlidXRlJyxhcnJheSggJGtleSwgJG9wWzBdLCAkdmFsKSk7Cgl9CgoJLy8KCS8vIFRoZSBgYmxvY2tgIHJ1bGUgaXMgdXNlZCBieSBgcnVsZXNldGAgYW5kIGBtaXhpbi5kZWZpbml0aW9uYC4KCS8vIEl0J3MgYSB3cmFwcGVyIGFyb3VuZCB0aGUgYHByaW1hcnlgIHJ1bGUsIHdpdGggYWRkZWQgYHt9YC4KCS8vCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQmxvY2soKXsKCQlpZiggJHRoaXMtPk1hdGNoQ2hhcigneycpICl7CgkJCSRjb250ZW50ID0gJHRoaXMtPnBhcnNlUHJpbWFyeSgpOwoJCQlpZiggJHRoaXMtPk1hdGNoQ2hhcignfScpICl7CgkJCQlyZXR1cm4gJGNvbnRlbnQ7CgkJCX0KCQl9Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUJsb2NrUnVsZXNldCgpewoJCSRibG9jayA9ICR0aGlzLT5wYXJzZUJsb2NrKCk7CgoJCWlmKCAkYmxvY2sgKXsKCQkJJGJsb2NrID0gJHRoaXMtPk5ld09iajIoJ0xlc3NfVHJlZV9SdWxlc2V0JyxhcnJheSggbnVsbCwgJGJsb2NrKSk7CgkJfQoKCQlyZXR1cm4gJGJsb2NrOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VEZXRhY2hlZFJ1bGVzZXQoKXsKCQkkYmxvY2tSdWxlc2V0ID0gJHRoaXMtPnBhcnNlQmxvY2tSdWxlc2V0KCk7CgkJaWYoICRibG9ja1J1bGVzZXQgKXsKCQkJcmV0dXJuICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfRGV0YWNoZWRSdWxlc2V0JywkYmxvY2tSdWxlc2V0KTsKCQl9Cgl9CgoJLy8KCS8vIGRpdiwgLmNsYXNzLCBib2R5ID4gcCB7Li4ufQoJLy8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VSdWxlc2V0KCl7CgkJJHNlbGVjdG9ycyA9IGFycmF5KCk7CgoJCSR0aGlzLT5zYXZlKCk7CgoJCXdoaWxlKCB0cnVlICl7CgkJCSRzID0gJHRoaXMtPnBhcnNlTGVzc1NlbGVjdG9yKCk7CgkJCWlmKCAhJHMgKXsKCQkJCWJyZWFrOwoJCQl9CgkJCSRzZWxlY3RvcnNbXSA9ICRzOwoJCQkkdGhpcy0+cGFyc2VDb21tZW50cygpOwoKCQkJaWYoICRzLT5jb25kaXRpb24gJiYgY291bnQoJHNlbGVjdG9ycykgPiAxICl7CgkJCQkkdGhpcy0+RXJyb3IoJ0d1YXJkcyBhcmUgb25seSBjdXJyZW50bHkgYWxsb3dlZCBvbiBhIHNpbmdsZSBzZWxlY3Rvci4nKTsKCQkJfQoKCQkJaWYoICEkdGhpcy0+TWF0Y2hDaGFyKCcsJykgKXsKCQkJCWJyZWFrOwoJCQl9CgkJCWlmKCAkcy0+Y29uZGl0aW9uICl7CgkJCQkkdGhpcy0+RXJyb3IoJ0d1YXJkcyBhcmUgb25seSBjdXJyZW50bHkgYWxsb3dlZCBvbiBhIHNpbmdsZSBzZWxlY3Rvci4nKTsKCQkJfQoJCQkkdGhpcy0+cGFyc2VDb21tZW50cygpOwoJCX0KCgoJCWlmKCAkc2VsZWN0b3JzICl7CgkJCSRydWxlcyA9ICR0aGlzLT5wYXJzZUJsb2NrKCk7CgkJCWlmKCBpc19hcnJheSgkcnVsZXMpICl7CgkJCQkkdGhpcy0+Zm9yZ2V0KCk7CgkJCQlyZXR1cm4gJHRoaXMtPk5ld09iajIoJ0xlc3NfVHJlZV9SdWxlc2V0JyxhcnJheSggJHNlbGVjdG9ycywgJHJ1bGVzKSk7IC8vTGVzc19FbnZpcm9ubWVudDo6JHN0cmljdEltcG9ydHMKCQkJfQoJCX0KCgkJLy8gQmFja3RyYWNrCgkJJHRoaXMtPmZ1cnRoZXN0ID0gJHRoaXMtPnBvczsKCQkkdGhpcy0+cmVzdG9yZSgpOwoJfQoKCS8qKgoJICogQ3VzdG9tIGxlc3MucGhwIHBhcnNlIGZ1bmN0aW9uIGZvciBmaW5kaW5nIHNpbXBsZSBuYW1lLXZhbHVlIGNzcyBwYWlycwoJICogZXg6IHdpZHRoOjEwMHB4OwoJICoKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZU5hbWVWYWx1ZSgpewoKCQkkaW5kZXggPSAkdGhpcy0+cG9zOwoJCSR0aGlzLT5zYXZlKCk7CgoKCQkvLyRtYXRjaCA9ICR0aGlzLT5NYXRjaFJlZygnL1xcRyhbYS16QS1aXC1dKylccyo6XHMqKCg/OlwnIik/W2EtekEtWjAtOVwtJSBcLiwhXSs/KD86XCciKT8pXHMqKFs7fV0pLycpOwoJCSRtYXRjaCA9ICR0aGlzLT5NYXRjaFJlZygnL1xcRyhbYS16QS1aXC1dKylccyo6XHMqKFtcJyJdP1sjYS16QS1aMC05XC0lXC4sXSs/W1wnIl0/KSAqKCEgKmltcG9ydGFudCk/XHMqKFs7fV0pLycpOwoJCWlmKCAkbWF0Y2ggKXsKCgkJCWlmKCAkbWF0Y2hbNF0gPT0gJ30nICl7CgkJCQkkdGhpcy0+cG9zID0gJGluZGV4ICsgc3RybGVuKCRtYXRjaFswXSktMTsKCQkJfQoKCQkJaWYoICRtYXRjaFszXSApewoJCQkJJG1hdGNoWzJdIC49ICcgIWltcG9ydGFudCc7CgkJCX0KCgkJCXJldHVybiAkdGhpcy0+TmV3T2JqNCgnTGVzc19UcmVlX05hbWVWYWx1ZScsYXJyYXkoICRtYXRjaFsxXSwgJG1hdGNoWzJdLCAkaW5kZXgsICR0aGlzLT5lbnYtPmN1cnJlbnRGaWxlSW5mbykpOwoJCX0KCgkJJHRoaXMtPnJlc3RvcmUoKTsKCX0KCgoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVJ1bGUoICR0cnlBbm9ueW1vdXMgPSBudWxsICl7CgoJCSRtZXJnZSA9IGZhbHNlOwoJCSRzdGFydE9mUnVsZSA9ICR0aGlzLT5wb3M7CgoJCSRjID0gJHRoaXMtPmlucHV0WyR0aGlzLT5wb3NdOwoJCWlmKCAkYyA9PT0gJy4nIHx8ICRjID09PSAnIycgfHwgJGMgPT09ICcmJyApewoJCQlyZXR1cm47CgkJfQoKCQkkdGhpcy0+c2F2ZSgpOwoJCSRuYW1lID0gJHRoaXMtPk1hdGNoRnVuY3MoIGFycmF5KCdwYXJzZVZhcmlhYmxlJywncGFyc2VSdWxlUHJvcGVydHknKSk7CgoJCWlmKCAkbmFtZSApewoKCQkJJGlzVmFyaWFibGUgPSBpc19zdHJpbmcoJG5hbWUpOwoKCQkJJHZhbHVlID0gbnVsbDsKCQkJaWYoICRpc1ZhcmlhYmxlICl7CgkJCQkkdmFsdWUgPSAkdGhpcy0+cGFyc2VEZXRhY2hlZFJ1bGVzZXQoKTsKCQkJfQoKCQkJJGltcG9ydGFudCA9IG51bGw7CgkJCWlmKCAhJHZhbHVlICl7CgoJCQkJLy8gcHJlZmVyIHRvIHRyeSB0byBwYXJzZSBmaXJzdCBpZiBpdHMgYSB2YXJpYWJsZSBvciB3ZSBhcmUgY29tcHJlc3NpbmcKCQkJCS8vIGJ1dCBhbHdheXMgZmFsbGJhY2sgb24gdGhlIG90aGVyIG9uZQoJCQkJLy9pZiggISR0cnlBbm9ueW1vdXMgJiYgaXNfc3RyaW5nKCRuYW1lKSAmJiAkbmFtZVswXSA9PT0gJ0AnICl7CgkJCQlpZiggISR0cnlBbm9ueW1vdXMgJiYgKExlc3NfUGFyc2VyOjokb3B0aW9uc1snY29tcHJlc3MnXSB8fCAkaXNWYXJpYWJsZSkgKXsKCQkJCQkkdmFsdWUgPSAkdGhpcy0+TWF0Y2hGdW5jcyggYXJyYXkoJ3BhcnNlVmFsdWUnLCdwYXJzZUFub255bW91c1ZhbHVlJykpOwoJCQkJfWVsc2V7CgkJCQkJJHZhbHVlID0gJHRoaXMtPk1hdGNoRnVuY3MoIGFycmF5KCdwYXJzZUFub255bW91c1ZhbHVlJywncGFyc2VWYWx1ZScpKTsKCQkJCX0KCgkJCQkkaW1wb3J0YW50ID0gJHRoaXMtPnBhcnNlSW1wb3J0YW50KCk7CgoJCQkJLy8gYSBuYW1lIHJldHVybmVkIGJ5IHRoaXMucnVsZVByb3BlcnR5KCkgaXMgYWx3YXlzIGFuIGFycmF5IG9mIHRoZSBmb3JtOgoJCQkJLy8gW3N0cmluZy0xLCAuLi4sIHN0cmluZy1uLCAiIl0gb3IgW3N0cmluZy0xLCAuLi4sIHN0cmluZy1uLCAiKyJdCgkJCQkvLyB3aGVyZSBlYWNoIGl0ZW0gaXMgYSB0cmVlLktleXdvcmQgb3IgdHJlZS5WYXJpYWJsZQoJCQkJaWYoICEkaXNWYXJpYWJsZSAmJiBpc19hcnJheSgkbmFtZSkgKXsKCQkJCQkkbm0gPSBhcnJheV9wb3AoJG5hbWUpOwoJCQkJCWlmKCAkbm0tPnZhbHVlICl7CgkJCQkJCSRtZXJnZSA9ICRubS0+dmFsdWU7CgkJCQkJfQoJCQkJfQoJCQl9CgoKCQkJaWYoICR2YWx1ZSAmJiAkdGhpcy0+cGFyc2VFbmQoKSApewoJCQkJJHRoaXMtPmZvcmdldCgpOwoJCQkJcmV0dXJuICR0aGlzLT5OZXdPYmo2KCdMZXNzX1RyZWVfUnVsZScsYXJyYXkoICRuYW1lLCAkdmFsdWUsICRpbXBvcnRhbnQsICRtZXJnZSwgJHN0YXJ0T2ZSdWxlLCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQkJfWVsc2V7CgkJCQkkdGhpcy0+ZnVydGhlc3QgPSAkdGhpcy0+cG9zOwoJCQkJJHRoaXMtPnJlc3RvcmUoKTsKCQkJCWlmKCAkdmFsdWUgJiYgISR0cnlBbm9ueW1vdXMgKXsKCQkJCQlyZXR1cm4gJHRoaXMtPnBhcnNlUnVsZSh0cnVlKTsKCQkJCX0KCQkJfQoJCX1lbHNlewoJCQkkdGhpcy0+Zm9yZ2V0KCk7CgkJfQoJfQoKCWZ1bmN0aW9uIHBhcnNlQW5vbnltb3VzVmFsdWUoKXsKCgkJaWYoIHByZWdfbWF0Y2goJy9cXEcoW15AK1wvXCciKmAoO3t9LV0qKTsvJywkdGhpcy0+aW5wdXQsICRtYXRjaCwgMCwgJHRoaXMtPnBvcykgKXsKCQkJJHRoaXMtPnBvcyArPSBzdHJsZW4oJG1hdGNoWzFdKTsKCQkJcmV0dXJuICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfQW5vbnltb3VzJywkbWF0Y2hbMV0pOwoJCX0KCX0KCgkvLwoJLy8gQW4gQGltcG9ydCBkaXJlY3RpdmUKCS8vCgkvLwkgQGltcG9ydCAibGliIjsKCS8vCgkvLyBEZXBlbmRpbmcgb24gb3VyIGVudmlyb25tZW50LCBpbXBvcnRpbmcgaXMgZG9uZSBkaWZmZXJlbnRseToKCS8vIEluIHRoZSBicm93c2VyLCBpdCdzIGFuIFhIUiByZXF1ZXN0LCBpbiBOb2RlLCBpdCB3b3VsZCBiZSBhCgkvLyBmaWxlLXN5c3RlbSBvcGVyYXRpb24uIFRoZSBmdW5jdGlvbiB1c2VkIGZvciBpbXBvcnRpbmcgaXMKCS8vIHN0b3JlZCBpbiBgaW1wb3J0YCwgd2hpY2ggd2UgcGFzcyB0byB0aGUgSW1wb3J0IGNvbnN0cnVjdG9yLgoJLy8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VJbXBvcnQoKXsKCgkJJHRoaXMtPnNhdmUoKTsKCgkJJGRpciA9ICR0aGlzLT5NYXRjaFJlZygnL1xcR0BpbXBvcnQ/XHMrLycpOwoKCQlpZiggJGRpciApewoJCQkkb3B0aW9ucyA9ICR0aGlzLT5wYXJzZUltcG9ydE9wdGlvbnMoKTsKCQkJJHBhdGggPSAkdGhpcy0+TWF0Y2hGdW5jcyggYXJyYXkoJ3BhcnNlRW50aXRpZXNRdW90ZWQnLCdwYXJzZUVudGl0aWVzVXJsJykpOwoKCQkJaWYoICRwYXRoICl7CgkJCQkkZmVhdHVyZXMgPSAkdGhpcy0+cGFyc2VNZWRpYUZlYXR1cmVzKCk7CgkJCQlpZiggJHRoaXMtPk1hdGNoQ2hhcignOycpICl7CgkJCQkJaWYoICRmZWF0dXJlcyApewoJCQkJCQkkZmVhdHVyZXMgPSAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX1ZhbHVlJywkZmVhdHVyZXMpOwoJCQkJCX0KCgkJCQkJJHRoaXMtPmZvcmdldCgpOwoJCQkJCXJldHVybiAkdGhpcy0+TmV3T2JqNSgnTGVzc19UcmVlX0ltcG9ydCcsYXJyYXkoICRwYXRoLCAkZmVhdHVyZXMsICRvcHRpb25zLCAkdGhpcy0+cG9zLCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQkJCX0KCQkJfQoJCX0KCgkJJHRoaXMtPnJlc3RvcmUoKTsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlSW1wb3J0T3B0aW9ucygpewoKCQkkb3B0aW9ucyA9IGFycmF5KCk7CgoJCS8vIGxpc3Qgb2Ygb3B0aW9ucywgc3Vycm91bmRlZCBieSBwYXJlbnMKCQlpZiggISR0aGlzLT5NYXRjaENoYXIoJygnKSApewoJCQlyZXR1cm4gJG9wdGlvbnM7CgkJfQoJCWRvewoJCQkkb3B0aW9uTmFtZSA9ICR0aGlzLT5wYXJzZUltcG9ydE9wdGlvbigpOwoJCQlpZiggJG9wdGlvbk5hbWUgKXsKCQkJCSR2YWx1ZSA9IHRydWU7CgkJCQlzd2l0Y2goICRvcHRpb25OYW1lICl7CgkJCQkJY2FzZSAiY3NzIjoKCQkJCQkJJG9wdGlvbk5hbWUgPSAibGVzcyI7CgkJCQkJCSR2YWx1ZSA9IGZhbHNlOwoJCQkJCWJyZWFrOwoJCQkJCWNhc2UgIm9uY2UiOgoJCQkJCQkkb3B0aW9uTmFtZSA9ICJtdWx0aXBsZSI7CgkJCQkJCSR2YWx1ZSA9IGZhbHNlOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJJG9wdGlvbnNbJG9wdGlvbk5hbWVdID0gJHZhbHVlOwoJCQkJaWYoICEkdGhpcy0+TWF0Y2hDaGFyKCcsJykgKXsgYnJlYWs7IH0KCQkJfQoJCX13aGlsZSggJG9wdGlvbk5hbWUgKTsKCQkkdGhpcy0+ZXhwZWN0Q2hhcignKScpOwoJCXJldHVybiAkb3B0aW9uczsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlSW1wb3J0T3B0aW9uKCl7CgkJJG9wdCA9ICR0aGlzLT5NYXRjaFJlZygnL1xcRyhsZXNzfGNzc3xtdWx0aXBsZXxvbmNlfGlubGluZXxyZWZlcmVuY2V8b3B0aW9uYWwpLycpOwoJCWlmKCAkb3B0ICl7CgkJCXJldHVybiAkb3B0WzFdOwoJCX0KCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlTWVkaWFGZWF0dXJlKCkgewoJCSRub2RlcyA9IGFycmF5KCk7CgoJCWRvewoJCQkkZSA9ICR0aGlzLT5NYXRjaEZ1bmNzKGFycmF5KCdwYXJzZUVudGl0aWVzS2V5d29yZCcsJ3BhcnNlRW50aXRpZXNWYXJpYWJsZScpKTsKCQkJaWYoICRlICl7CgkJCQkkbm9kZXNbXSA9ICRlOwoJCQl9IGVsc2VpZiAoJHRoaXMtPk1hdGNoQ2hhcignKCcpKSB7CgkJCQkkcCA9ICR0aGlzLT5wYXJzZVByb3BlcnR5KCk7CgkJCQkkZSA9ICR0aGlzLT5wYXJzZVZhbHVlKCk7CgkJCQlpZiAoJHRoaXMtPk1hdGNoQ2hhcignKScpKSB7CgkJCQkJaWYgKCRwICYmICRlKSB7CgkJCQkJCSRyID0gJHRoaXMtPk5ld09iajcoJ0xlc3NfVHJlZV9SdWxlJywgYXJyYXkoICRwLCAkZSwgbnVsbCwgbnVsbCwgJHRoaXMtPnBvcywgJHRoaXMtPmVudi0+Y3VycmVudEZpbGVJbmZvLCB0cnVlKSk7CgkJCQkJCSRub2Rlc1tdID0gJHRoaXMtPk5ld09iajEoJ0xlc3NfVHJlZV9QYXJlbicsJHIpOwoJCQkJCX0gZWxzZWlmICgkZSkgewoJCQkJCQkkbm9kZXNbXSA9ICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfUGFyZW4nLCRlKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlyZXR1cm4gbnVsbDsKCQkJCQl9CgkJCQl9IGVsc2UKCQkJCQlyZXR1cm4gbnVsbDsKCQkJfQoJCX0gd2hpbGUgKCRlKTsKCgkJaWYgKCRub2RlcykgewoJCQlyZXR1cm4gJHRoaXMtPk5ld09iajEoJ0xlc3NfVHJlZV9FeHByZXNzaW9uJywkbm9kZXMpOwoJCX0KCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlTWVkaWFGZWF0dXJlcygpIHsKCQkkZmVhdHVyZXMgPSBhcnJheSgpOwoKCQlkb3sKCQkJJGUgPSAkdGhpcy0+cGFyc2VNZWRpYUZlYXR1cmUoKTsKCQkJaWYoICRlICl7CgkJCQkkZmVhdHVyZXNbXSA9ICRlOwoJCQkJaWYgKCEkdGhpcy0+TWF0Y2hDaGFyKCcsJykpIGJyZWFrOwoJCQl9ZWxzZXsKCQkJCSRlID0gJHRoaXMtPnBhcnNlRW50aXRpZXNWYXJpYWJsZSgpOwoJCQkJaWYoICRlICl7CgkJCQkJJGZlYXR1cmVzW10gPSAkZTsKCQkJCQlpZiAoISR0aGlzLT5NYXRjaENoYXIoJywnKSkgYnJlYWs7CgkJCQl9CgkJCX0KCQl9IHdoaWxlICgkZSk7CgoJCXJldHVybiAkZmVhdHVyZXMgPyAkZmVhdHVyZXMgOiBudWxsOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VNZWRpYSgpIHsKCQlpZiggJHRoaXMtPk1hdGNoUmVnKCcvXFxHQG1lZGlhLycpICl7CgkJCSRmZWF0dXJlcyA9ICR0aGlzLT5wYXJzZU1lZGlhRmVhdHVyZXMoKTsKCQkJJHJ1bGVzID0gJHRoaXMtPnBhcnNlQmxvY2soKTsKCgkJCWlmKCBpc19hcnJheSgkcnVsZXMpICl7CgkJCQlyZXR1cm4gJHRoaXMtPk5ld09iajQoJ0xlc3NfVHJlZV9NZWRpYScsYXJyYXkoICRydWxlcywgJGZlYXR1cmVzLCAkdGhpcy0+cG9zLCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQkJfQoJCX0KCX0KCgoJLy8KCS8vIEEgQ1NTIERpcmVjdGl2ZQoJLy8KCS8vIEBjaGFyc2V0ICJ1dGYtOCI7CgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZURpcmVjdGl2ZSgpewoKCQlpZiggISR0aGlzLT5QZWVrQ2hhcignQCcpICl7CgkJCXJldHVybjsKCQl9CgoJCSRydWxlcyA9IG51bGw7CgkJJGluZGV4ID0gJHRoaXMtPnBvczsKCQkkaGFzQmxvY2sgPSB0cnVlOwoJCSRoYXNJZGVudGlmaWVyID0gZmFsc2U7CgkJJGhhc0V4cHJlc3Npb24gPSBmYWxzZTsKCQkkaGFzVW5rbm93biA9IGZhbHNlOwoKCgkJJHZhbHVlID0gJHRoaXMtPk1hdGNoRnVuY3MoYXJyYXkoJ3BhcnNlSW1wb3J0JywncGFyc2VNZWRpYScpKTsKCQlpZiggJHZhbHVlICl7CgkJCXJldHVybiAkdmFsdWU7CgkJfQoKCQkkdGhpcy0+c2F2ZSgpOwoKCQkkbmFtZSA9ICR0aGlzLT5NYXRjaFJlZygnL1xcR0BbYS16LV0rLycpOwoKCQlpZiggISRuYW1lICkgcmV0dXJuOwoJCSRuYW1lID0gJG5hbWVbMF07CgoKCQkkbm9uVmVuZG9yU3BlY2lmaWNOYW1lID0gJG5hbWU7CgkJJHBvcyA9IHN0cnBvcygkbmFtZSwnLScsIDIpOwoJCWlmKCAkbmFtZVsxXSA9PSAnLScgJiYgJHBvcyA+IDAgKXsKCQkJJG5vblZlbmRvclNwZWNpZmljTmFtZSA9ICJAIiAuIHN1YnN0cigkbmFtZSwgJHBvcyArIDEpOwoJCX0KCgoJCXN3aXRjaCggJG5vblZlbmRvclNwZWNpZmljTmFtZSApewoJCQkvKgoJCQljYXNlICJAZm9udC1mYWNlIjoKCQkJY2FzZSAiQHZpZXdwb3J0IjoKCQkJY2FzZSAiQHRvcC1sZWZ0IjoKCQkJY2FzZSAiQHRvcC1sZWZ0LWNvcm5lciI6CgkJCWNhc2UgIkB0b3AtY2VudGVyIjoKCQkJY2FzZSAiQHRvcC1yaWdodCI6CgkJCWNhc2UgIkB0b3AtcmlnaHQtY29ybmVyIjoKCQkJY2FzZSAiQGJvdHRvbS1sZWZ0IjoKCQkJY2FzZSAiQGJvdHRvbS1sZWZ0LWNvcm5lciI6CgkJCWNhc2UgIkBib3R0b20tY2VudGVyIjoKCQkJY2FzZSAiQGJvdHRvbS1yaWdodCI6CgkJCWNhc2UgIkBib3R0b20tcmlnaHQtY29ybmVyIjoKCQkJY2FzZSAiQGxlZnQtdG9wIjoKCQkJY2FzZSAiQGxlZnQtbWlkZGxlIjoKCQkJY2FzZSAiQGxlZnQtYm90dG9tIjoKCQkJY2FzZSAiQHJpZ2h0LXRvcCI6CgkJCWNhc2UgIkByaWdodC1taWRkbGUiOgoJCQljYXNlICJAcmlnaHQtYm90dG9tIjoKCQkJaGFzQmxvY2sgPSB0cnVlOwoJCQlicmVhazsKCQkJKi8KCQkJY2FzZSAiQGNoYXJzZXQiOgoJCQkJJGhhc0lkZW50aWZpZXIgPSB0cnVlOwoJCQkJJGhhc0Jsb2NrID0gZmFsc2U7CgkJCQlicmVhazsKCQkJY2FzZSAiQG5hbWVzcGFjZSI6CgkJCQkkaGFzRXhwcmVzc2lvbiA9IHRydWU7CgkJCQkkaGFzQmxvY2sgPSBmYWxzZTsKCQkJCWJyZWFrOwoJCQljYXNlICJAa2V5ZnJhbWVzIjoKCQkJCSRoYXNJZGVudGlmaWVyID0gdHJ1ZTsKCQkJCWJyZWFrOwoJCQljYXNlICJAaG9zdCI6CgkJCWNhc2UgIkBwYWdlIjoKCQkJY2FzZSAiQGRvY3VtZW50IjoKCQkJY2FzZSAiQHN1cHBvcnRzIjoKCQkJCSRoYXNVbmtub3duID0gdHJ1ZTsKCQkJCWJyZWFrOwoJCX0KCgkJaWYoICRoYXNJZGVudGlmaWVyICl7CgkJCSR2YWx1ZSA9ICR0aGlzLT5wYXJzZUVudGl0eSgpOwoJCQlpZiggISR2YWx1ZSApewoJCQkJJHRoaXMtPmVycm9yKCJleHBlY3RlZCAiIC4gJG5hbWUgLiAiIGlkZW50aWZpZXIiKTsKCQkJfQoJCX0gZWxzZSBpZiggJGhhc0V4cHJlc3Npb24gKXsKCQkJJHZhbHVlID0gJHRoaXMtPnBhcnNlRXhwcmVzc2lvbigpOwoJCQlpZiggISR2YWx1ZSApewoJCQkJJHRoaXMtPmVycm9yKCJleHBlY3RlZCAiIC4gJG5hbWUuICIgZXhwcmVzc2lvbiIpOwoJCQl9CgkJfSBlbHNlIGlmICgkaGFzVW5rbm93bikgewoKCQkJJHZhbHVlID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHW157O10rLycpOwoJCQlpZiggJHZhbHVlICl7CgkJCQkkdmFsdWUgPSAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX0Fub255bW91cycsdHJpbSgkdmFsdWVbMF0pKTsKCQkJfQoJCX0KCgkJaWYoICRoYXNCbG9jayApewoJCQkkcnVsZXMgPSAkdGhpcy0+cGFyc2VCbG9ja1J1bGVzZXQoKTsKCQl9CgoJCWlmKCAkcnVsZXMgfHwgKCEkaGFzQmxvY2sgJiYgJHZhbHVlICYmICR0aGlzLT5NYXRjaENoYXIoJzsnKSkpIHsKCQkJJHRoaXMtPmZvcmdldCgpOwoJCQlyZXR1cm4gJHRoaXMtPk5ld09iajUoJ0xlc3NfVHJlZV9EaXJlY3RpdmUnLGFycmF5KCRuYW1lLCAkdmFsdWUsICRydWxlcywgJGluZGV4LCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQl9CgoJCSR0aGlzLT5yZXN0b3JlKCk7Cgl9CgoKCS8vCgkvLyBBIFZhbHVlIGlzIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgRXhwcmVzc2lvbnMKCS8vCgkvLwkgZm9udC1mYW1pbHk6IEJhc2tlcnZpbGxlLCBHZW9yZ2lhLCBzZXJpZjsKCS8vCgkvLyBJbiBhIFJ1bGUsIGEgVmFsdWUgcmVwcmVzZW50cyBldmVyeXRoaW5nIGFmdGVyIHRoZSBgOmAsCgkvLyBhbmQgYmVmb3JlIHRoZSBgO2AuCgkvLwoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVZhbHVlKCl7CgkJJGV4cHJlc3Npb25zID0gYXJyYXkoKTsKCgkJZG97CgkJCSRlID0gJHRoaXMtPnBhcnNlRXhwcmVzc2lvbigpOwoJCQlpZiggJGUgKXsKCQkJCSRleHByZXNzaW9uc1tdID0gJGU7CgkJCQlpZiAoISAkdGhpcy0+TWF0Y2hDaGFyKCcsJykpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX13aGlsZSgkZSk7CgoJCWlmKCAkZXhwcmVzc2lvbnMgKXsKCQkJcmV0dXJuICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfVmFsdWUnLCRleHByZXNzaW9ucyk7CgkJfQoJfQoKCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VJbXBvcnRhbnQgKCl7CgkJaWYoICR0aGlzLT5QZWVrQ2hhcignIScpICYmICR0aGlzLT5NYXRjaFJlZygnL1xcRyEgKmltcG9ydGFudC8nKSApewoJCQlyZXR1cm4gJyAhaW1wb3J0YW50JzsKCQl9Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVN1YiAoKXsKCgkJaWYoICR0aGlzLT5NYXRjaENoYXIoJygnKSApewoJCQkkYSA9ICR0aGlzLT5wYXJzZUFkZGl0aW9uKCk7CgkJCWlmKCAkYSApewoJCQkJJHRoaXMtPmV4cGVjdENoYXIoJyknKTsKCQkJCXJldHVybiAkdGhpcy0+TmV3T2JqMignTGVzc19UcmVlX0V4cHJlc3Npb24nLGFycmF5KCBhcnJheSgkYSksIHRydWUpICk7IC8vaW5zdGVhZCBvZiAkZS0+cGFyZW5zID0gdHJ1ZSBzbyB0aGUgdmFsdWUgaXMgY2FjaGVkCgkJCX0KCQl9Cgl9CgoKCS8qKgoJICogUGFyc2VzIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbgoJICoKCSAqIEByZXR1cm4gTGVzc19UcmVlX09wZXJhdGlvbnxudWxsCgkgKi8KCWZ1bmN0aW9uIHBhcnNlTXVsdGlwbGljYXRpb24oKXsKCgkJJHJldHVybiA9ICRtID0gJHRoaXMtPnBhcnNlT3BlcmFuZCgpOwoJCWlmKCAkcmV0dXJuICl7CgkJCXdoaWxlKCB0cnVlICl7CgoJCQkJJGlzU3BhY2VkID0gJHRoaXMtPmlzV2hpdGVzcGFjZSggLTEgKTsKCgkJCQlpZiggJHRoaXMtPlBlZWtSZWcoJy9cXEdcL1sqXC9dLycpICl7CgkJCQkJYnJlYWs7CgkJCQl9CgoJCQkJJG9wID0gJHRoaXMtPk1hdGNoQ2hhcignLycpOwoJCQkJaWYoICEkb3AgKXsKCQkJCQkkb3AgPSAkdGhpcy0+TWF0Y2hDaGFyKCcqJyk7CgkJCQkJaWYoICEkb3AgKXsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoKCQkJCSRhID0gJHRoaXMtPnBhcnNlT3BlcmFuZCgpOwoKCQkJCWlmKCEkYSkgeyBicmVhazsgfQoKCQkJCSRtLT5wYXJlbnNJbk9wID0gdHJ1ZTsKCQkJCSRhLT5wYXJlbnNJbk9wID0gdHJ1ZTsKCQkJCSRyZXR1cm4gPSAkdGhpcy0+TmV3T2JqMygnTGVzc19UcmVlX09wZXJhdGlvbicsYXJyYXkoICRvcCwgYXJyYXkoICRyZXR1cm4sICRhICksICRpc1NwYWNlZCkgKTsKCQkJfQoJCX0KCQlyZXR1cm4gJHJldHVybjsKCgl9CgoKCS8qKgoJICogUGFyc2VzIGFuIGFkZGl0aW9uIG9wZXJhdGlvbgoJICoKCSAqIEByZXR1cm4gTGVzc19UcmVlX09wZXJhdGlvbnxudWxsCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VBZGRpdGlvbiAoKXsKCgkJJHJldHVybiA9ICRtID0gJHRoaXMtPnBhcnNlTXVsdGlwbGljYXRpb24oKTsKCQlpZiggJHJldHVybiApewoJCQl3aGlsZSggdHJ1ZSApewoKCQkJCSRpc1NwYWNlZCA9ICR0aGlzLT5pc1doaXRlc3BhY2UoIC0xICk7CgoJCQkJJG9wID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHWy0rXVxzKy8nKTsKCQkJCWlmKCAkb3AgKXsKCQkJCQkkb3AgPSAkb3BbMF07CgkJCQl9ZWxzZXsKCQkJCQlpZiggISRpc1NwYWNlZCApewoJCQkJCQkkb3AgPSAkdGhpcy0+bWF0Y2goYXJyYXkoJyMrJywnIy0nKSk7CgkJCQkJfQoJCQkJCWlmKCAhJG9wICl7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCgkJCQkkYSA9ICR0aGlzLT5wYXJzZU11bHRpcGxpY2F0aW9uKCk7CgkJCQlpZiggISRhICl7CgkJCQkJYnJlYWs7CgkJCQl9CgoJCQkJJG0tPnBhcmVuc0luT3AgPSB0cnVlOwoJCQkJJGEtPnBhcmVuc0luT3AgPSB0cnVlOwoJCQkJJHJldHVybiA9ICR0aGlzLT5OZXdPYmozKCdMZXNzX1RyZWVfT3BlcmF0aW9uJyxhcnJheSgkb3AsIGFycmF5KCRyZXR1cm4sICRhKSwgJGlzU3BhY2VkKSk7CgkJCX0KCQl9CgoJCXJldHVybiAkcmV0dXJuOwoJfQoKCgkvKioKCSAqIFBhcnNlcyB0aGUgY29uZGl0aW9ucwoJICoKCSAqIEByZXR1cm4gTGVzc19UcmVlX0NvbmRpdGlvbnxudWxsCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25zKCkgewoJCSRpbmRleCA9ICR0aGlzLT5wb3M7CgkJJHJldHVybiA9ICRhID0gJHRoaXMtPnBhcnNlQ29uZGl0aW9uKCk7CgkJaWYoICRhICl7CgkJCXdoaWxlKCB0cnVlICl7CgkJCQlpZiggISR0aGlzLT5QZWVrUmVnKCcvXFxHLFxzKihub3RccyopP1woLycpIHx8ICAhJHRoaXMtPk1hdGNoQ2hhcignLCcpICl7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQkkYiA9ICR0aGlzLT5wYXJzZUNvbmRpdGlvbigpOwoJCQkJaWYoICEkYiApewoJCQkJCWJyZWFrOwoJCQkJfQoKCQkJCSRyZXR1cm4gPSAkdGhpcy0+TmV3T2JqNCgnTGVzc19UcmVlX0NvbmRpdGlvbicsYXJyYXkoJ29yJywgJHJldHVybiwgJGIsICRpbmRleCkpOwoJCQl9CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uKCkgewoJCSRpbmRleCA9ICR0aGlzLT5wb3M7CgkJJG5lZ2F0ZSA9IGZhbHNlOwoJCSRjID0gbnVsbDsKCgkJaWYgKCR0aGlzLT5NYXRjaFJlZygnL1xcR25vdC8nKSkgJG5lZ2F0ZSA9IHRydWU7CgkJJHRoaXMtPmV4cGVjdENoYXIoJygnKTsKCQkkYSA9ICR0aGlzLT5NYXRjaEZ1bmNzKGFycmF5KCdwYXJzZUFkZGl0aW9uJywncGFyc2VFbnRpdGllc0tleXdvcmQnLCdwYXJzZUVudGl0aWVzUXVvdGVkJykpOwoKCQlpZiggJGEgKXsKCQkJJG9wID0gJHRoaXMtPk1hdGNoUmVnKCcvXFxHKD86Pj18PD18PTx8Wzw9Pl0pLycpOwoJCQlpZiggJG9wICl7CgkJCQkkYiA9ICR0aGlzLT5NYXRjaEZ1bmNzKGFycmF5KCdwYXJzZUFkZGl0aW9uJywncGFyc2VFbnRpdGllc0tleXdvcmQnLCdwYXJzZUVudGl0aWVzUXVvdGVkJykpOwoJCQkJaWYoICRiICl7CgkJCQkJJGMgPSAkdGhpcy0+TmV3T2JqNSgnTGVzc19UcmVlX0NvbmRpdGlvbicsYXJyYXkoJG9wWzBdLCAkYSwgJGIsICRpbmRleCwgJG5lZ2F0ZSkpOwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+RXJyb3IoJ1VuZXhwZWN0ZWQgZXhwcmVzc2lvbicpOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJJGsgPSAkdGhpcy0+TmV3T2JqMSgnTGVzc19UcmVlX0tleXdvcmQnLCd0cnVlJyk7CgkJCQkkYyA9ICR0aGlzLT5OZXdPYmo1KCdMZXNzX1RyZWVfQ29uZGl0aW9uJyxhcnJheSgnPScsICRhLCAkaywgJGluZGV4LCAkbmVnYXRlKSk7CgkJCX0KCQkJJHRoaXMtPmV4cGVjdENoYXIoJyknKTsKCQkJcmV0dXJuICR0aGlzLT5NYXRjaFJlZygnL1xcR2FuZC8nKSA/ICR0aGlzLT5OZXdPYmozKCdMZXNzX1RyZWVfQ29uZGl0aW9uJyxhcnJheSgnYW5kJywgJGMsICR0aGlzLT5wYXJzZUNvbmRpdGlvbigpKSkgOiAkYzsKCQl9Cgl9CgoJLyoqCgkgKiBBbiBvcGVyYW5kIGlzIGFueXRoaW5nIHRoYXQgY2FuIGJlIHBhcnQgb2YgYW4gb3BlcmF0aW9uLAoJICogc3VjaCBhcyBhIENvbG9yLCBvciBhIFZhcmlhYmxlCgkgKgoJICovCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlT3BlcmFuZCAoKXsKCgkJJG5lZ2F0ZSA9IGZhbHNlOwoJCSRvZmZzZXQgPSAkdGhpcy0+cG9zKzE7CgkJaWYoICRvZmZzZXQgPj0gJHRoaXMtPmlucHV0X2xlbiApewoJCQlyZXR1cm47CgkJfQoJCSRjaGFyID0gJHRoaXMtPmlucHV0WyRvZmZzZXRdOwoJCWlmKCAkY2hhciA9PT0gJ0AnIHx8ICRjaGFyID09PSAnKCcgKXsKCQkJJG5lZ2F0ZSA9ICR0aGlzLT5NYXRjaENoYXIoJy0nKTsKCQl9CgoJCSRvID0gJHRoaXMtPk1hdGNoRnVuY3MoYXJyYXkoJ3BhcnNlU3ViJywncGFyc2VFbnRpdGllc0RpbWVuc2lvbicsJ3BhcnNlRW50aXRpZXNDb2xvcicsJ3BhcnNlRW50aXRpZXNWYXJpYWJsZScsJ3BhcnNlRW50aXRpZXNDYWxsJykpOwoKCQlpZiggJG5lZ2F0ZSApewoJCQkkby0+cGFyZW5zSW5PcCA9IHRydWU7CgkJCSRvID0gJHRoaXMtPk5ld09iajEoJ0xlc3NfVHJlZV9OZWdhdGl2ZScsJG8pOwoJCX0KCgkJcmV0dXJuICRvOwoJfQoKCgkvKioKCSAqIEV4cHJlc3Npb25zIGVpdGhlciByZXByZXNlbnQgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMsCgkgKiBvciB3aGl0ZS1zcGFjZSBkZWxpbWl0ZWQgRW50aXRpZXMuCgkgKgoJICoJIDFweCBzb2xpZCBibGFjawoJICoJIEB2YXIgKiAyCgkgKgoJICogQHJldHVybiBMZXNzX1RyZWVfRXhwcmVzc2lvbnxudWxsCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uICgpewoJCSRlbnRpdGllcyA9IGFycmF5KCk7CgoJCWRvewoJCQkkZSA9ICR0aGlzLT5NYXRjaEZ1bmNzKGFycmF5KCdwYXJzZUFkZGl0aW9uJywncGFyc2VFbnRpdHknKSk7CgkJCWlmKCAkZSApewoJCQkJJGVudGl0aWVzW10gPSAkZTsKCQkJCS8vIG9wZXJhdGlvbnMgZG8gbm90IGFsbG93IGtleXdvcmQgIi8iIGRpbWVuc2lvbiAoZS5nLiBzbWFsbC8yMHB4KSBzbyB3ZSBzdXBwb3J0IHRoYXQgaGVyZQoJCQkJaWYoICEkdGhpcy0+UGVla1JlZygnL1xcR1wvW1wvKl0vJykgKXsKCQkJCQkkZGVsaW0gPSAkdGhpcy0+TWF0Y2hDaGFyKCcvJyk7CgkJCQkJaWYoICRkZWxpbSApewoJCQkJCQkkZW50aXRpZXNbXSA9ICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfQW5vbnltb3VzJywkZGVsaW0pOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX13aGlsZSgkZSk7CgoJCWlmKCAkZW50aXRpZXMgKXsKCQkJcmV0dXJuICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfRXhwcmVzc2lvbicsJGVudGl0aWVzKTsKCQl9Cgl9CgoKCS8qKgoJICogUGFyc2UgYSBwcm9wZXJ0eQoJICogZWc6ICdtaW4td2lkdGgnLCAnb3JpZW50YXRpb24nLCBldGMKCSAqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlUHJvcGVydHkgKCl7CgkJJG5hbWUgPSAkdGhpcy0+TWF0Y2hSZWcoJy9cXEcoXCo/LT9bX2EtekEtWjAtOS1dKylccyo6LycpOwoJCWlmKCAkbmFtZSApewoJCQlyZXR1cm4gJG5hbWVbMV07CgkJfQoJfQoKCgkvKioKCSAqIFBhcnNlIGEgcnVsZSBwcm9wZXJ0eQoJICogZWc6ICdjb2xvcicsICd3aWR0aCcsICdoZWlnaHQnLCBldGMKCSAqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlUnVsZVByb3BlcnR5KCl7CgkJJG9mZnNldCA9ICR0aGlzLT5wb3M7CgkJJG5hbWUgPSBhcnJheSgpOwoJCSRpbmRleCA9IGFycmF5KCk7CgkJJGxlbmd0aCA9IDA7CgoKCQkkdGhpcy0+cnVsZVByb3BlcnR5TWF0Y2goJy9cXEcoXCo/KS8nLCAkb2Zmc2V0LCAkbGVuZ3RoLCAkaW5kZXgsICRuYW1lICk7CgkJd2hpbGUoICR0aGlzLT5ydWxlUHJvcGVydHlNYXRjaCgnL1xcRygoPzpbXHctXSspfCg/OkBce1tcdy1dK1x9KSkvJywgJG9mZnNldCwgJGxlbmd0aCwgJGluZGV4LCAkbmFtZSApKTsgLy8gIQoKCQlpZiggKGNvdW50KCRuYW1lKSA+IDEpICYmICR0aGlzLT5ydWxlUHJvcGVydHlNYXRjaCgnL1xcR1xzKigoPzpcK198XCspPylccyo6LycsICRvZmZzZXQsICRsZW5ndGgsICRpbmRleCwgJG5hbWUpICl7CgkJCS8vIGF0IGxhc3QsIHdlIGhhdmUgdGhlIGNvbXBsZXRlIG1hdGNoIG5vdy4gbW92ZSBmb3J3YXJkLAoJCQkvLyBjb252ZXJ0IG5hbWUgcGFydGljbGVzIHRvIHRyZWUgb2JqZWN0cyBhbmQgcmV0dXJuOgoJCQkkdGhpcy0+c2tpcFdoaXRlc3BhY2UoJGxlbmd0aCk7CgoJCQlpZiggJG5hbWVbMF0gPT09ICcnICl7CgkJCQlhcnJheV9zaGlmdCgkbmFtZSk7CgkJCQlhcnJheV9zaGlmdCgkaW5kZXgpOwoJCQl9CgkJCWZvcmVhY2goJG5hbWUgYXMgJGsgPT4gJHMgKXsKCQkJCWlmKCAhJHMgfHwgJHNbMF0gIT09ICdAJyApewoJCQkJCSRuYW1lWyRrXSA9ICR0aGlzLT5OZXdPYmoxKCdMZXNzX1RyZWVfS2V5d29yZCcsJHMpOwoJCQkJfWVsc2V7CgkJCQkJJG5hbWVbJGtdID0gJHRoaXMtPk5ld09iajMoJ0xlc3NfVHJlZV9WYXJpYWJsZScsYXJyYXkoJ0AnIC4gc3Vic3RyKCRzLDIsLTEpLCAkaW5kZXhbJGtdLCAkdGhpcy0+ZW52LT5jdXJyZW50RmlsZUluZm8pKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gJG5hbWU7CgkJfQoKCgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBydWxlUHJvcGVydHlNYXRjaCggJHJlLCAmJG9mZnNldCwgJiRsZW5ndGgsICAmJGluZGV4LCAmJG5hbWUgKXsKCQlwcmVnX21hdGNoKCRyZSwgJHRoaXMtPmlucHV0LCAkYSwgMCwgJG9mZnNldCk7CgkJaWYoICRhICl7CgkJCSRpbmRleFtdID0gJHRoaXMtPnBvcyArICRsZW5ndGg7CgkJCSRsZW5ndGggKz0gc3RybGVuKCRhWzBdKTsKCQkJJG9mZnNldCArPSBzdHJsZW4oJGFbMF0pOwoJCQkkbmFtZVtdID0gJGFbMV07CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlcmlhbGl6ZVZhcnMoICR2YXJzICl7CgkJJHMgPSAnJzsKCgkJZm9yZWFjaCgkdmFycyBhcyAkbmFtZSA9PiAkdmFsdWUpewoJCQkkcyAuPSAoKCRuYW1lWzBdID09PSAnQCcpID8gJycgOiAnQCcpIC4gJG5hbWUgLic6ICcuICR2YWx1ZSAuICgoc3Vic3RyKCR2YWx1ZSwtMSkgPT09ICc7JykgPyAnJyA6ICc7Jyk7CgkJfQoKCQlyZXR1cm4gJHM7Cgl9CgoKCS8qKgoJICogU29tZSB2ZXJzaW9ucyBvZiBwaHAgaGF2ZSB0cm91YmxlIHdpdGggbWV0aG9kX2V4aXN0cygkYSwkYikgaWYgJGEgaXMgbm90IGFuIG9iamVjdAoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGIKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc19tZXRob2QoJGEsJGIpewoJCXJldHVybiBpc19vYmplY3QoJGEpICYmIG1ldGhvZF9leGlzdHMoJGEsJGIpOwoJfQoKCgkvKioKCSAqIFJvdW5kIG51bWJlcnMgc2ltaWxhcmx5IHRvIGphdmFzY3JpcHQKCSAqIGVnOiAxLjQ5OTk5OSB0byAxIGluc3RlYWQgb2YgMgoJICoKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByb3VuZCgkaSwgJHByZWNpc2lvbiA9IDApewoKCQkkcHJlY2lzaW9uID0gcG93KDEwLCRwcmVjaXNpb24pOwoJCSRpID0gJGkqJHByZWNpc2lvbjsKCgkJJGNlaWwgPSBjZWlsKCRpKTsKCQkkZmxvb3IgPSBmbG9vcigkaSk7CgkJaWYoICgkY2VpbCAtICRpKSA8PSAoJGkgLSAkZmxvb3IpICl7CgkJCXJldHVybiAkY2VpbC8kcHJlY2lzaW9uOwoJCX1lbHNlewoJCQlyZXR1cm4gJGZsb29yLyRwcmVjaXNpb247CgkJfQoJfQoKCgkvKioKCSAqIENyZWF0ZSBMZXNzX1RyZWVfKiBvYmplY3RzIGFuZCBvcHRpb25hbGx5IGdlbmVyYXRlIGEgY2FjaGUgc3RyaW5nCgkgKgoJICogQHJldHVybiBtaXhlZAoJICovCglwdWJsaWMgZnVuY3Rpb24gTmV3T2JqMCgkY2xhc3MpewoJCSRvYmogPSBuZXcgJGNsYXNzKCk7CgkJaWYoICR0aGlzLT5DYWNoZUVuYWJsZWQoKSApewoJCQkkb2JqLT5jYWNoZV9zdHJpbmcgPSAnIG5ldyAnLiRjbGFzcy4nKCknOwoJCX0KCQlyZXR1cm4gJG9iajsKCX0KCglwdWJsaWMgZnVuY3Rpb24gTmV3T2JqMSgkY2xhc3MsICRhcmcpewoJCSRvYmogPSBuZXcgJGNsYXNzKCAkYXJnICk7CgkJaWYoICR0aGlzLT5DYWNoZUVuYWJsZWQoKSApewoJCQkkb2JqLT5jYWNoZV9zdHJpbmcgPSAnIG5ldyAnLiRjbGFzcy4nKCcuTGVzc19QYXJzZXI6OkFyZ1N0cmluZygkYXJnKS4nKSc7CgkJfQoJCXJldHVybiAkb2JqOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBOZXdPYmoyKCRjbGFzcywgJGFyZ3MpewoJCSRvYmogPSBuZXcgJGNsYXNzKCAkYXJnc1swXSwgJGFyZ3NbMV0gKTsKCQlpZiggJHRoaXMtPkNhY2hlRW5hYmxlZCgpICl7CgkJCSR0aGlzLT5PYmpDYWNoZSggJG9iaiwgJGNsYXNzLCAkYXJncyk7CgkJfQoJCXJldHVybiAkb2JqOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBOZXdPYmozKCRjbGFzcywgJGFyZ3MpewoJCSRvYmogPSBuZXcgJGNsYXNzKCAkYXJnc1swXSwgJGFyZ3NbMV0sICRhcmdzWzJdICk7CgkJaWYoICR0aGlzLT5DYWNoZUVuYWJsZWQoKSApewoJCQkkdGhpcy0+T2JqQ2FjaGUoICRvYmosICRjbGFzcywgJGFyZ3MpOwoJCX0KCQlyZXR1cm4gJG9iajsKCX0KCglwdWJsaWMgZnVuY3Rpb24gTmV3T2JqNCgkY2xhc3MsICRhcmdzKXsKCQkkb2JqID0gbmV3ICRjbGFzcyggJGFyZ3NbMF0sICRhcmdzWzFdLCAkYXJnc1syXSwgJGFyZ3NbM10gKTsKCQlpZiggJHRoaXMtPkNhY2hlRW5hYmxlZCgpICl7CgkJCSR0aGlzLT5PYmpDYWNoZSggJG9iaiwgJGNsYXNzLCAkYXJncyk7CgkJfQoJCXJldHVybiAkb2JqOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBOZXdPYmo1KCRjbGFzcywgJGFyZ3MpewoJCSRvYmogPSBuZXcgJGNsYXNzKCAkYXJnc1swXSwgJGFyZ3NbMV0sICRhcmdzWzJdLCAkYXJnc1szXSwgJGFyZ3NbNF0gKTsKCQlpZiggJHRoaXMtPkNhY2hlRW5hYmxlZCgpICl7CgkJCSR0aGlzLT5PYmpDYWNoZSggJG9iaiwgJGNsYXNzLCAkYXJncyk7CgkJfQoJCXJldHVybiAkb2JqOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBOZXdPYmo2KCRjbGFzcywgJGFyZ3MpewoJCSRvYmogPSBuZXcgJGNsYXNzKCAkYXJnc1swXSwgJGFyZ3NbMV0sICRhcmdzWzJdLCAkYXJnc1szXSwgJGFyZ3NbNF0sICRhcmdzWzVdICk7CgkJaWYoICR0aGlzLT5DYWNoZUVuYWJsZWQoKSApewoJCQkkdGhpcy0+T2JqQ2FjaGUoICRvYmosICRjbGFzcywgJGFyZ3MpOwoJCX0KCQlyZXR1cm4gJG9iajsKCX0KCglwdWJsaWMgZnVuY3Rpb24gTmV3T2JqNygkY2xhc3MsICRhcmdzKXsKCQkkb2JqID0gbmV3ICRjbGFzcyggJGFyZ3NbMF0sICRhcmdzWzFdLCAkYXJnc1syXSwgJGFyZ3NbM10sICRhcmdzWzRdLCAkYXJnc1s1XSwgJGFyZ3NbNl0gKTsKCQlpZiggJHRoaXMtPkNhY2hlRW5hYmxlZCgpICl7CgkJCSR0aGlzLT5PYmpDYWNoZSggJG9iaiwgJGNsYXNzLCAkYXJncyk7CgkJfQoJCXJldHVybiAkb2JqOwoJfQoKCS8vY2FjaGluZwoJcHVibGljIGZ1bmN0aW9uIE9iakNhY2hlKCRvYmosICRjbGFzcywgJGFyZ3M9YXJyYXkoKSl7CgkJJG9iai0+Y2FjaGVfc3RyaW5nID0gJyBuZXcgJy4kY2xhc3MuJygnLiBzZWxmOjpBcmdDYWNoZSgkYXJncykuJyknOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBBcmdDYWNoZSgkYXJncyl7CgkJcmV0dXJuIGltcGxvZGUoJywnLGFycmF5X21hcCggYXJyYXkoJ0xlc3NfUGFyc2VyJywnQXJnU3RyaW5nJyksJGFyZ3MpKTsKCX0KCgoJLyoqCgkgKiBDb252ZXJ0IGFuIGFyZ3VtZW50IHRvIGEgc3RyaW5nIGZvciB1c2UgaW4gdGhlIHBhcnNlciBjYWNoZQoJICoKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQXJnU3RyaW5nKCRhcmcpewoKCQkkdHlwZSA9IGdldHR5cGUoJGFyZyk7CgoJCWlmKCAkdHlwZSA9PT0gJ29iamVjdCcpewoJCQkkc3RyaW5nID0gJGFyZy0+Y2FjaGVfc3RyaW5nOwoJCQl1bnNldCgkYXJnLT5jYWNoZV9zdHJpbmcpOwoJCQlyZXR1cm4gJHN0cmluZzsKCgkJfWVsc2VpZiggJHR5cGUgPT09ICdhcnJheScgKXsKCQkJJHN0cmluZyA9ICcgQXJyYXkoJzsKCQkJZm9yZWFjaCgkYXJnIGFzICRrID0+ICRhKXsKCQkJCSRzdHJpbmcgLj0gdmFyX2V4cG9ydCgkayx0cnVlKS4nID0+ICcuc2VsZjo6QXJnU3RyaW5nKCRhKS4nLCc7CgkJCX0KCQkJcmV0dXJuICRzdHJpbmcgLiAnKSc7CgkJfQoKCQlyZXR1cm4gdmFyX2V4cG9ydCgkYXJnLHRydWUpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBFcnJvcigkbXNnKXsKCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fUGFyc2VyKCRtc2csIG51bGwsICR0aGlzLT5mdXJ0aGVzdCwgJHRoaXMtPmVudi0+Y3VycmVudEZpbGVJbmZvKTsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIFdpblBhdGgoJHBhdGgpewoJCXJldHVybiBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRwYXRoKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gQ2FjaGVFbmFibGVkKCl7CgkJcmV0dXJuIChMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2NhY2hlX21ldGhvZCddICYmIChMZXNzX0NhY2hlOjokY2FjaGVfZGlyIHx8IChMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2NhY2hlX21ldGhvZCddID09ICdjYWxsYmFjaycpKSk7Cgl9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/SourceMap/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/SourceMap/Base64VLQ.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBFbmNvZGUgLyBEZWNvZGUgQmFzZTY0IFZMUS4KICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSBTb3VyY2VNYXAKICovCmNsYXNzIExlc3NfU291cmNlTWFwX0Jhc2U2NFZMUSB7CgoJLyoqCgkgKiBTaGlmdAoJICoKCSAqIEB2YXIgaW50ZWdlcgoJICovCglwcml2YXRlICRzaGlmdCA9IDU7CgoJLyoqCgkgKiBNYXNrCgkgKgoJICogQHZhciBpbnRlZ2VyCgkgKi8KCXByaXZhdGUgJG1hc2sgPSAweDFGOyAvLyA9PSAoMSA8PCBzaGlmdCkgPT0gMGIwMDAxMTExMQoKCS8qKgoJICogQ29udGludWF0aW9uIGJpdAoJICoKCSAqIEB2YXIgaW50ZWdlcgoJICovCglwcml2YXRlICRjb250aW51YXRpb25CaXQgPSAweDIwOyAvLyA9PSAobWFzayAtIDEgKSA9PSAwYjAwMTAwMDAwCgoJLyoqCgkgKiBDaGFyIHRvIGludGVnZXIgbWFwCgkgKgoJICogQHZhciBhcnJheQoJICovCglwcml2YXRlICRjaGFyVG9JbnRNYXAgPSBhcnJheSgKCQknQScgPT4gMCwgJ0InID0+IDEsICdDJyA9PiAyLCAnRCcgPT4gMywgJ0UnID0+IDQsICdGJyA9PiA1LCAnRycgPT4gNiwKCQknSCcgPT4gNywnSScgPT4gOCwgJ0onID0+IDksICdLJyA9PiAxMCwgJ0wnID0+IDExLCAnTScgPT4gMTIsICdOJyA9PiAxMywKCQknTycgPT4gMTQsICdQJyA9PiAxNSwgJ1EnID0+IDE2LCAnUicgPT4gMTcsICdTJyA9PiAxOCwgJ1QnID0+IDE5LCAnVScgPT4gMjAsCgkJJ1YnID0+IDIxLCAnVycgPT4gMjIsICdYJyA9PiAyMywgJ1knID0+IDI0LCAnWicgPT4gMjUsICdhJyA9PiAyNiwgJ2InID0+IDI3LAoJCSdjJyA9PiAyOCwgJ2QnID0+IDI5LCAnZScgPT4gMzAsICdmJyA9PiAzMSwgJ2cnID0+IDMyLCAnaCcgPT4gMzMsICdpJyA9PiAzNCwKCQknaicgPT4gMzUsICdrJyA9PiAzNiwgJ2wnID0+IDM3LCAnbScgPT4gMzgsICduJyA9PiAzOSwgJ28nID0+IDQwLCAncCcgPT4gNDEsCgkJJ3EnID0+IDQyLCAncicgPT4gNDMsICdzJyA9PiA0NCwgJ3QnID0+IDQ1LCAndScgPT4gNDYsICd2JyA9PiA0NywgJ3cnID0+IDQ4LAoJCSd4JyA9PiA0OSwgJ3knID0+IDUwLCAneicgPT4gNTEsIDAgPT4gNTIsIDEgPT4gNTMsIDIgPT4gNTQsIDMgPT4gNTUsIDQgPT4gNTYsCgkJNSA9PiA1NywJNiA9PiA1OCwgNyA9PiA1OSwgOCA9PiA2MCwgOSA9PiA2MSwgJysnID0+IDYyLCAnLycgPT4gNjMsCgkpOwoKCS8qKgoJICogSW50ZWdlciB0byBjaGFyIG1hcAoJICoKCSAqIEB2YXIgYXJyYXkKCSAqLwoJcHJpdmF0ZSAkaW50VG9DaGFyTWFwID0gYXJyYXkoCgkJMCA9PiAnQScsIDEgPT4gJ0InLCAyID0+ICdDJywgMyA9PiAnRCcsIDQgPT4gJ0UnLCA1ID0+ICdGJywgNiA9PiAnRycsCgkJNyA9PiAnSCcsIDggPT4gJ0knLCA5ID0+ICdKJywgMTAgPT4gJ0snLCAxMSA9PiAnTCcsIDEyID0+ICdNJywgMTMgPT4gJ04nLAoJCTE0ID0+ICdPJywgMTUgPT4gJ1AnLCAxNiA9PiAnUScsIDE3ID0+ICdSJywgMTggPT4gJ1MnLCAxOSA9PiAnVCcsIDIwID0+ICdVJywKCQkyMSA9PiAnVicsIDIyID0+ICdXJywgMjMgPT4gJ1gnLCAyNCA9PiAnWScsIDI1ID0+ICdaJywgMjYgPT4gJ2EnLCAyNyA9PiAnYicsCgkJMjggPT4gJ2MnLCAyOSA9PiAnZCcsIDMwID0+ICdlJywgMzEgPT4gJ2YnLCAzMiA9PiAnZycsIDMzID0+ICdoJywgMzQgPT4gJ2knLAoJCTM1ID0+ICdqJywgMzYgPT4gJ2snLCAzNyA9PiAnbCcsIDM4ID0+ICdtJywgMzkgPT4gJ24nLCA0MCA9PiAnbycsIDQxID0+ICdwJywKCQk0MiA9PiAncScsIDQzID0+ICdyJywgNDQgPT4gJ3MnLCA0NSA9PiAndCcsIDQ2ID0+ICd1JywgNDcgPT4gJ3YnLCA0OCA9PiAndycsCgkJNDkgPT4gJ3gnLCA1MCA9PiAneScsIDUxID0+ICd6JywgNTIgPT4gJzAnLCA1MyA9PiAnMScsIDU0ID0+ICcyJywgNTUgPT4gJzMnLAoJCTU2ID0+ICc0JywgNTcgPT4gJzUnLCA1OCA9PiAnNicsIDU5ID0+ICc3JywgNjAgPT4gJzgnLCA2MSA9PiAnOScsIDYyID0+ICcrJywKCQk2MyA9PiAnLycsCgkpOwoKCS8qKgoJICogQ29uc3RydWN0b3IKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCl7CgkJLy8gSSBsZWF2ZSBpdCBoZXJlIGZvciBmdXR1cmUgcmVmZXJlbmNlCgkJLy8gZm9yZWFjaChzdHJfc3BsaXQoJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nKSBhcyAkaSA9PiAkY2hhcikKCQkvLyB7CgkJLy8JICR0aGlzLT5jaGFyVG9JbnRNYXBbJGNoYXJdID0gJGk7CgkJLy8JICR0aGlzLT5pbnRUb0NoYXJNYXBbJGldID0gJGNoYXI7CgkJLy8gfQoJfQoKCS8qKgoJICogQ29udmVydCBmcm9tIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgdG8gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXMKCSAqIGlzIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LglGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6CgkgKgkgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KQoJICoJIDIgYmVjb21lcyA0ICgxMDAgYmluYXJ5KSwgLTIgYmVjb21lcyA1ICgxMDEgYmluYXJ5KQoJICogV2UgZ2VuZXJhdGUgdGhlIHZhbHVlIGZvciAzMiBiaXQgbWFjaGluZXMsIGhlbmNlIC0yMTQ3NDgzNjQ4IGJlY29tZXMgMSwgbm90IDQyOTQ5NjcyOTcsCgkgKiBldmVuIG9uIGEgNjQgYml0IG1hY2hpbmUuCgkgKiBAcGFyYW0gc3RyaW5nICRhVmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvVkxRU2lnbmVkKCRhVmFsdWUpewoJCXJldHVybiAweGZmZmZmZmZmICYgKCRhVmFsdWUgPCAwID8gKCgtJGFWYWx1ZSkgPDwgMSkgKyAxIDogKCRhVmFsdWUgPDwgMSkgKyAwKTsKCX0KCgkvKioKCSAqIENvbnZlcnQgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzCgkgKiBpcyBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOgoJICoJIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTEKCSAqCSA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTIKCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSB2YWx1ZSB3YXMgZ2VuZXJhdGVkIHdpdGggYSAzMiBiaXQgbWFjaGluZSBpbiBtaW5kLgoJICogSGVuY2UKCSAqCSAxIGJlY29tZXMgLTIxNDc0ODM2NDgKCSAqIGV2ZW4gb24gYSA2NCBiaXQgbWFjaGluZS4KCSAqIEBwYXJhbSBpbnRlZ2VyICRhVmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZyb21WTFFTaWduZWQoJGFWYWx1ZSl7CgkJcmV0dXJuICRhVmFsdWUgJiAxID8gJHRoaXMtPnplcm9GaWxsKH4kYVZhbHVlICsgMiwgMSkgfCAoLTEgLSAweDdmZmZmZmZmKSA6ICR0aGlzLT56ZXJvRmlsbCgkYVZhbHVlLCAxKTsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS4KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRhVmFsdWUgVGhlIHZhbHVlIHRvIGVuY29kZQoJICogQHJldHVybiBzdHJpbmcgVGhlIGVuY29kZWQgdmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGVuY29kZSgkYVZhbHVlKXsKCQkkZW5jb2RlZCA9ICcnOwoJCSR2bHEgPSAkdGhpcy0+dG9WTFFTaWduZWQoJGFWYWx1ZSk7CgkJZG8KCQl7CgkJCSRkaWdpdCA9ICR2bHEgJiAkdGhpcy0+bWFzazsKCQkJJHZscSA9ICR0aGlzLT56ZXJvRmlsbCgkdmxxLCAkdGhpcy0+c2hpZnQpOwoJCQlpZigkdmxxID4gMCl7CgkJCQkkZGlnaXQgfD0gJHRoaXMtPmNvbnRpbnVhdGlvbkJpdDsKCQkJfQoJCQkkZW5jb2RlZCAuPSAkdGhpcy0+YmFzZTY0RW5jb2RlKCRkaWdpdCk7CgkJfSB3aGlsZSgkdmxxID4gMCk7CgoJCXJldHVybiAkZW5jb2RlZDsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgdmFsdWUgZGVjb2RlZCBmcm9tIGJhc2UgNjQgVkxRLgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGVuY29kZWQgVGhlIGVuY29kZWQgdmFsdWUgdG8gZGVjb2RlCgkgKiBAcmV0dXJuIGludGVnZXIgVGhlIGRlY29kZWQgdmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRlY29kZSgkZW5jb2RlZCl7CgkJJHZscSA9IDA7CgkJJGkgPSAwOwoJCWRvCgkJewoJCQkkZGlnaXQgPSAkdGhpcy0+YmFzZTY0RGVjb2RlKCRlbmNvZGVkWyRpXSk7CgkJCSR2bHEgfD0gKCRkaWdpdCAmICR0aGlzLT5tYXNrKSA8PCAoJGkgKiAkdGhpcy0+c2hpZnQpOwoJCQkkaSsrOwoJCX0gd2hpbGUoJGRpZ2l0ICYgJHRoaXMtPmNvbnRpbnVhdGlvbkJpdCk7CgoJCXJldHVybiAkdGhpcy0+ZnJvbVZMUVNpZ25lZCgkdmxxKTsKCX0KCgkvKioKCSAqIFJpZ2h0IHNoaWZ0IHdpdGggemVybyBmaWxsLgoJICoKCSAqIEBwYXJhbSBpbnRlZ2VyICRhIG51bWJlciB0byBzaGlmdAoJICogQHBhcmFtIGludGVnZXIgJGIgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQKCSAqIEByZXR1cm4gaW50ZWdlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gemVyb0ZpbGwoJGEsICRiKXsKCQlyZXR1cm4gKCRhID49IDApID8gKCRhID4+ICRiKSA6ICgkYSA+PiAkYikgJiAoUEhQX0lOVF9NQVggPj4gKCRiIC0gMSkpOwoJfQoKCS8qKgoJICogRW5jb2RlIHNpbmdsZSA2LWJpdCBkaWdpdCBhcyBiYXNlNjQuCgkgKgoJICogQHBhcmFtIGludGVnZXIgJG51bWJlcgoJICogQHJldHVybiBzdHJpbmcKCSAqIEB0aHJvd3MgRXhjZXB0aW9uIElmIHRoZSBudW1iZXIgaXMgaW52YWxpZAoJICovCglwdWJsaWMgZnVuY3Rpb24gYmFzZTY0RW5jb2RlKCRudW1iZXIpewoJCWlmKCRudW1iZXIgPCAwIHx8ICRudW1iZXIgPiA2Myl7CgkJCXRocm93IG5ldyBFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBudW1iZXIgIiVzIiBnaXZlbi4gTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzLicsICRudW1iZXIpKTsKCQl9CgkJcmV0dXJuICR0aGlzLT5pbnRUb0NoYXJNYXBbJG51bWJlcl07Cgl9CgoJLyoqCgkgKiBEZWNvZGUgc2luZ2xlIDYtYml0IGRpZ2l0IGZyb20gYmFzZTY0CgkgKgoJICogQHBhcmFtIHN0cmluZyAkY2hhcgoJICogQHJldHVybiBudW1iZXIKCSAqIEB0aHJvd3MgRXhjZXB0aW9uIElmIHRoZSBudW1iZXIgaXMgaW52YWxpZAoJICovCglwdWJsaWMgZnVuY3Rpb24gYmFzZTY0RGVjb2RlKCRjaGFyKXsKCQlpZighYXJyYXlfa2V5X2V4aXN0cygkY2hhciwgJHRoaXMtPmNoYXJUb0ludE1hcCkpewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgYmFzZSA2NCBkaWdpdCAiJXMiIGdpdmVuLicsICRjaGFyKSk7CgkJfQoJCXJldHVybiAkdGhpcy0+Y2hhclRvSW50TWFwWyRjaGFyXTsKCX0KCn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/SourceMap/Generator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBTb3VyY2UgbWFwIGdlbmVyYXRvcg0KICoNCiAqIEBwYWNrYWdlIExlc3MNCiAqIEBzdWJwYWNrYWdlIE91dHB1dA0KICovDQpjbGFzcyBMZXNzX1NvdXJjZU1hcF9HZW5lcmF0b3IgZXh0ZW5kcyBMZXNzX0NvbmZpZ3VyYWJsZSB7DQoNCgkvKioNCgkgKiBXaGF0IHZlcnNpb24gb2Ygc291cmNlIG1hcCBkb2VzIHRoZSBnZW5lcmF0b3IgZ2VuZXJhdGU/DQoJICovDQoJY29uc3QgVkVSU0lPTiA9IDM7DQoNCgkvKioNCgkgKiBBcnJheSBvZiBkZWZhdWx0IG9wdGlvbnMNCgkgKg0KCSAqIEB2YXIgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJGRlZmF1bHRPcHRpb25zID0gYXJyYXkoDQoJCQkvLyBhbiBvcHRpb25hbCBzb3VyY2Ugcm9vdCwgdXNlZnVsIGZvciByZWxvY2F0aW5nIHNvdXJjZSBmaWxlcw0KCQkJLy8gb24gYSBzZXJ2ZXIgb3IgcmVtb3ZpbmcgcmVwZWF0ZWQgdmFsdWVzIGluIHRoZSAnc291cmNlcycgZW50cnkuDQoJCQkvLyBUaGlzIHZhbHVlIGlzIHByZXBlbmRlZCB0byB0aGUgaW5kaXZpZHVhbCBlbnRyaWVzIGluIHRoZSAnc291cmNlJyBmaWVsZC4NCgkJCSdzb3VyY2VSb290JwkJCT0+ICcnLA0KDQoJCQkvLyBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSB0aGF0IHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguDQoJCQknc291cmNlTWFwRmlsZW5hbWUnCQk9PiBudWxsLA0KDQoJCQkvLyB1cmwgb2YgdGhlIG1hcA0KCQkJJ3NvdXJjZU1hcFVSTCcJCQk9PiBudWxsLA0KDQoJCQkvLyBhYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZSB0byB3cml0ZSB0aGUgbWFwIHRvDQoJCQknc291cmNlTWFwV3JpdGVUbycJCT0+IG51bGwsDQoNCgkJCS8vIG91dHB1dCBzb3VyY2UgY29udGVudHM/DQoJCQknb3V0cHV0U291cmNlRmlsZXMnCQk9PiBmYWxzZSwNCg0KCQkJLy8gYmFzZSBwYXRoIGZvciBmaWxlbmFtZSBub3JtYWxpemF0aW9uDQoJCQknc291cmNlTWFwUm9vdHBhdGgnCQk9PiAnJywNCg0KCQkJLy8gYmFzZSBwYXRoIGZvciBmaWxlbmFtZSBub3JtYWxpemF0aW9uDQoJCQknc291cmNlTWFwQmFzZXBhdGgnICAgPT4gJycNCgkpOw0KDQoJLyoqDQoJICogVGhlIGJhc2U2NCBWTFEgZW5jb2Rlcg0KCSAqDQoJICogQHZhciBMZXNzX1NvdXJjZU1hcF9CYXNlNjRWTFENCgkgKi8NCglwcm90ZWN0ZWQgJGVuY29kZXI7DQoNCgkvKioNCgkgKiBBcnJheSBvZiBtYXBwaW5ncw0KCSAqDQoJICogQHZhciBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbWFwcGluZ3MgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogVGhlIHJvb3Qgbm9kZQ0KCSAqDQoJICogQHZhciBMZXNzX1RyZWVfUnVsZXNldA0KCSAqLw0KCXByb3RlY3RlZCAkcm9vdDsNCg0KCS8qKg0KCSAqIEFycmF5IG9mIGNvbnRlbnRzIG1hcA0KCSAqDQoJICogQHZhciBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkY29udGVudHNNYXAgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogRmlsZSB0byBjb250ZW50IG1hcA0KCSAqDQoJICogQHZhciBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkc291cmNlcyA9IGFycmF5KCk7DQoJcHJvdGVjdGVkICRzb3VyY2Vfa2V5cyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3Rvcg0KCSAqDQoJICogQHBhcmFtIExlc3NfVHJlZV9SdWxlc2V0ICRyb290IFRoZSByb290IG5vZGUNCgkgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgQXJyYXkgb2Ygb3B0aW9ucw0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChMZXNzX1RyZWVfUnVsZXNldCAkcm9vdCwgJGNvbnRlbnRzTWFwLCAkb3B0aW9ucyA9IGFycmF5KCkpew0KCQkkdGhpcy0+cm9vdCA9ICRyb290Ow0KCQkkdGhpcy0+Y29udGVudHNNYXAgPSAkY29udGVudHNNYXA7DQoJCSR0aGlzLT5lbmNvZGVyID0gbmV3IExlc3NfU291cmNlTWFwX0Jhc2U2NFZMUSgpOw0KDQoJCSR0aGlzLT5TZXRPcHRpb25zKCRvcHRpb25zKTsNCgkJDQoJCSR0aGlzLT5vcHRpb25zWydzb3VyY2VNYXBSb290cGF0aCddID0gJHRoaXMtPmZpeFdpbmRvd3NQYXRoKCR0aGlzLT5vcHRpb25zWydzb3VyY2VNYXBSb290cGF0aCddLCB0cnVlKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3NvdXJjZU1hcEJhc2VwYXRoJ10gPSAkdGhpcy0+Zml4V2luZG93c1BhdGgoJHRoaXMtPm9wdGlvbnNbJ3NvdXJjZU1hcEJhc2VwYXRoJ10sIHRydWUpOw0KCX0NCg0KCS8qKg0KCSAqIEdlbmVyYXRlcyB0aGUgQ1NTDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZUNTUygpew0KCQkkb3V0cHV0ID0gbmV3IExlc3NfT3V0cHV0X01hcHBlZCgkdGhpcy0+Y29udGVudHNNYXAsICR0aGlzKTsNCg0KCQkvLyBjYXRjaCB0aGUgb3V0cHV0DQoJCSR0aGlzLT5yb290LT5nZW5DU1MoJG91dHB1dCk7DQoNCg0KCQkkc291cmNlTWFwVXJsCQkJCT0gJHRoaXMtPmdldE9wdGlvbignc291cmNlTWFwVVJMJyk7DQoJCSRzb3VyY2VNYXBGaWxlbmFtZQkJCT0gJHRoaXMtPmdldE9wdGlvbignc291cmNlTWFwRmlsZW5hbWUnKTsNCgkJJHNvdXJjZU1hcENvbnRlbnQJCQk9ICR0aGlzLT5nZW5lcmF0ZUpzb24oKTsNCgkJJHNvdXJjZU1hcFdyaXRlVG8JCQk9ICR0aGlzLT5nZXRPcHRpb24oJ3NvdXJjZU1hcFdyaXRlVG8nKTsNCg0KCQlpZiggISRzb3VyY2VNYXBVcmwgJiYgJHNvdXJjZU1hcEZpbGVuYW1lICl7DQoJCQkkc291cmNlTWFwVXJsID0gJHRoaXMtPm5vcm1hbGl6ZUZpbGVuYW1lKCRzb3VyY2VNYXBGaWxlbmFtZSk7DQoJCX0NCg0KCQkvLyB3cml0ZSBtYXAgdG8gYSBmaWxlDQoJCWlmKCAkc291cmNlTWFwV3JpdGVUbyApew0KCQkJJHRoaXMtPnNhdmVNYXAoJHNvdXJjZU1hcFdyaXRlVG8sICRzb3VyY2VNYXBDb250ZW50KTsNCgkJfQ0KDQoJCS8vIGlubGluZSB0aGUgbWFwDQoJCWlmKCAhJHNvdXJjZU1hcFVybCApew0KCQkJJHNvdXJjZU1hcFVybCA9IHNwcmludGYoJ2RhdGE6YXBwbGljYXRpb24vanNvbiwlcycsIExlc3NfRnVuY3Rpb25zOjplbmNvZGVVUklDb21wb25lbnQoJHNvdXJjZU1hcENvbnRlbnQpKTsNCgkJfQ0KDQoJCWlmKCAkc291cmNlTWFwVXJsICl7DQoJCQkkb3V0cHV0LT5hZGQoIHNwcmludGYoJy8qIyBzb3VyY2VNYXBwaW5nVVJMPSVzICovJywgJHNvdXJjZU1hcFVybCkgKTsNCgkJfQ0KDQoJCXJldHVybiAkb3V0cHV0LT50b1N0cmluZygpOw0KCX0NCg0KCS8qKg0KCSAqIFNhdmVzIHRoZSBzb3VyY2UgbWFwIHRvIGEgZmlsZQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZmlsZSBUaGUgYWJzb2x1dGUgcGF0aCB0byBhIGZpbGUNCgkgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IFRoZSBjb250ZW50IHRvIHdyaXRlDQoJICogQHRocm93cyBFeGNlcHRpb24gSWYgdGhlIGZpbGUgY291bGQgbm90IGJlIHNhdmVkDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNhdmVNYXAoJGZpbGUsICRjb250ZW50KXsNCgkJJGRpciA9IGRpcm5hbWUoJGZpbGUpOw0KCQkvLyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QNCgkJaWYoICFpc19kaXIoJGRpcikgKXsNCgkJCS8vIEZJWE1FOiBjcmVhdGUgdGhlIGRpciBhdXRvbWF0aWNhbGx5Pw0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgZGlyZWN0b3J5ICIlcyIgZG9lcyBub3QgZXhpc3QuIENhbm5vdCBzYXZlIHRoZSBzb3VyY2UgbWFwLicsICRkaXIpKTsNCgkJfQ0KCQkvLyBGSVhNRTogcHJvcGVyIHNhdmluZywgd2l0aCBkaXIgd3JpdGUgY2hlY2shDQoJCWlmKGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCAkY29udGVudCkgPT09IGZhbHNlKXsNCgkJCXRocm93IG5ldyBFeGNlcHRpb24oc3ByaW50ZignQ2Fubm90IHNhdmUgdGhlIHNvdXJjZSBtYXAgdG8gIiVzIicsICRmaWxlKSk7DQoJCX0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJICogTm9ybWFsaXplcyB0aGUgZmlsZW5hbWUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lDQoJICogQHJldHVybiBzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gbm9ybWFsaXplRmlsZW5hbWUoJGZpbGVuYW1lKXsNCg0KCQkkZmlsZW5hbWUgPSAkdGhpcy0+Zml4V2luZG93c1BhdGgoJGZpbGVuYW1lKTsNCg0KCQkkcm9vdHBhdGggPSAkdGhpcy0+Z2V0T3B0aW9uKCdzb3VyY2VNYXBSb290cGF0aCcpOw0KCQkkYmFzZVBhdGggPSAkdGhpcy0+Z2V0T3B0aW9uKCdzb3VyY2VNYXBCYXNlcGF0aCcpOw0KDQoJCS8vICJUcmltIiB0aGUgJ3NvdXJjZU1hcEJhc2VwYXRoJyBmcm9tIHRoZSBvdXRwdXQgZmlsZW5hbWUuDQoJCWlmIChzdHJwb3MoJGZpbGVuYW1lLCAkYmFzZVBhdGgpID09PSAwKSB7DQoJCQkkZmlsZW5hbWUgPSBzdWJzdHIoJGZpbGVuYW1lLCBzdHJsZW4oJGJhc2VQYXRoKSk7DQoJCX0NCg0KCQkvLyBSZW1vdmUgZXh0cmEgbGVhZGluZyBwYXRoIHNlcGFyYXRvcnMuDQoJCWlmKHN0cnBvcygkZmlsZW5hbWUsICdcXCcpID09PSAwIHx8IHN0cnBvcygkZmlsZW5hbWUsICcvJykgPT09IDApew0KCQkJJGZpbGVuYW1lID0gc3Vic3RyKCRmaWxlbmFtZSwgMSk7DQoJCX0NCg0KCQlyZXR1cm4gJHJvb3RwYXRoIC4gJGZpbGVuYW1lOw0KCX0NCg0KCS8qKg0KCSAqIEFkZHMgYSBtYXBwaW5nDQoJICoNCgkgKiBAcGFyYW0gaW50ZWdlciAkZ2VuZXJhdGVkTGluZSBUaGUgbGluZSBudW1iZXIgaW4gZ2VuZXJhdGVkIGZpbGUNCgkgKiBAcGFyYW0gaW50ZWdlciAkZ2VuZXJhdGVkQ29sdW1uIFRoZSBjb2x1bW4gbnVtYmVyIGluIGdlbmVyYXRlZCBmaWxlDQoJICogQHBhcmFtIGludGVnZXIgJG9yaWdpbmFsTGluZSBUaGUgbGluZSBudW1iZXIgaW4gb3JpZ2luYWwgZmlsZQ0KCSAqIEBwYXJhbSBpbnRlZ2VyICRvcmlnaW5hbENvbHVtbiBUaGUgY29sdW1uIG51bWJlciBpbiBvcmlnaW5hbCBmaWxlDQoJICogQHBhcmFtIHN0cmluZyAkc291cmNlRmlsZSBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gYWRkTWFwcGluZygkZ2VuZXJhdGVkTGluZSwgJGdlbmVyYXRlZENvbHVtbiwgJG9yaWdpbmFsTGluZSwgJG9yaWdpbmFsQ29sdW1uLCAkZmlsZUluZm8gKXsNCg0KCQkkdGhpcy0+bWFwcGluZ3NbXSA9IGFycmF5KA0KCQkJJ2dlbmVyYXRlZF9saW5lJyA9PiAkZ2VuZXJhdGVkTGluZSwNCgkJCSdnZW5lcmF0ZWRfY29sdW1uJyA9PiAkZ2VuZXJhdGVkQ29sdW1uLA0KCQkJJ29yaWdpbmFsX2xpbmUnID0+ICRvcmlnaW5hbExpbmUsDQoJCQknb3JpZ2luYWxfY29sdW1uJyA9PiAkb3JpZ2luYWxDb2x1bW4sDQoJCQknc291cmNlX2ZpbGUnID0+ICRmaWxlSW5mb1snY3VycmVudFVyaSddDQoJCSk7DQoNCgkJJHRoaXMtPnNvdXJjZXNbJGZpbGVJbmZvWydjdXJyZW50VXJpJ11dID0gJGZpbGVJbmZvWydmaWxlbmFtZSddOw0KCX0NCg0KDQoJLyoqDQoJICogR2VuZXJhdGVzIHRoZSBKU09OIHNvdXJjZSBtYXANCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNlZSBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdlbmVyYXRlSnNvbigpew0KDQoJCSRzb3VyY2VNYXAgPSBhcnJheSgpOw0KCQkkbWFwcGluZ3MgPSAkdGhpcy0+Z2VuZXJhdGVNYXBwaW5ncygpOw0KDQoJCS8vIEZpbGUgdmVyc2lvbiAoYWx3YXlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgb2JqZWN0KSBhbmQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuDQoJCSRzb3VyY2VNYXBbJ3ZlcnNpb24nXSA9IHNlbGY6OlZFUlNJT047DQoNCg0KCQkvLyBBbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSB0aGF0IHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguDQoJCSRmaWxlID0gJHRoaXMtPmdldE9wdGlvbignc291cmNlTWFwRmlsZW5hbWUnKTsNCgkJaWYoICRmaWxlICl7DQoJCQkkc291cmNlTWFwWydmaWxlJ10gPSAkZmlsZTsNCgkJfQ0KDQoNCgkJLy8gQW4gb3B0aW9uYWwgc291cmNlIHJvb3QsIHVzZWZ1bCBmb3IgcmVsb2NhdGluZyBzb3VyY2UgZmlsZXMgb24gYSBzZXJ2ZXIgb3IgcmVtb3ZpbmcgcmVwZWF0ZWQgdmFsdWVzIGluIHRoZSAnc291cmNlcycgZW50cnkuCVRoaXMgdmFsdWUgaXMgcHJlcGVuZGVkIHRvIHRoZSBpbmRpdmlkdWFsIGVudHJpZXMgaW4gdGhlICdzb3VyY2UnIGZpZWxkLg0KCQkkcm9vdCA9ICR0aGlzLT5nZXRPcHRpb24oJ3NvdXJjZVJvb3QnKTsNCgkJaWYoICRyb290ICl7DQoJCQkkc291cmNlTWFwWydzb3VyY2VSb290J10gPSAkcm9vdDsNCgkJfQ0KDQoNCgkJLy8gQSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMgdXNlZCBieSB0aGUgJ21hcHBpbmdzJyBlbnRyeS4NCgkJJHNvdXJjZU1hcFsnc291cmNlcyddID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkdGhpcy0+c291cmNlcyBhcyAkc291cmNlX3VyaSA9PiAkc291cmNlX2ZpbGVuYW1lKXsNCgkJCSRzb3VyY2VNYXBbJ3NvdXJjZXMnXVtdID0gJHRoaXMtPm5vcm1hbGl6ZUZpbGVuYW1lKCRzb3VyY2VfZmlsZW5hbWUpOw0KCQl9DQoNCg0KCQkvLyBBIGxpc3Qgb2Ygc3ltYm9sIG5hbWVzIHVzZWQgYnkgdGhlICdtYXBwaW5ncycgZW50cnkuDQoJCSRzb3VyY2VNYXBbJ25hbWVzJ10gPSBhcnJheSgpOw0KDQoJCS8vIEEgc3RyaW5nIHdpdGggdGhlIGVuY29kZWQgbWFwcGluZyBkYXRhLg0KCQkkc291cmNlTWFwWydtYXBwaW5ncyddID0gJG1hcHBpbmdzOw0KDQoJCWlmKCAkdGhpcy0+Z2V0T3B0aW9uKCdvdXRwdXRTb3VyY2VGaWxlcycpICl7DQoJCQkvLyBBbiBvcHRpb25hbCBsaXN0IG9mIHNvdXJjZSBjb250ZW50LCB1c2VmdWwgd2hlbiB0aGUgJ3NvdXJjZScgY2FuJ3QgYmUgaG9zdGVkLg0KCQkJLy8gVGhlIGNvbnRlbnRzIGFyZSBsaXN0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHNvdXJjZXMgYWJvdmUuDQoJCQkvLyAnbnVsbCcgbWF5IGJlIHVzZWQgaWYgc29tZSBvcmlnaW5hbCBzb3VyY2VzIHNob3VsZCBiZSByZXRyaWV2ZWQgYnkgbmFtZS4NCgkJCSRzb3VyY2VNYXBbJ3NvdXJjZXNDb250ZW50J10gPSAkdGhpcy0+Z2V0U291cmNlc0NvbnRlbnQoKTsNCgkJfQ0KDQoJCS8vIGxlc3MuanMgY29tcGF0IGZpeGVzDQoJCWlmKCBjb3VudCgkc291cmNlTWFwWydzb3VyY2VzJ10pICYmIGVtcHR5KCRzb3VyY2VNYXBbJ3NvdXJjZVJvb3QnXSkgKXsNCgkJCXVuc2V0KCRzb3VyY2VNYXBbJ3NvdXJjZVJvb3QnXSk7DQoJCX0NCg0KCQlyZXR1cm4ganNvbl9lbmNvZGUoJHNvdXJjZU1hcCk7DQoJfQ0KDQoJLyoqDQoJICogUmV0dXJucyB0aGUgc291cmNlcyBjb250ZW50cw0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNvdXJjZXNDb250ZW50KCl7DQoJCWlmKGVtcHR5KCR0aGlzLT5zb3VyY2VzKSl7DQoJCQlyZXR1cm47DQoJCX0NCgkJJGNvbnRlbnQgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCR0aGlzLT5zb3VyY2VzIGFzICRzb3VyY2VGaWxlKXsNCgkJCSRjb250ZW50W10gPSBmaWxlX2dldF9jb250ZW50cygkc291cmNlRmlsZSk7DQoJCX0NCgkJcmV0dXJuICRjb250ZW50Ow0KCX0NCg0KCS8qKg0KCSAqIEdlbmVyYXRlcyB0aGUgbWFwcGluZ3Mgc3RyaW5nDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZU1hcHBpbmdzKCl7DQoNCgkJaWYoICFjb3VudCgkdGhpcy0+bWFwcGluZ3MpICl7DQoJCQlyZXR1cm4gJyc7DQoJCX0NCg0KCQkkdGhpcy0+c291cmNlX2tleXMgPSBhcnJheV9mbGlwKGFycmF5X2tleXMoJHRoaXMtPnNvdXJjZXMpKTsNCg0KDQoJCS8vIGdyb3VwIG1hcHBpbmdzIGJ5IGdlbmVyYXRlZCBsaW5lIG51bWJlci4NCgkJJGdyb3VwZWRNYXAgPSAkZ3JvdXBlZE1hcEVuY29kZWQgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCR0aGlzLT5tYXBwaW5ncyBhcyAkbSl7DQoJCQkkZ3JvdXBlZE1hcFskbVsnZ2VuZXJhdGVkX2xpbmUnXV1bXSA9ICRtOw0KCQl9DQoJCWtzb3J0KCRncm91cGVkTWFwKTsNCg0KCQkkbGFzdEdlbmVyYXRlZExpbmUgPSAkbGFzdE9yaWdpbmFsSW5kZXggPSAkbGFzdE9yaWdpbmFsTGluZSA9ICRsYXN0T3JpZ2luYWxDb2x1bW4gPSAwOw0KDQoJCWZvcmVhY2goJGdyb3VwZWRNYXAgYXMgJGxpbmVOdW1iZXIgPT4gJGxpbmVfbWFwKXsNCgkJCXdoaWxlKCsrJGxhc3RHZW5lcmF0ZWRMaW5lIDwgJGxpbmVOdW1iZXIpew0KCQkJCSRncm91cGVkTWFwRW5jb2RlZFtdID0gJzsnOw0KCQkJfQ0KDQoJCQkkbGluZU1hcEVuY29kZWQgPSBhcnJheSgpOw0KCQkJJGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSAwOw0KDQoJCQlmb3JlYWNoKCRsaW5lX21hcCBhcyAkbSl7DQoJCQkJJG1hcEVuY29kZWQgPSAkdGhpcy0+ZW5jb2Rlci0+ZW5jb2RlKCRtWydnZW5lcmF0ZWRfY29sdW1uJ10gLSAkbGFzdEdlbmVyYXRlZENvbHVtbik7DQoJCQkJJGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSAkbVsnZ2VuZXJhdGVkX2NvbHVtbiddOw0KDQoJCQkJLy8gZmluZCB0aGUgaW5kZXgNCgkJCQlpZiggJG1bJ3NvdXJjZV9maWxlJ10gKXsNCgkJCQkJJGluZGV4ID0gJHRoaXMtPmZpbmRGaWxlSW5kZXgoJG1bJ3NvdXJjZV9maWxlJ10pOw0KCQkJCQlpZiggJGluZGV4ICE9PSBmYWxzZSApew0KCQkJCQkJJG1hcEVuY29kZWQgLj0gJHRoaXMtPmVuY29kZXItPmVuY29kZSgkaW5kZXggLSAkbGFzdE9yaWdpbmFsSW5kZXgpOw0KCQkJCQkJJGxhc3RPcmlnaW5hbEluZGV4ID0gJGluZGV4Ow0KDQoJCQkJCQkvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzDQoJCQkJCQkkbWFwRW5jb2RlZCAuPSAkdGhpcy0+ZW5jb2Rlci0+ZW5jb2RlKCRtWydvcmlnaW5hbF9saW5lJ10gLSAxIC0gJGxhc3RPcmlnaW5hbExpbmUpOw0KCQkJCQkJJGxhc3RPcmlnaW5hbExpbmUgPSAkbVsnb3JpZ2luYWxfbGluZSddIC0gMTsNCg0KCQkJCQkJJG1hcEVuY29kZWQgLj0gJHRoaXMtPmVuY29kZXItPmVuY29kZSgkbVsnb3JpZ2luYWxfY29sdW1uJ10gLSAkbGFzdE9yaWdpbmFsQ29sdW1uKTsNCgkJCQkJCSRsYXN0T3JpZ2luYWxDb2x1bW4gPSAkbVsnb3JpZ2luYWxfY29sdW1uJ107DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkkbGluZU1hcEVuY29kZWRbXSA9ICRtYXBFbmNvZGVkOw0KCQkJfQ0KDQoJCQkkZ3JvdXBlZE1hcEVuY29kZWRbXSA9IGltcGxvZGUoJywnLCAkbGluZU1hcEVuY29kZWQpIC4gJzsnOw0KCQl9DQoNCgkJcmV0dXJuIHJ0cmltKGltcGxvZGUoJGdyb3VwZWRNYXBFbmNvZGVkKSwgJzsnKTsNCgl9DQoNCgkvKioNCgkgKiBGaW5kcyB0aGUgaW5kZXggZm9yIHRoZSBmaWxlbmFtZQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUNCgkgKiBAcmV0dXJuIGludGVnZXJ8ZmFsc2UNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZmluZEZpbGVJbmRleCgkZmlsZW5hbWUpew0KCQlyZXR1cm4gJHRoaXMtPnNvdXJjZV9rZXlzWyRmaWxlbmFtZV07DQoJfQ0KDQoJLyoqDQoJICogZml4IHdpbmRvd3MgcGF0aHMNCgkgKiBAcGFyYW0gIHN0cmluZyAkcGF0aA0KCSAqIEByZXR1cm4gc3RyaW5nICAgICAgDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGZpeFdpbmRvd3NQYXRoKCRwYXRoLCAkYWRkRW5kU2xhc2ggPSBmYWxzZSl7DQoJCSRzbGFzaCA9ICgkYWRkRW5kU2xhc2gpID8gJy8nIDogJyc7DQoJCWlmKCAhZW1wdHkoJHBhdGgpICl7DQoJCQkkcGF0aCA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHBhdGgpOw0KCQkJJHBhdGggPSBydHJpbSgkcGF0aCwnLycpIC4gJHNsYXNoOw0KCQl9DQoNCgkJcmV0dXJuICRwYXRoOw0KCX0NCg0KfQ==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/SourceMap/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUcmVlCiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlewoKCXB1YmxpYyAkY2FjaGVfc3RyaW5nOwoKCXB1YmxpYyBmdW5jdGlvbiB0b0NTUygpewoJCSRvdXRwdXQgPSBuZXcgTGVzc19PdXRwdXQoKTsKCQkkdGhpcy0+Z2VuQ1NTKCRvdXRwdXQpOwoJCXJldHVybiAkb3V0cHV0LT50b1N0cmluZygpOwoJfQoKCiAgICAvKioKICAgICAqIEdlbmVyYXRlIENTUyBieSBhZGRpbmcgaXQgdG8gdGhlIG91dHB1dCBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gTGVzc19PdXRwdXQgJG91dHB1dCBUaGUgb3V0cHV0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbkNTUygkb3V0cHV0KXt9CgoKCS8qKgoJICogQHBhcmFtIExlc3NfVHJlZV9SdWxlc2V0W10gJHJ1bGVzCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb3V0cHV0UnVsZXNldCggJG91dHB1dCwgJHJ1bGVzICl7CgoJCSRydWxlQ250ID0gY291bnQoJHJ1bGVzKTsKCQlMZXNzX0Vudmlyb25tZW50OjokdGFiTGV2ZWwrKzsKCgoJCS8vIENvbXByZXNzZWQKCQlpZiggTGVzc19QYXJzZXI6OiRvcHRpb25zWydjb21wcmVzcyddICl7CgkJCSRvdXRwdXQtPmFkZCgneycpOwoJCQlmb3IoICRpID0gMDsgJGkgPCAkcnVsZUNudDsgJGkrKyApewoJCQkJJHJ1bGVzWyRpXS0+Z2VuQ1NTKCAkb3V0cHV0ICk7CgkJCX0KCgkJCSRvdXRwdXQtPmFkZCggJ30nICk7CgkJCUxlc3NfRW52aXJvbm1lbnQ6OiR0YWJMZXZlbC0tOwoJCQlyZXR1cm47CgkJfQoKCgkJLy8gTm9uLWNvbXByZXNzZWQKCQkkdGFiU2V0U3RyID0gIlxuIi5zdHJfcmVwZWF0KCBMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2luZGVudGF0aW9uJ10gLCBMZXNzX0Vudmlyb25tZW50OjokdGFiTGV2ZWwtMSApOwoJCSR0YWJSdWxlU3RyID0gJHRhYlNldFN0ci5MZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2luZGVudGF0aW9uJ107CgoJCSRvdXRwdXQtPmFkZCggIiB7IiApOwoJCWZvcigkaSA9IDA7ICRpIDwgJHJ1bGVDbnQ7ICRpKysgKXsKCQkJJG91dHB1dC0+YWRkKCAkdGFiUnVsZVN0ciApOwoJCQkkcnVsZXNbJGldLT5nZW5DU1MoICRvdXRwdXQgKTsKCQl9CgkJTGVzc19FbnZpcm9ubWVudDo6JHRhYkxldmVsLS07CgkJJG91dHB1dC0+YWRkKCAkdGFiU2V0U3RyLid9JyApOwoKCX0KCglwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCR2aXNpdG9yKXt9CgoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gUmVmZXJlbmNlZEFycmF5KCRydWxlcyl7CgkJZm9yZWFjaCgkcnVsZXMgYXMgJHJ1bGUpewoJCQlpZiggbWV0aG9kX2V4aXN0cygkcnVsZSwgJ21hcmtSZWZlcmVuY2VkJykgKXsKCQkJCSRydWxlLT5tYXJrUmVmZXJlbmNlZCgpOwoJCQl9CgkJfQoJfQoKCgkvKioKCSAqIFJlcXVpcmVzIHBocCA1LjMrCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoJGFyZ3MpewoKCQkkY2xhc3MgPSBnZXRfY2FsbGVkX2NsYXNzKCk7CgkJJG9iaiA9IG5ldyAkY2xhc3MobnVsbCxudWxsLG51bGwsbnVsbCk7CgkJZm9yZWFjaCgkYXJncyBhcyAka2V5ID0+ICR2YWwpewoJCQkkb2JqLT4ka2V5ID0gJHZhbDsKCQl9CgkJcmV0dXJuICRvYmo7Cgl9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Alpha.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBbHBoYQogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9BbHBoYSBleHRlbmRzIExlc3NfVHJlZXsKCXB1YmxpYyAkdmFsdWU7CglwdWJsaWMgJHR5cGUgPSAnQWxwaGEnOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsKXsKCQkkdGhpcy0+dmFsdWUgPSAkdmFsOwoJfQoKCS8vZnVuY3Rpb24gYWNjZXB0KCAkdmlzaXRvciApewoJLy8JJHRoaXMtPnZhbHVlID0gJHZpc2l0b3ItPnZpc2l0KCAkdGhpcy0+dmFsdWUgKTsKCS8vfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCRlbnYpewoKCQlpZiggaXNfb2JqZWN0KCR0aGlzLT52YWx1ZSkgKXsKCQkJJHRoaXMtPnZhbHVlID0gJHRoaXMtPnZhbHVlLT5jb21waWxlKCRlbnYpOwoJCX0KCgkJcmV0dXJuICR0aGlzOwoJfQoKICAgIC8qKgogICAgICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwogICAgICovCglwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgoJCSRvdXRwdXQtPmFkZCggImFscGhhKG9wYWNpdHk9IiApOwoKCQlpZiggaXNfc3RyaW5nKCR0aGlzLT52YWx1ZSkgKXsKCQkJJG91dHB1dC0+YWRkKCAkdGhpcy0+dmFsdWUgKTsKCQl9ZWxzZXsKCQkJJHRoaXMtPnZhbHVlLT5nZW5DU1MoICRvdXRwdXQpOwoJCX0KCgkJJG91dHB1dC0+YWRkKCAnKScgKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdG9DU1MoKXsKCQlyZXR1cm4gImFscGhhKG9wYWNpdHk9IiAuIChpc19zdHJpbmcoJHRoaXMtPnZhbHVlKSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT52YWx1ZS0+dG9DU1MoKSkgLiAiKSI7Cgl9CgoKfQ==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Anonymous.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBbm9ueW1vdXMKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfQW5vbnltb3VzIGV4dGVuZHMgTGVzc19UcmVlewoJcHVibGljICR2YWx1ZTsKCXB1YmxpYyAkcXVvdGU7CglwdWJsaWMgJGluZGV4OwoJcHVibGljICRtYXBMaW5lczsKCXB1YmxpYyAkY3VycmVudEZpbGVJbmZvOwoJcHVibGljICR0eXBlID0gJ0Fub255bW91cyc7CgoJLyoqCgkgKiBAcGFyYW0gaW50ZWdlciAkaW5kZXgKCSAqIEBwYXJhbSBib29sZWFuICRtYXBMaW5lcwoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlLCAkaW5kZXggPSBudWxsLCAkY3VycmVudEZpbGVJbmZvID0gbnVsbCwgJG1hcExpbmVzID0gbnVsbCApewoJCSR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKCQkkdGhpcy0+aW5kZXggPSAkaW5kZXg7CgkJJHRoaXMtPm1hcExpbmVzID0gJG1hcExpbmVzOwoJCSR0aGlzLT5jdXJyZW50RmlsZUluZm8gPSAkY3VycmVudEZpbGVJbmZvOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCl7CgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfQW5vbnltb3VzKCR0aGlzLT52YWx1ZSwgJHRoaXMtPmluZGV4LCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvLCAkdGhpcy0+bWFwTGluZXMpOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlKCR4KXsKCQlpZiggIWlzX29iamVjdCgkeCkgKXsKCQkJcmV0dXJuIC0xOwoJCX0KCgkJJGxlZnQgPSAkdGhpcy0+dG9DU1MoKTsKCQkkcmlnaHQgPSAkeC0+dG9DU1MoKTsKCgkJaWYoICRsZWZ0ID09PSAkcmlnaHQgKXsKCQkJcmV0dXJuIDA7CgkJfQoKCQlyZXR1cm4gJGxlZnQgPCAkcmlnaHQgPyAtMSA6IDE7Cgl9CgogICAgLyoqCiAgICAgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCiAgICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCQkkb3V0cHV0LT5hZGQoICR0aGlzLT52YWx1ZSwgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbywgJHRoaXMtPmluZGV4LCAkdGhpcy0+bWFwTGluZXMgKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdG9DU1MoKXsKCQlyZXR1cm4gJHRoaXMtPnZhbHVlOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Assignment.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NpZ25tZW50CiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX0Fzc2lnbm1lbnQgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHVibGljICRrZXk7CglwdWJsaWMgJHZhbHVlOwoJcHVibGljICR0eXBlID0gJ0Fzc2lnbm1lbnQnOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgka2V5LCAkdmFsKSB7CgkJJHRoaXMtPmtleSA9ICRrZXk7CgkJJHRoaXMtPnZhbHVlID0gJHZhbDsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCAkdmlzaXRvciApewoJCSR0aGlzLT52YWx1ZSA9ICR2aXNpdG9yLT52aXNpdE9iaiggJHRoaXMtPnZhbHVlICk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudikgewoJCXJldHVybiBuZXcgTGVzc19UcmVlX0Fzc2lnbm1lbnQoICR0aGlzLT5rZXksICR0aGlzLT52YWx1ZS0+Y29tcGlsZSgkZW52KSk7Cgl9CgogICAgLyoqCiAgICAgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCiAgICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCQkkb3V0cHV0LT5hZGQoICR0aGlzLT5rZXkgLiAnPScgKTsKCQkkdGhpcy0+dmFsdWUtPmdlbkNTUyggJG91dHB1dCApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0b0NzcygpewoJCXJldHVybiAkdGhpcy0+a2V5IC4gJz0nIC4gJHRoaXMtPnZhbHVlLT50b0NTUygpOwoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Attribute.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBdHRyaWJ1dGUKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfQXR0cmlidXRlIGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAka2V5OwoJcHVibGljICRvcDsKCXB1YmxpYyAkdmFsdWU7CglwdWJsaWMgJHR5cGUgPSAnQXR0cmlidXRlJzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGtleSwgJG9wLCAkdmFsdWUpewoJCSR0aGlzLT5rZXkgPSAka2V5OwoJCSR0aGlzLT5vcCA9ICRvcDsKCQkkdGhpcy0+dmFsdWUgPSAkdmFsdWU7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudil7CgoJCSRrZXlfb2JqID0gaXNfb2JqZWN0KCR0aGlzLT5rZXkpOwoJCSR2YWxfb2JqID0gaXNfb2JqZWN0KCR0aGlzLT52YWx1ZSk7CgoJCWlmKCAhJGtleV9vYmogJiYgISR2YWxfb2JqICl7CgkJCXJldHVybiAkdGhpczsKCQl9CgoJCXJldHVybiBuZXcgTGVzc19UcmVlX0F0dHJpYnV0ZSgKCQkJJGtleV9vYmogPyAkdGhpcy0+a2V5LT5jb21waWxlKCRlbnYpIDogJHRoaXMtPmtleSAsCgkJCSR0aGlzLT5vcCwKCQkJJHZhbF9vYmogPyAkdGhpcy0+dmFsdWUtPmNvbXBpbGUoJGVudikgOiAkdGhpcy0+dmFsdWUpOwoJfQoKICAgIC8qKgogICAgICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgkJJG91dHB1dC0+YWRkKCAkdGhpcy0+dG9DU1MoKSApOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0NTUygpewoJCSR2YWx1ZSA9ICR0aGlzLT5rZXk7CgoJCWlmKCAkdGhpcy0+b3AgKXsKCQkJJHZhbHVlIC49ICR0aGlzLT5vcDsKCQkJJHZhbHVlIC49IChpc19vYmplY3QoJHRoaXMtPnZhbHVlKSA/ICR0aGlzLT52YWx1ZS0+dG9DU1MoKSA6ICR0aGlzLT52YWx1ZSk7CgkJfQoKCQlyZXR1cm4gJ1snIC4gJHZhbHVlIC4gJ10nOwoJfQp9]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Call.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgovKioKICogQ2FsbAogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9DYWxsIGV4dGVuZHMgTGVzc19UcmVlewogICAgcHVibGljICR2YWx1ZTsKCiAgICBwcm90ZWN0ZWQgJG5hbWU7CiAgICBwcm90ZWN0ZWQgJGFyZ3M7CiAgICBwcm90ZWN0ZWQgJGluZGV4OwogICAgcHJvdGVjdGVkICRjdXJyZW50RmlsZUluZm87CiAgICBwdWJsaWMgJHR5cGUgPSAnQ2FsbCc7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCAkYXJncywgJGluZGV4LCAkY3VycmVudEZpbGVJbmZvID0gbnVsbCApewoJCSR0aGlzLT5uYW1lID0gJG5hbWU7CgkJJHRoaXMtPmFyZ3MgPSAkYXJnczsKCQkkdGhpcy0+aW5kZXggPSAkaW5kZXg7CgkJJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyA9ICRjdXJyZW50RmlsZUluZm87Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGFjY2VwdCggJHZpc2l0b3IgKXsKCQkkdGhpcy0+YXJncyA9ICR2aXNpdG9yLT52aXNpdEFycmF5KCAkdGhpcy0+YXJncyApOwoJfQoKICAgIC8vCiAgICAvLyBXaGVuIGV2YWx1YXRpbmcgYSBmdW5jdGlvbiBjYWxsLAogICAgLy8gd2UgZWl0aGVyIGZpbmQgdGhlIGZ1bmN0aW9uIGluIGB0cmVlLmZ1bmN0aW9uc2AgWzFdLAogICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBjYWxsIGl0LCBwYXNzaW5nIHRoZSAgZXZhbHVhdGVkIGFyZ3VtZW50cywKICAgIC8vIG9yIHdlIHNpbXBseSBwcmludCBpdCBvdXQgYXMgaXQgYXBwZWFyZWQgb3JpZ2luYWxseSBbMl0uCiAgICAvLwogICAgLy8gVGhlICpmdW5jdGlvbnMuanMqIGZpbGUgY29udGFpbnMgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgIC8vCiAgICAvLyBUaGUgcmVhc29uIHdoeSB3ZSBldmFsdWF0ZSB0aGUgYXJndW1lbnRzLCBpcyBpbiB0aGUgY2FzZSB3aGVyZQogICAgLy8gd2UgdHJ5IHRvIHBhc3MgYSB2YXJpYWJsZSB0byBhIGZ1bmN0aW9uLCBsaWtlOiBgc2F0dXJhdGUoQGNvbG9yKWAuCiAgICAvLyBUaGUgZnVuY3Rpb24gc2hvdWxkIHJlY2VpdmUgdGhlIHZhbHVlLCBub3QgdGhlIHZhcmlhYmxlLgogICAgLy8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCRlbnY9bnVsbCl7CgkJJGFyZ3MgPSBhcnJheSgpOwoJCWZvcmVhY2goJHRoaXMtPmFyZ3MgYXMgJGEpewoJCQkkYXJnc1tdID0gJGEtPmNvbXBpbGUoJGVudik7CgkJfQoKCQkkbmFtZUxDID0gc3RydG9sb3dlcigkdGhpcy0+bmFtZSk7CgkJc3dpdGNoKCRuYW1lTEMpewoJCQljYXNlICclJzoKCQkJJG5hbWVMQyA9ICdfcGVyY2VudCc7CgkJCWJyZWFrOwoKCQkJY2FzZSAnZ2V0LXVuaXQnOgoJCQkkbmFtZUxDID0gJ2dldHVuaXQnOwoJCQlicmVhazsKCgkJCWNhc2UgJ2RhdGEtdXJpJzoKCQkJJG5hbWVMQyA9ICdkYXRhdXJpJzsKCQkJYnJlYWs7CgoJCQljYXNlICdzdmctZ3JhZGllbnQnOgoJCQkkbmFtZUxDID0gJ3N2Z2dyYWRpZW50JzsKCQkJYnJlYWs7CgkJfQoKCQkkcmVzdWx0ID0gbnVsbDsKCQlpZiggJG5hbWVMQyA9PT0gJ2RlZmF1bHQnICl7CgkJCSRyZXN1bHQgPSBMZXNzX1RyZWVfRGVmYXVsdEZ1bmM6OmNvbXBpbGUoKTsKCgkJfWVsc2V7CgoJCQlpZiggbWV0aG9kX2V4aXN0cygnTGVzc19GdW5jdGlvbnMnLCRuYW1lTEMpICl7IC8vIDEuCgkJCQl0cnkgewoKCQkJCQkkZnVuYyA9IG5ldyBMZXNzX0Z1bmN0aW9ucygkZW52LCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvKTsKCQkJCQkkcmVzdWx0ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoIGFycmF5KCRmdW5jLCRuYW1lTEMpLCRhcmdzKTsKCgkJCQl9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCQkJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ2Vycm9yIGV2YWx1YXRpbmcgZnVuY3Rpb24gYCcgLiAkdGhpcy0+bmFtZSAuICdgICcuJGUtPmdldE1lc3NhZ2UoKS4nIGluZGV4OiAnLiAkdGhpcy0+aW5kZXgpOwoJCQkJfQoJCQl9IGVsc2VpZiggaXNzZXQoICRlbnYtPmZ1bmN0aW9uc1skbmFtZUxDXSApICYmIGlzX2NhbGxhYmxlKCAkZW52LT5mdW5jdGlvbnNbJG5hbWVMQ10gKSApIHsKCQkJCXRyeSB7CgkJCQkJJHJlc3VsdCA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCAkZW52LT5mdW5jdGlvbnNbJG5hbWVMQ10sICRhcmdzICk7CgkJCQl9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCQkJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJ2Vycm9yIGV2YWx1YXRpbmcgZnVuY3Rpb24gYCcgLiAkdGhpcy0+bmFtZSAuICdgICcuJGUtPmdldE1lc3NhZ2UoKS4nIGluZGV4OiAnLiAkdGhpcy0+aW5kZXgpOwoJCQkJfQoJCQl9CgkJfQoKCQlpZiggJHJlc3VsdCAhPT0gbnVsbCApewoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9DYWxsKCAkdGhpcy0+bmFtZSwgJGFyZ3MsICR0aGlzLT5pbmRleCwgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyApOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwogICAgICovCglwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgoJCSRvdXRwdXQtPmFkZCggJHRoaXMtPm5hbWUgLiAnKCcsICR0aGlzLT5jdXJyZW50RmlsZUluZm8sICR0aGlzLT5pbmRleCApOwoJCSRhcmdzX2xlbiA9IGNvdW50KCR0aGlzLT5hcmdzKTsKCQlmb3IoJGkgPSAwOyAkaSA8ICRhcmdzX2xlbjsgJGkrKyApewoJCQkkdGhpcy0+YXJnc1skaV0tPmdlbkNTUyggJG91dHB1dCApOwoJCQlpZiggJGkgKyAxIDwgJGFyZ3NfbGVuICl7CgkJCQkkb3V0cHV0LT5hZGQoICcsICcgKTsKCQkJfQoJCX0KCgkJJG91dHB1dC0+YWRkKCAnKScgKTsKCX0KCgogICAgLy9wdWJsaWMgZnVuY3Rpb24gdG9DU1MoKXsKICAgIC8vICAgIHJldHVybiAkdGhpcy0+Y29tcGlsZSgpLT50b0NTUygpOwogICAgLy99Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Color.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDb2xvcgogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9Db2xvciBleHRlbmRzIExlc3NfVHJlZXsKCXB1YmxpYyAkcmdiOwoJcHVibGljICRhbHBoYTsKCXB1YmxpYyAkaXNUcmFuc3BhcmVudEtleXdvcmQ7CglwdWJsaWMgJHR5cGUgPSAnQ29sb3InOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcmdiLCAkYSA9IDEsICRpc1RyYW5zcGFyZW50S2V5d29yZCA9IG51bGwgKXsKCgkJaWYoICRpc1RyYW5zcGFyZW50S2V5d29yZCApewoJCQkkdGhpcy0+cmdiID0gJHJnYjsKCQkJJHRoaXMtPmFscGhhID0gJGE7CgkJCSR0aGlzLT5pc1RyYW5zcGFyZW50S2V5d29yZCA9IHRydWU7CgkJCXJldHVybjsKCQl9CgoJCSR0aGlzLT5yZ2IgPSBhcnJheSgpOwoJCWlmKCBpc19hcnJheSgkcmdiKSApewoJCQkkdGhpcy0+cmdiID0gJHJnYjsKCQl9ZWxzZSBpZiggc3RybGVuKCRyZ2IpID09IDYgKXsKCQkJZm9yZWFjaChzdHJfc3BsaXQoJHJnYiwgMikgYXMgJGMpewoJCQkJJHRoaXMtPnJnYltdID0gaGV4ZGVjKCRjKTsKCQkJfQoJCX1lbHNlewoJCQlmb3JlYWNoKHN0cl9zcGxpdCgkcmdiLCAxKSBhcyAkYyl7CgkJCQkkdGhpcy0+cmdiW10gPSBoZXhkZWMoJGMuJGMpOwoJCQl9CgkJfQoJCSR0aGlzLT5hbHBoYSA9IGlzX251bWVyaWMoJGEpID8gJGEgOiAxOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCl7CgkJcmV0dXJuICR0aGlzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBsdW1hKCl7CgkJJHIgPSAkdGhpcy0+cmdiWzBdIC8gMjU1OwoJCSRnID0gJHRoaXMtPnJnYlsxXSAvIDI1NTsKCQkkYiA9ICR0aGlzLT5yZ2JbMl0gLyAyNTU7CgoJCSRyID0gKCRyIDw9IDAuMDM5MjgpID8gJHIgLyAxMi45MiA6IHBvdygoKCRyICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpOwoJCSRnID0gKCRnIDw9IDAuMDM5MjgpID8gJGcgLyAxMi45MiA6IHBvdygoKCRnICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpOwoJCSRiID0gKCRiIDw9IDAuMDM5MjgpID8gJGIgLyAxMi45MiA6IHBvdygoKCRiICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpOwoKCQlyZXR1cm4gMC4yMTI2ICogJHIgKyAwLjcxNTIgKiAkZyArIDAuMDcyMiAqICRiOwoJfQoKCS8qKgoJICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgkJJG91dHB1dC0+YWRkKCAkdGhpcy0+dG9DU1MoKSApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0b0NTUyggJGRvTm90Q29tcHJlc3MgPSBmYWxzZSApewoJCSRjb21wcmVzcyA9IExlc3NfUGFyc2VyOjokb3B0aW9uc1snY29tcHJlc3MnXSAmJiAhJGRvTm90Q29tcHJlc3M7CgkJJGFscGhhID0gTGVzc19GdW5jdGlvbnM6OmZyb3VuZCggJHRoaXMtPmFscGhhICk7CgoKCQkvLwoJCS8vIElmIHdlIGhhdmUgc29tZSB0cmFuc3BhcmVuY3ksIHRoZSBvbmx5IHdheSB0byByZXByZXNlbnQgaXQKCQkvLyBpcyB2aWEgYHJnYmFgLiBPdGhlcndpc2UsIHdlIHVzZSB0aGUgaGV4IHJlcHJlc2VudGF0aW9uLAoJCS8vIHdoaWNoIGhhcyBiZXR0ZXIgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGJyb3dzZXJzLgoJCS8vIFZhbHVlcyBhcmUgY2FwcGVkIGJldHdlZW4gYDBgIGFuZCBgMjU1YCwgcm91bmRlZCBhbmQgemVyby1wYWRkZWQuCgkJLy8KCQlpZiggJGFscGhhIDwgMSApewoJCQlpZiggKCAkYWxwaGEgPT09IDAgfHwgJGFscGhhID09PSAwLjAgKSAmJiBpc3NldCgkdGhpcy0+aXNUcmFuc3BhcmVudEtleXdvcmQpICYmICR0aGlzLT5pc1RyYW5zcGFyZW50S2V5d29yZCApewoJCQkJcmV0dXJuICd0cmFuc3BhcmVudCc7CgkJCX0KCgkJCSR2YWx1ZXMgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCR0aGlzLT5yZ2IgYXMgJGMpewoJCQkJJHZhbHVlc1tdID0gTGVzc19GdW5jdGlvbnM6OmNsYW1wKCByb3VuZCgkYyksIDI1NSk7CgkJCX0KCQkJJHZhbHVlc1tdID0gJGFscGhhOwoKCQkJJGdsdWUgPSAoJGNvbXByZXNzID8gJywnIDogJywgJyk7CgkJCXJldHVybiAicmdiYSgiIC4gaW1wbG9kZSgkZ2x1ZSwgJHZhbHVlcykgLiAiKSI7CgkJfWVsc2V7CgoJCQkkY29sb3IgPSAkdGhpcy0+dG9SR0IoKTsKCgkJCWlmKCAkY29tcHJlc3MgKXsKCgkJCQkvLyBDb252ZXJ0IGNvbG9yIHRvIHNob3J0IGZvcm1hdAoJCQkJaWYoICRjb2xvclsxXSA9PT0gJGNvbG9yWzJdICYmICRjb2xvclszXSA9PT0gJGNvbG9yWzRdICYmICRjb2xvcls1XSA9PT0gJGNvbG9yWzZdKSB7CgkJCQkJJGNvbG9yID0gJyMnLiRjb2xvclsxXSAuICRjb2xvclszXSAuICRjb2xvcls1XTsKCQkJCX0KCQkJfQoKCQkJcmV0dXJuICRjb2xvcjsKCQl9Cgl9CgoJLy8KCS8vIE9wZXJhdGlvbnMgaGF2ZSB0byBiZSBkb25lIHBlci1jaGFubmVsLCBpZiBub3QsCgkvLyBjaGFubmVscyB3aWxsIHNwaWxsIG9udG8gZWFjaCBvdGhlci4gT25jZSB3ZSBoYXZlCgkvLyBvdXIgcmVzdWx0LCBpbiB0aGUgZm9ybSBvZiBhbiBpbnRlZ2VyIHRyaXBsZXQsCgkvLyB3ZSBjcmVhdGUgYSBuZXcgQ29sb3Igbm9kZSB0byBob2xkIHRoZSByZXN1bHQuCgkvLwoKCS8qKgoJICogQHBhcmFtIHN0cmluZyAkb3AKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG9wZXJhdGUoICRvcCwgJG90aGVyKSB7CgkJJHJnYiA9IGFycmF5KCk7CgkJJGFscGhhID0gJHRoaXMtPmFscGhhICogKDEgLSAkb3RoZXItPmFscGhhKSArICRvdGhlci0+YWxwaGE7CgkJZm9yICgkYyA9IDA7ICRjIDwgMzsgJGMrKykgewoJCQkkcmdiWyRjXSA9IExlc3NfRnVuY3Rpb25zOjpvcGVyYXRlKCAkb3AsICR0aGlzLT5yZ2JbJGNdLCAkb3RoZXItPnJnYlskY10pOwoJCX0KCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9Db2xvcigkcmdiLCAkYWxwaGEpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0b1JHQigpewoJCXJldHVybiAkdGhpcy0+dG9IZXgoJHRoaXMtPnJnYik7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHRvSFNMKCl7CgkJJHIgPSAkdGhpcy0+cmdiWzBdIC8gMjU1OwoJCSRnID0gJHRoaXMtPnJnYlsxXSAvIDI1NTsKCQkkYiA9ICR0aGlzLT5yZ2JbMl0gLyAyNTU7CgkJJGEgPSAkdGhpcy0+YWxwaGE7CgoJCSRtYXggPSBtYXgoJHIsICRnLCAkYik7CgkJJG1pbiA9IG1pbigkciwgJGcsICRiKTsKCQkkbCA9ICgkbWF4ICsgJG1pbikgLyAyOwoJCSRkID0gJG1heCAtICRtaW47CgoJCSRoID0gJHMgPSAwOwoJCWlmKCAkbWF4ICE9PSAkbWluICl7CgkJCSRzID0gJGwgPiAwLjUgPyAkZCAvICgyIC0gJG1heCAtICRtaW4pIDogJGQgLyAoJG1heCArICRtaW4pOwoKCQkJc3dpdGNoICgkbWF4KSB7CgkJCQljYXNlICRyOiAkaCA9ICgkZyAtICRiKSAvICRkICsgKCRnIDwgJGIgPyA2IDogMCk7IGJyZWFrOwoJCQkJY2FzZSAkZzogJGggPSAoJGIgLSAkcikgLyAkZCArIDI7CQkJCSBicmVhazsKCQkJCWNhc2UgJGI6ICRoID0gKCRyIC0gJGcpIC8gJGQgKyA0OwkJCQkgYnJlYWs7CgkJCX0KCQkJJGggLz0gNjsKCQl9CgkJcmV0dXJuIGFycmF5KCdoJyA9PiAkaCAqIDM2MCwgJ3MnID0+ICRzLCAnbCcgPT4gJGwsICdhJyA9PiAkYSApOwoJfQoKCS8vQWRhcHRlZCBmcm9tIGh0dHA6Ly9tamlqYWNrc29uLmNvbS8yMDA4LzAyL3JnYi10by1oc2wtYW5kLXJnYi10by1oc3YtY29sb3ItbW9kZWwtY29udmVyc2lvbi1hbGdvcml0aG1zLWluLWphdmFzY3JpcHQKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0hTVigpIHsKCQkkciA9ICR0aGlzLT5yZ2JbMF0gLyAyNTU7CgkJJGcgPSAkdGhpcy0+cmdiWzFdIC8gMjU1OwoJCSRiID0gJHRoaXMtPnJnYlsyXSAvIDI1NTsKCQkkYSA9ICR0aGlzLT5hbHBoYTsKCgkJJG1heCA9IG1heCgkciwgJGcsICRiKTsKCQkkbWluID0gbWluKCRyLCAkZywgJGIpOwoKCQkkdiA9ICRtYXg7CgoJCSRkID0gJG1heCAtICRtaW47CgkJaWYgKCRtYXggPT09IDApIHsKCQkJJHMgPSAwOwoJCX0gZWxzZSB7CgkJCSRzID0gJGQgLyAkbWF4OwoJCX0KCgkJJGggPSAwOwoJCWlmKCAkbWF4ICE9PSAkbWluICl7CgkJCXN3aXRjaCgkbWF4KXsKCQkJCWNhc2UgJHI6ICRoID0gKCRnIC0gJGIpIC8gJGQgKyAoJGcgPCAkYiA/IDYgOiAwKTsgYnJlYWs7CgkJCQljYXNlICRnOiAkaCA9ICgkYiAtICRyKSAvICRkICsgMjsgYnJlYWs7CgkJCQljYXNlICRiOiAkaCA9ICgkciAtICRnKSAvICRkICsgNDsgYnJlYWs7CgkJCX0KCQkJJGggLz0gNjsKCQl9CgkJcmV0dXJuIGFycmF5KCdoJz0+ICRoICogMzYwLCAncyc9PiAkcywgJ3YnPT4gJHYsICdhJyA9PiAkYSApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0b0FSR0IoKXsKCQkkYXJnYiA9IGFycmF5X21lcmdlKCAoYXJyYXkpIExlc3NfUGFyc2VyOjpyb3VuZCgkdGhpcy0+YWxwaGEgKiAyNTUpLCAkdGhpcy0+cmdiKTsKCQlyZXR1cm4gJHRoaXMtPnRvSGV4KCAkYXJnYiApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21wYXJlKCR4KXsKCgkJaWYoICFwcm9wZXJ0eV9leGlzdHMoICR4LCAncmdiJyApICl7CgkJCXJldHVybiAtMTsKCQl9CgoKCQlyZXR1cm4gKCR4LT5yZ2JbMF0gPT09ICR0aGlzLT5yZ2JbMF0gJiYKCQkJJHgtPnJnYlsxXSA9PT0gJHRoaXMtPnJnYlsxXSAmJgoJCQkkeC0+cmdiWzJdID09PSAkdGhpcy0+cmdiWzJdICYmCgkJCSR4LT5hbHBoYSA9PT0gJHRoaXMtPmFscGhhKSA/IDAgOiAtMTsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9IZXgoICR2ICl7CgoJCSRyZXQgPSAnIyc7CgkJZm9yZWFjaCgkdiBhcyAkYyl7CgkJCSRjID0gTGVzc19GdW5jdGlvbnM6OmNsYW1wKCBMZXNzX1BhcnNlcjo6cm91bmQoJGMpLCAyNTUpOwoJCQlpZiggJGMgPCAxNiApewoJCQkJJHJldCAuPSAnMCc7CgkJCX0KCQkJJHJldCAuPSBkZWNoZXgoJGMpOwoJCX0KCgkJcmV0dXJuICRyZXQ7Cgl9CgoKCS8qKgoJICogQHBhcmFtIHN0cmluZyAka2V5d29yZAoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21LZXl3b3JkKCAka2V5d29yZCApewoJCSRrZXl3b3JkID0gc3RydG9sb3dlcigka2V5d29yZCk7CgoJCWlmKCBMZXNzX0NvbG9yczo6aGFzT3duUHJvcGVydHkoJGtleXdvcmQpICl7CgkJCS8vIGRldGVjdCBuYW1lZCBjb2xvcgoJCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9Db2xvcihzdWJzdHIoTGVzc19Db2xvcnM6OmNvbG9yKCRrZXl3b3JkKSwgMSkpOwoJCX0KCgkJaWYoICRrZXl3b3JkID09PSAndHJhbnNwYXJlbnQnICl7CgkJCXJldHVybiBuZXcgTGVzc19UcmVlX0NvbG9yKCBhcnJheSgwLCAwLCAwKSwgMCwgdHJ1ZSk7CgkJfQoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Comment.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDb21tZW50CiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX0NvbW1lbnQgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHVibGljICR2YWx1ZTsKCXB1YmxpYyAkc2lsZW50OwoJcHVibGljICRpc1JlZmVyZW5jZWQ7CglwdWJsaWMgJGN1cnJlbnRGaWxlSW5mbzsKCXB1YmxpYyAkdHlwZSA9ICdDb21tZW50JzsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlLCAkc2lsZW50LCAkaW5kZXggPSBudWxsLCAkY3VycmVudEZpbGVJbmZvID0gbnVsbCApewoJCSR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKCQkkdGhpcy0+c2lsZW50ID0gISEgJHNpbGVudDsKCQkkdGhpcy0+Y3VycmVudEZpbGVJbmZvID0gJGN1cnJlbnRGaWxlSW5mbzsKCX0KCiAgICAvKioKICAgICAqIEBzZWUgTGVzc19UcmVlOjpnZW5DU1MKICAgICAqLwoJcHVibGljIGZ1bmN0aW9uIGdlbkNTUyggJG91dHB1dCApewoJCS8vaWYoICR0aGlzLT5kZWJ1Z0luZm8gKXsKCQkJLy8kb3V0cHV0LT5hZGQoIHRyZWUuZGVidWdJbmZvKCRlbnYsICR0aGlzKSwgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbywgJHRoaXMtPmluZGV4KTsKCQkvL30KCQkkb3V0cHV0LT5hZGQoIHRyaW0oJHRoaXMtPnZhbHVlKSApOy8vVE9ETyBzaG91bGRuJ3QgbmVlZCB0byB0cmltLCB3ZSBzaG91bGRuJ3QgZ3JhYiB0aGUgXG4KCX0KCglwdWJsaWMgZnVuY3Rpb24gdG9DU1MoKXsKCQlyZXR1cm4gTGVzc19QYXJzZXI6OiRvcHRpb25zWydjb21wcmVzcyddID8gJycgOiAkdGhpcy0+dmFsdWU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzU2lsZW50KCl7CgkJJGlzUmVmZXJlbmNlID0gKCR0aGlzLT5jdXJyZW50RmlsZUluZm8gJiYgaXNzZXQoJHRoaXMtPmN1cnJlbnRGaWxlSW5mb1sncmVmZXJlbmNlJ10pICYmICghaXNzZXQoJHRoaXMtPmlzUmVmZXJlbmNlZCkgfHwgISR0aGlzLT5pc1JlZmVyZW5jZWQpICk7CgkJJGlzQ29tcHJlc3NlZCA9IExlc3NfUGFyc2VyOjokb3B0aW9uc1snY29tcHJlc3MnXSAmJiAhcHJlZ19tYXRjaCgnL15cL1wqIS8nLCAkdGhpcy0+dmFsdWUpOwoJCXJldHVybiAkdGhpcy0+c2lsZW50IHx8ICRpc1JlZmVyZW5jZSB8fCAkaXNDb21wcmVzc2VkOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCl7CgkJcmV0dXJuICR0aGlzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBtYXJrUmVmZXJlbmNlZCgpewoJCSR0aGlzLT5pc1JlZmVyZW5jZWQgPSB0cnVlOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Condition.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDb25kaXRpb24KICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfQ29uZGl0aW9uIGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAkb3A7CglwdWJsaWMgJGx2YWx1ZTsKCXB1YmxpYyAkcnZhbHVlOwoJcHVibGljICRpbmRleDsKCXB1YmxpYyAkbmVnYXRlOwoJcHVibGljICR0eXBlID0gJ0NvbmRpdGlvbic7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvcCwgJGwsICRyLCAkaSA9IDAsICRuZWdhdGUgPSBmYWxzZSkgewoJCSR0aGlzLT5vcCA9IHRyaW0oJG9wKTsKCQkkdGhpcy0+bHZhbHVlID0gJGw7CgkJJHRoaXMtPnJ2YWx1ZSA9ICRyOwoJCSR0aGlzLT5pbmRleCA9ICRpOwoJCSR0aGlzLT5uZWdhdGUgPSAkbmVnYXRlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBhY2NlcHQoJHZpc2l0b3IpewoJCSR0aGlzLT5sdmFsdWUgPSAkdmlzaXRvci0+dmlzaXRPYmooICR0aGlzLT5sdmFsdWUgKTsKCQkkdGhpcy0+cnZhbHVlID0gJHZpc2l0b3ItPnZpc2l0T2JqKCAkdGhpcy0+cnZhbHVlICk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudikgewoJCSRhID0gJHRoaXMtPmx2YWx1ZS0+Y29tcGlsZSgkZW52KTsKCQkkYiA9ICR0aGlzLT5ydmFsdWUtPmNvbXBpbGUoJGVudik7CgoJCXN3aXRjaCggJHRoaXMtPm9wICl7CgkJCWNhc2UgJ2FuZCc6CgkJCQkkcmVzdWx0ID0gJGEgJiYgJGI7CgkJCWJyZWFrOwoKCQkJY2FzZSAnb3InOgoJCQkJJHJlc3VsdCA9ICRhIHx8ICRiOwoJCQlicmVhazsKCgkJCWRlZmF1bHQ6CgkJCQlpZiggTGVzc19QYXJzZXI6OmlzX21ldGhvZCgkYSwgJ2NvbXBhcmUnKSApewoJCQkJCSRyZXN1bHQgPSAkYS0+Y29tcGFyZSgkYik7CgkJCQl9ZWxzZWlmKCBMZXNzX1BhcnNlcjo6aXNfbWV0aG9kKCRiLCAnY29tcGFyZScpICl7CgkJCQkJJHJlc3VsdCA9ICRiLT5jb21wYXJlKCRhKTsKCQkJCX1lbHNlewoJCQkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcignVW5hYmxlIHRvIHBlcmZvcm0gY29tcGFyaXNvbicsIG51bGwsICR0aGlzLT5pbmRleCk7CgkJCQl9CgoJCQkJc3dpdGNoICgkcmVzdWx0KSB7CgkJCQkJY2FzZSAtMToKCQkJCQkkcmVzdWx0ID0gJHRoaXMtPm9wID09PSAnPCcgfHwgJHRoaXMtPm9wID09PSAnPTwnIHx8ICR0aGlzLT5vcCA9PT0gJzw9JzsKCQkJCQlicmVhazsKCgkJCQkJY2FzZSAgMDoKCQkJCQkkcmVzdWx0ID0gJHRoaXMtPm9wID09PSAnPScgfHwgJHRoaXMtPm9wID09PSAnPj0nIHx8ICR0aGlzLT5vcCA9PT0gJz08JyB8fCAkdGhpcy0+b3AgPT09ICc8PSc7CgkJCQkJYnJlYWs7CgoJCQkJCWNhc2UgIDE6CgkJCQkJJHJlc3VsdCA9ICR0aGlzLT5vcCA9PT0gJz4nIHx8ICR0aGlzLT5vcCA9PT0gJz49JzsKCQkJCQlicmVhazsKCQkJCX0KCQkJYnJlYWs7CgkJfQoKCQlyZXR1cm4gJHRoaXMtPm5lZ2F0ZSA/ICEkcmVzdWx0IDogJHJlc3VsdDsKICAgIH0KCn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/DefaultFunc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBEZWZhdWx0RnVuYwogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9EZWZhdWx0RnVuY3sKCglzdGF0aWMgJGVycm9yXzsKCXN0YXRpYyAkdmFsdWVfOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tcGlsZSgpewoJCWlmKCBzZWxmOjokZXJyb3JfICl7CgkJCXRocm93IG5ldyBFeGNlcHRpb24oc2VsZjo6JGVycm9yXyk7CgkJfQoJCWlmKCBzZWxmOjokdmFsdWVfICE9PSBudWxsICl7CgkJCXJldHVybiBzZWxmOjokdmFsdWVfID8gbmV3IExlc3NfVHJlZV9LZXl3b3JkKCd0cnVlJykgOiBuZXcgTGVzc19UcmVlX0tleXdvcmQoJ2ZhbHNlJyk7CgkJfQoJfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmFsdWUoICR2ICl7CgkJc2VsZjo6JHZhbHVlXyA9ICR2OwoJfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXJyb3IoICRlICl7CgkJc2VsZjo6JGVycm9yXyA9ICRlOwoJfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzZXQoKXsKCQlzZWxmOjokdmFsdWVfID0gc2VsZjo6JGVycm9yXyA9IG51bGw7Cgl9Cn0=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/DetachedRuleset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBEZXRhY2hlZFJ1bGVzZXQKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfRGV0YWNoZWRSdWxlc2V0IGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAkcnVsZXNldDsKCXB1YmxpYyAkZnJhbWVzOwoJcHVibGljICR0eXBlID0gJ0RldGFjaGVkUnVsZXNldCc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCAkcnVsZXNldCwgJGZyYW1lcyA9IG51bGwgKXsKCQkkdGhpcy0+cnVsZXNldCA9ICRydWxlc2V0OwoJCSR0aGlzLT5mcmFtZXMgPSAkZnJhbWVzOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhY2NlcHQoJHZpc2l0b3IpIHsKCQkkdGhpcy0+cnVsZXNldCA9ICR2aXNpdG9yLT52aXNpdE9iaigkdGhpcy0+cnVsZXNldCk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudil7CgkJaWYoICR0aGlzLT5mcmFtZXMgKXsKCQkJJGZyYW1lcyA9ICR0aGlzLT5mcmFtZXM7CgkJfWVsc2V7CgkJCSRmcmFtZXMgPSAkZW52LT5mcmFtZXM7CgkJfQoJCXJldHVybiBuZXcgTGVzc19UcmVlX0RldGFjaGVkUnVsZXNldCgkdGhpcy0+cnVsZXNldCwgJGZyYW1lcyk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGNhbGxFdmFsKCRlbnYpIHsKCQlpZiggJHRoaXMtPmZyYW1lcyApewoJCQlyZXR1cm4gJHRoaXMtPnJ1bGVzZXQtPmNvbXBpbGUoICRlbnYtPmNvcHlFdmFsRW52KCBhcnJheV9tZXJnZSgkdGhpcy0+ZnJhbWVzLCRlbnYtPmZyYW1lcykgKSApOwoJCX0KCQlyZXR1cm4gJHRoaXMtPnJ1bGVzZXQtPmNvbXBpbGUoICRlbnYgKTsKCX0KfQoK]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Dimension.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBEaW1lbnNpb24KICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfRGltZW5zaW9uIGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAkdmFsdWU7CglwdWJsaWMgJHVuaXQ7CglwdWJsaWMgJHR5cGUgPSAnRGltZW5zaW9uJzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlLCAkdW5pdCA9IG51bGwpewogICAgICAgICR0aGlzLT52YWx1ZSA9IGZsb2F0dmFsKCR2YWx1ZSk7CgoJCWlmKCAkdW5pdCAmJiAoJHVuaXQgaW5zdGFuY2VvZiBMZXNzX1RyZWVfVW5pdCkgKXsKCQkJJHRoaXMtPnVuaXQgPSAkdW5pdDsKCQl9ZWxzZWlmKCAkdW5pdCApewoJCQkkdGhpcy0+dW5pdCA9IG5ldyBMZXNzX1RyZWVfVW5pdCggYXJyYXkoJHVuaXQpICk7CgkJfWVsc2V7CgkJCSR0aGlzLT51bml0ID0gbmV3IExlc3NfVHJlZV9Vbml0KCApOwoJCX0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCAkdmlzaXRvciApewoJCSR0aGlzLT51bml0ID0gJHZpc2l0b3ItPnZpc2l0T2JqKCAkdGhpcy0+dW5pdCApOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCl7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0NvbG9yKCkgewogICAgICAgIHJldHVybiBuZXcgTGVzc19UcmVlX0NvbG9yKGFycmF5KCR0aGlzLT52YWx1ZSwgJHRoaXMtPnZhbHVlLCAkdGhpcy0+dmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgTGVzc19UcmVlOjpnZW5DU1MKICAgICAqLwoJcHVibGljIGZ1bmN0aW9uIGdlbkNTUyggJG91dHB1dCApewoKCQlpZiggTGVzc19QYXJzZXI6OiRvcHRpb25zWydzdHJpY3RVbml0cyddICYmICEkdGhpcy0+dW5pdC0+aXNTaW5ndWxhcigpICl7CgkJCXRocm93IG5ldyBMZXNzX0V4Y2VwdGlvbl9Db21waWxlcigiTXVsdGlwbGUgdW5pdHMgaW4gZGltZW5zaW9uLiBDb3JyZWN0IHRoZSB1bml0cyBvciB1c2UgdGhlIHVuaXQgZnVuY3Rpb24uIEJhZCB1bml0OiAiLiR0aGlzLT51bml0LT50b1N0cmluZygpKTsKCQl9CgoJCSR2YWx1ZSA9IExlc3NfRnVuY3Rpb25zOjpmcm91bmQoICR0aGlzLT52YWx1ZSApOwoJCSRzdHJWYWx1ZSA9IChzdHJpbmcpJHZhbHVlOwoKCQlpZiggJHZhbHVlICE9PSAwICYmICR2YWx1ZSA8IDAuMDAwMDAxICYmICR2YWx1ZSA+IC0wLjAwMDAwMSApewoJCQkvLyB3b3VsZCBiZSBvdXRwdXQgMWUtNiBldGMuCgkJCSRzdHJWYWx1ZSA9IG51bWJlcl9mb3JtYXQoJHN0clZhbHVlLDEwKTsKCQkJJHN0clZhbHVlID0gcHJlZ19yZXBsYWNlKCcvXC4/MCskLycsJycsICRzdHJWYWx1ZSk7CgkJfQoKCQlpZiggTGVzc19QYXJzZXI6OiRvcHRpb25zWydjb21wcmVzcyddICl7CgkJCS8vIFplcm8gdmFsdWVzIGRvZXNuJ3QgbmVlZCBhIHVuaXQKCQkJaWYoICR2YWx1ZSA9PT0gMCAmJiAkdGhpcy0+dW5pdC0+aXNMZW5ndGgoKSApewoJCQkJJG91dHB1dC0+YWRkKCAkc3RyVmFsdWUgKTsKCQkJCXJldHVybiAkc3RyVmFsdWU7CgkJCX0KCgkJCS8vIEZsb2F0IHZhbHVlcyBkb2Vzbid0IG5lZWQgYSBsZWFkaW5nIHplcm8KCQkJaWYoICR2YWx1ZSA+IDAgJiYgJHZhbHVlIDwgMSAmJiAkc3RyVmFsdWVbMF0gPT09ICcwJyApewoJCQkJJHN0clZhbHVlID0gc3Vic3RyKCRzdHJWYWx1ZSwxKTsKCQkJfQoJCX0KCgkJJG91dHB1dC0+YWRkKCAkc3RyVmFsdWUgKTsKCQkkdGhpcy0+dW5pdC0+Z2VuQ1NTKCAkb3V0cHV0ICk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKXsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvQ1NTKCk7CiAgICB9CgogICAgLy8gSW4gYW4gb3BlcmF0aW9uIGJldHdlZW4gdHdvIERpbWVuc2lvbnMsCiAgICAvLyB3ZSBkZWZhdWx0IHRvIHRoZSBmaXJzdCBEaW1lbnNpb24ncyB1bml0LAogICAgLy8gc28gYDFweCArIDJlbWAgd2lsbCB5aWVsZCBgM3B4YC4KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVyYXRlKCAkb3AsICRvdGhlcil7CgoJCSR2YWx1ZSA9IExlc3NfRnVuY3Rpb25zOjpvcGVyYXRlKCAkb3AsICR0aGlzLT52YWx1ZSwgJG90aGVyLT52YWx1ZSk7CgkJJHVuaXQgPSBjbG9uZSAkdGhpcy0+dW5pdDsKCgkJaWYoICRvcCA9PT0gJysnIHx8ICRvcCA9PT0gJy0nICl7CgoJCQlpZiggISR1bml0LT5udW1lcmF0b3IgJiYgISR1bml0LT5kZW5vbWluYXRvciApewoJCQkJJHVuaXQtPm51bWVyYXRvciA9ICRvdGhlci0+dW5pdC0+bnVtZXJhdG9yOwoJCQkJJHVuaXQtPmRlbm9taW5hdG9yID0gJG90aGVyLT51bml0LT5kZW5vbWluYXRvcjsKCQkJfWVsc2VpZiggISRvdGhlci0+dW5pdC0+bnVtZXJhdG9yICYmICEkb3RoZXItPnVuaXQtPmRlbm9taW5hdG9yICl7CgkJCQkvLyBkbyBub3RoaW5nCgkJCX1lbHNlewoJCQkJJG90aGVyID0gJG90aGVyLT5jb252ZXJ0VG8oICR0aGlzLT51bml0LT51c2VkVW5pdHMoKSk7CgoJCQkJaWYoIExlc3NfUGFyc2VyOjokb3B0aW9uc1snc3RyaWN0VW5pdHMnXSAmJiAkb3RoZXItPnVuaXQtPnRvU3RyaW5nKCkgIT09ICR1bml0LT50b0NTUygpICl7CgkJCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJJbmNvbXBhdGlibGUgdW5pdHMuIENoYW5nZSB0aGUgdW5pdHMgb3IgdXNlIHRoZSB1bml0IGZ1bmN0aW9uLiBCYWQgdW5pdHM6ICciIC4gJHVuaXQtPnRvU3RyaW5nKCkgLiAiJyBhbmQgIiAuICRvdGhlci0+dW5pdC0+dG9TdHJpbmcoKSAuICInLiIpOwoJCQkJfQoKCQkJCSR2YWx1ZSA9IExlc3NfRnVuY3Rpb25zOjpvcGVyYXRlKCAkb3AsICR0aGlzLT52YWx1ZSwgJG90aGVyLT52YWx1ZSk7CgkJCX0KCQl9ZWxzZWlmKCAkb3AgPT09ICcqJyApewoJCQkkdW5pdC0+bnVtZXJhdG9yID0gYXJyYXlfbWVyZ2UoJHVuaXQtPm51bWVyYXRvciwgJG90aGVyLT51bml0LT5udW1lcmF0b3IpOwoJCQkkdW5pdC0+ZGVub21pbmF0b3IgPSBhcnJheV9tZXJnZSgkdW5pdC0+ZGVub21pbmF0b3IsICRvdGhlci0+dW5pdC0+ZGVub21pbmF0b3IpOwoJCQlzb3J0KCR1bml0LT5udW1lcmF0b3IpOwoJCQlzb3J0KCR1bml0LT5kZW5vbWluYXRvcik7CgkJCSR1bml0LT5jYW5jZWwoKTsKCQl9ZWxzZWlmKCAkb3AgPT09ICcvJyApewoJCQkkdW5pdC0+bnVtZXJhdG9yID0gYXJyYXlfbWVyZ2UoJHVuaXQtPm51bWVyYXRvciwgJG90aGVyLT51bml0LT5kZW5vbWluYXRvcik7CgkJCSR1bml0LT5kZW5vbWluYXRvciA9IGFycmF5X21lcmdlKCR1bml0LT5kZW5vbWluYXRvciwgJG90aGVyLT51bml0LT5udW1lcmF0b3IpOwoJCQlzb3J0KCR1bml0LT5udW1lcmF0b3IpOwoJCQlzb3J0KCR1bml0LT5kZW5vbWluYXRvcik7CgkJCSR1bml0LT5jYW5jZWwoKTsKCQl9CgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKCAkdmFsdWUsICR1bml0KTsKICAgIH0KCglwdWJsaWMgZnVuY3Rpb24gY29tcGFyZSgkb3RoZXIpIHsKCQlpZiAoJG90aGVyIGluc3RhbmNlb2YgTGVzc19UcmVlX0RpbWVuc2lvbikgewoKCQkJaWYoICR0aGlzLT51bml0LT5pc0VtcHR5KCkgfHwgJG90aGVyLT51bml0LT5pc0VtcHR5KCkgKXsKCQkJCSRhID0gJHRoaXM7CgkJCQkkYiA9ICRvdGhlcjsKCQkJfSBlbHNlIHsKCQkJCSRhID0gJHRoaXMtPnVuaWZ5KCk7CgkJCQkkYiA9ICRvdGhlci0+dW5pZnkoKTsKCQkJCWlmKCAkYS0+dW5pdC0+Y29tcGFyZSgkYi0+dW5pdCkgIT09IDAgKXsKCQkJCQlyZXR1cm4gLTE7CgkJCQl9CgkJCX0KCQkJJGFWYWx1ZSA9ICRhLT52YWx1ZTsKCQkJJGJWYWx1ZSA9ICRiLT52YWx1ZTsKCgkJCWlmICgkYlZhbHVlID4gJGFWYWx1ZSkgewoJCQkJcmV0dXJuIC0xOwoJCQl9IGVsc2VpZiAoJGJWYWx1ZSA8ICRhVmFsdWUpIHsKCQkJCXJldHVybiAxOwoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIDA7CgkJCX0KCQl9IGVsc2UgewoJCQlyZXR1cm4gLTE7CgkJfQoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1bmlmeSgpIHsKCQlyZXR1cm4gJHRoaXMtPmNvbnZlcnRUbyhhcnJheSgnbGVuZ3RoJz0+ICdweCcsICdkdXJhdGlvbic9PiAncycsICdhbmdsZScgPT4gJ3JhZCcgKSk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUbygkY29udmVyc2lvbnMpIHsKCQkkdmFsdWUgPSAkdGhpcy0+dmFsdWU7CgkJJHVuaXQgPSBjbG9uZSAkdGhpcy0+dW5pdDsKCgkJaWYoIGlzX3N0cmluZygkY29udmVyc2lvbnMpICl7CgkJCSRkZXJpdmVkQ29udmVyc2lvbnMgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCBMZXNzX1RyZWVfVW5pdENvbnZlcnNpb25zOjokZ3JvdXBzIGFzICRpICl7CgkJCQlpZiggaXNzZXQoTGVzc19UcmVlX1VuaXRDb252ZXJzaW9uczo6JHskaX1bJGNvbnZlcnNpb25zXSkgKXsKCQkJCQkkZGVyaXZlZENvbnZlcnNpb25zID0gYXJyYXkoICRpID0+ICRjb252ZXJzaW9ucyk7CgkJCQl9CgkJCX0KCQkJJGNvbnZlcnNpb25zID0gJGRlcml2ZWRDb252ZXJzaW9uczsKCQl9CgoKCQlmb3JlYWNoKCRjb252ZXJzaW9ucyBhcyAkZ3JvdXBOYW1lID0+ICR0YXJnZXRVbml0KXsKCQkJJGdyb3VwID0gTGVzc19UcmVlX1VuaXRDb252ZXJzaW9uczo6JHskZ3JvdXBOYW1lfTsKCgkJCS8vbnVtZXJhdG9yCgkJCWZvcmVhY2goJHVuaXQtPm51bWVyYXRvciBhcyAkaSA9PiAkYXRvbWljVW5pdCl7CgkJCQkkYXRvbWljVW5pdCA9ICR1bml0LT5udW1lcmF0b3JbJGldOwoJCQkJaWYoICFpc3NldCgkZ3JvdXBbJGF0b21pY1VuaXRdKSApewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoKCQkJCSR2YWx1ZSA9ICR2YWx1ZSAqICgkZ3JvdXBbJGF0b21pY1VuaXRdIC8gJGdyb3VwWyR0YXJnZXRVbml0XSk7CgoJCQkJJHVuaXQtPm51bWVyYXRvclskaV0gPSAkdGFyZ2V0VW5pdDsKCQkJfQoKCQkJLy9kZW5vbWluYXRvcgoJCQlmb3JlYWNoKCR1bml0LT5kZW5vbWluYXRvciBhcyAkaSA9PiAkYXRvbWljVW5pdCl7CgkJCQkkYXRvbWljVW5pdCA9ICR1bml0LT5kZW5vbWluYXRvclskaV07CgkJCQlpZiggIWlzc2V0KCRncm91cFskYXRvbWljVW5pdF0pICl7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJJHZhbHVlID0gJHZhbHVlIC8gKCRncm91cFskYXRvbWljVW5pdF0gLyAkZ3JvdXBbJHRhcmdldFVuaXRdKTsKCgkJCQkkdW5pdC0+ZGVub21pbmF0b3JbJGldID0gJHRhcmdldFVuaXQ7CgkJCX0KCQl9CgoJCSR1bml0LT5jYW5jZWwoKTsKCgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRGltZW5zaW9uKCAkdmFsdWUsICR1bml0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Directive.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBEaXJlY3RpdmUKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfRGlyZWN0aXZlIGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAkbmFtZTsKCXB1YmxpYyAkdmFsdWU7CglwdWJsaWMgJHJ1bGVzOwoJcHVibGljICRpbmRleDsKCXB1YmxpYyAkaXNSZWZlcmVuY2VkOwoJcHVibGljICRjdXJyZW50RmlsZUluZm87CglwdWJsaWMgJGRlYnVnSW5mbzsKCXB1YmxpYyAkdHlwZSA9ICdEaXJlY3RpdmUnOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJHZhbHVlID0gbnVsbCwgJHJ1bGVzLCAkaW5kZXggPSBudWxsLCAkY3VycmVudEZpbGVJbmZvID0gbnVsbCwgJGRlYnVnSW5mbyA9IG51bGwgKXsKCQkkdGhpcy0+bmFtZSA9ICRuYW1lOwoJCSR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKCQlpZiggJHJ1bGVzICl7CgkJCSR0aGlzLT5ydWxlcyA9ICRydWxlczsKCQkJJHRoaXMtPnJ1bGVzLT5hbGxvd0ltcG9ydHMgPSB0cnVlOwoJCX0KCgkJJHRoaXMtPmluZGV4ID0gJGluZGV4OwoJCSR0aGlzLT5jdXJyZW50RmlsZUluZm8gPSAkY3VycmVudEZpbGVJbmZvOwoJCSR0aGlzLT5kZWJ1Z0luZm8gPSAkZGVidWdJbmZvOwoJfQoKCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCAkdmlzaXRvciApewoJCWlmKCAkdGhpcy0+cnVsZXMgKXsKCQkJJHRoaXMtPnJ1bGVzID0gJHZpc2l0b3ItPnZpc2l0T2JqKCAkdGhpcy0+cnVsZXMgKTsKCQl9CgkJaWYoICR0aGlzLT52YWx1ZSApewoJCQkkdGhpcy0+dmFsdWUgPSAkdmlzaXRvci0+dmlzaXRPYmooICR0aGlzLT52YWx1ZSApOwoJCX0KCX0KCgogICAgLyoqCiAgICAgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCQkkdmFsdWUgPSAkdGhpcy0+dmFsdWU7CgkJJHJ1bGVzID0gJHRoaXMtPnJ1bGVzOwoJCSRvdXRwdXQtPmFkZCggJHRoaXMtPm5hbWUsICR0aGlzLT5jdXJyZW50RmlsZUluZm8sICR0aGlzLT5pbmRleCApOwoJCWlmKCAkdGhpcy0+dmFsdWUgKXsKCQkJJG91dHB1dC0+YWRkKCcgJyk7CgkJCSR0aGlzLT52YWx1ZS0+Z2VuQ1NTKCRvdXRwdXQpOwoJCX0KCQlpZiggJHRoaXMtPnJ1bGVzICl7CgkJCUxlc3NfVHJlZTo6b3V0cHV0UnVsZXNldCggJG91dHB1dCwgYXJyYXkoJHRoaXMtPnJ1bGVzKSk7CgkJfSBlbHNlIHsKCQkJJG91dHB1dC0+YWRkKCc7Jyk7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCRlbnYpewoKCQkkdmFsdWUgPSAkdGhpcy0+dmFsdWU7CgkJJHJ1bGVzID0gJHRoaXMtPnJ1bGVzOwoJCWlmKCAkdmFsdWUgKXsKCQkJJHZhbHVlID0gJHZhbHVlLT5jb21waWxlKCRlbnYpOwoJCX0KCgkJaWYoICRydWxlcyApewoJCQkkcnVsZXMgPSAkcnVsZXMtPmNvbXBpbGUoJGVudik7CgkJCSRydWxlcy0+cm9vdCA9IHRydWU7CgkJfQoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9EaXJlY3RpdmUoICR0aGlzLT5uYW1lLCAkdmFsdWUsICRydWxlcywgJHRoaXMtPmluZGV4LCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvLCAkdGhpcy0+ZGVidWdJbmZvICk7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiB2YXJpYWJsZSgkbmFtZSl7CgkJaWYoICR0aGlzLT5ydWxlcyApewoJCQlyZXR1cm4gJHRoaXMtPnJ1bGVzLT52YXJpYWJsZSgkbmFtZSk7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBmaW5kKCRzZWxlY3Rvcil7CgkJaWYoICR0aGlzLT5ydWxlcyApewoJCQlyZXR1cm4gJHRoaXMtPnJ1bGVzLT5maW5kKCRzZWxlY3RvciwgJHRoaXMpOwoJCX0KCX0KCgkvL3J1bGVzZXRzOiBmdW5jdGlvbiAoKSB7IGlmICh0aGlzLnJ1bGVzKSByZXR1cm4gdHJlZS5SdWxlc2V0LnByb3RvdHlwZS5ydWxlc2V0cy5hcHBseSh0aGlzLnJ1bGVzKTsgfSwKCglwdWJsaWMgZnVuY3Rpb24gbWFya1JlZmVyZW5jZWQoKXsKCQkkdGhpcy0+aXNSZWZlcmVuY2VkID0gdHJ1ZTsKCQlpZiggJHRoaXMtPnJ1bGVzICl7CgkJCUxlc3NfVHJlZTo6UmVmZXJlbmNlZEFycmF5KCR0aGlzLT5ydWxlcy0+cnVsZXMpOwoJCX0KCX0KCn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Element.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBFbGVtZW50CiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX0VsZW1lbnQgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHVibGljICRjb21iaW5hdG9yID0gJyc7CglwdWJsaWMgJHZhbHVlID0gJyc7CglwdWJsaWMgJGluZGV4OwoJcHVibGljICRjdXJyZW50RmlsZUluZm87CglwdWJsaWMgJHR5cGUgPSAnRWxlbWVudCc7CgoJcHVibGljICR2YWx1ZV9pc19vYmplY3QgPSBmYWxzZTsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvbWJpbmF0b3IsICR2YWx1ZSwgJGluZGV4ID0gbnVsbCwgJGN1cnJlbnRGaWxlSW5mbyA9IG51bGwgKXsKCgkJJHRoaXMtPnZhbHVlID0gJHZhbHVlOwoJCSR0aGlzLT52YWx1ZV9pc19vYmplY3QgPSBpc19vYmplY3QoJHZhbHVlKTsKCgkJaWYoICRjb21iaW5hdG9yICl7CgkJCSR0aGlzLT5jb21iaW5hdG9yID0gJGNvbWJpbmF0b3I7CgkJfQoKCQkkdGhpcy0+aW5kZXggPSAkaW5kZXg7CgkJJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyA9ICRjdXJyZW50RmlsZUluZm87Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGFjY2VwdCggJHZpc2l0b3IgKXsKCQlpZiggJHRoaXMtPnZhbHVlX2lzX29iamVjdCApeyAvL29iamVjdCBvciBzdHJpbmcKCQkJJHRoaXMtPnZhbHVlID0gJHZpc2l0b3ItPnZpc2l0T2JqKCAkdGhpcy0+dmFsdWUgKTsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudil7CgoJCWlmKCBMZXNzX0Vudmlyb25tZW50OjokbWl4aW5fc3RhY2sgKXsKCQkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfRWxlbWVudCgkdGhpcy0+Y29tYmluYXRvciwgKCR0aGlzLT52YWx1ZV9pc19vYmplY3QgPyAkdGhpcy0+dmFsdWUtPmNvbXBpbGUoJGVudikgOiAkdGhpcy0+dmFsdWUpLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8gKTsKCQl9CgoJCWlmKCAkdGhpcy0+dmFsdWVfaXNfb2JqZWN0ICl7CgkJCSR0aGlzLT52YWx1ZSA9ICR0aGlzLT52YWx1ZS0+Y29tcGlsZSgkZW52KTsKCQl9CgoJCXJldHVybiAkdGhpczsKCX0KCiAgICAvKioKICAgICAqIEBzZWUgTGVzc19UcmVlOjpnZW5DU1MKICAgICAqLwoJcHVibGljIGZ1bmN0aW9uIGdlbkNTUyggJG91dHB1dCApewoJCSRvdXRwdXQtPmFkZCggJHRoaXMtPnRvQ1NTKCksICR0aGlzLT5jdXJyZW50RmlsZUluZm8sICR0aGlzLT5pbmRleCApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0b0NTUygpewoKCQlpZiggJHRoaXMtPnZhbHVlX2lzX29iamVjdCApewoJCQkkdmFsdWUgPSAkdGhpcy0+dmFsdWUtPnRvQ1NTKCk7CgkJfWVsc2V7CgkJCSR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKCQl9CgoKCQlpZiggJHZhbHVlID09PSAnJyAmJiAkdGhpcy0+Y29tYmluYXRvciAmJiAkdGhpcy0+Y29tYmluYXRvciA9PT0gJyYnICl7CgkJCXJldHVybiAnJzsKCQl9CgoKCQlyZXR1cm4gTGVzc19FbnZpcm9ubWVudDo6JF9vdXRwdXRNYXBbJHRoaXMtPmNvbWJpbmF0b3JdIC4gJHZhbHVlOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Expression.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBFeHByZXNzaW9uCiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX0V4cHJlc3Npb24gZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHVibGljICR2YWx1ZSA9IGFycmF5KCk7CglwdWJsaWMgJHBhcmVucyA9IGZhbHNlOwoJcHVibGljICRwYXJlbnNJbk9wID0gZmFsc2U7CglwdWJsaWMgJHR5cGUgPSAnRXhwcmVzc2lvbic7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCAkdmFsdWUsICRwYXJlbnMgPSBudWxsICl7CgkJJHRoaXMtPnZhbHVlID0gJHZhbHVlOwoJCSR0aGlzLT5wYXJlbnMgPSAkcGFyZW5zOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhY2NlcHQoICR2aXNpdG9yICl7CgkJJHRoaXMtPnZhbHVlID0gJHZpc2l0b3ItPnZpc2l0QXJyYXkoICR0aGlzLT52YWx1ZSApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCRlbnYpIHsKCgkJJGRvdWJsZVBhcmVuID0gZmFsc2U7CgoJCWlmKCAkdGhpcy0+cGFyZW5zICYmICEkdGhpcy0+cGFyZW5zSW5PcCApewoJCQlMZXNzX0Vudmlyb25tZW50OjokcGFyZW5zU3RhY2srKzsKCQl9CgoJCSRyZXR1cm5WYWx1ZSA9IG51bGw7CgkJaWYoICR0aGlzLT52YWx1ZSApewoKCQkJJGNvdW50ID0gY291bnQoJHRoaXMtPnZhbHVlKTsKCgkJCWlmKCAkY291bnQgPiAxICl7CgoJCQkJJHJldCA9IGFycmF5KCk7CgkJCQlmb3JlYWNoKCR0aGlzLT52YWx1ZSBhcyAkZSl7CgkJCQkJJHJldFtdID0gJGUtPmNvbXBpbGUoJGVudik7CgkJCQl9CgkJCQkkcmV0dXJuVmFsdWUgPSBuZXcgTGVzc19UcmVlX0V4cHJlc3Npb24oJHJldCk7CgoJCQl9ZWxzZXsKCgkJCQlpZiggKCR0aGlzLT52YWx1ZVswXSBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHByZXNzaW9uKSAmJiAkdGhpcy0+dmFsdWVbMF0tPnBhcmVucyAmJiAhJHRoaXMtPnZhbHVlWzBdLT5wYXJlbnNJbk9wICl7CgkJCQkJJGRvdWJsZVBhcmVuID0gdHJ1ZTsKCQkJCX0KCgkJCQkkcmV0dXJuVmFsdWUgPSAkdGhpcy0+dmFsdWVbMF0tPmNvbXBpbGUoJGVudik7CgkJCX0KCgkJfSBlbHNlIHsKCQkJJHJldHVyblZhbHVlID0gJHRoaXM7CgkJfQoKCQlpZiggJHRoaXMtPnBhcmVucyApewoJCQlpZiggISR0aGlzLT5wYXJlbnNJbk9wICl7CgkJCQlMZXNzX0Vudmlyb25tZW50OjokcGFyZW5zU3RhY2stLTsKCgkJCX1lbHNlaWYoICFMZXNzX0Vudmlyb25tZW50Ojppc01hdGhPbigpICYmICEkZG91YmxlUGFyZW4gKXsKCQkJCSRyZXR1cm5WYWx1ZSA9IG5ldyBMZXNzX1RyZWVfUGFyZW4oJHJldHVyblZhbHVlKTsKCgkJCX0KCQl9CgkJcmV0dXJuICRyZXR1cm5WYWx1ZTsKCX0KCiAgICAvKioKICAgICAqIEBzZWUgTGVzc19UcmVlOjpnZW5DU1MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbkNTUyggJG91dHB1dCApewoJCSR2YWxfbGVuID0gY291bnQoJHRoaXMtPnZhbHVlKTsKCQlmb3IoICRpID0gMDsgJGkgPCAkdmFsX2xlbjsgJGkrKyApewoJCQkkdGhpcy0+dmFsdWVbJGldLT5nZW5DU1MoICRvdXRwdXQgKTsKCQkJaWYoICRpICsgMSA8ICR2YWxfbGVuICl7CgkJCQkkb3V0cHV0LT5hZGQoICcgJyApOwoJCQl9CgkJfQoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aHJvd0F3YXlDb21tZW50cygpIHsKCgkJaWYoIGlzX2FycmF5KCR0aGlzLT52YWx1ZSkgKXsKCQkJJG5ld192YWx1ZSA9IGFycmF5KCk7CgkJCWZvcmVhY2goJHRoaXMtPnZhbHVlIGFzICR2KXsKCQkJCWlmKCAkdiBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db21tZW50ICl7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkkbmV3X3ZhbHVlW10gPSAkdjsKCQkJfQoJCQkkdGhpcy0+dmFsdWUgPSAkbmV3X3ZhbHVlOwoJCX0KCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Extend.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBFeHRlbmQKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfRXh0ZW5kIGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAkc2VsZWN0b3I7CglwdWJsaWMgJG9wdGlvbjsKCXB1YmxpYyAkaW5kZXg7CglwdWJsaWMgJHNlbGZTZWxlY3RvcnMgPSBhcnJheSgpOwoJcHVibGljICRhbGxvd0JlZm9yZTsKCXB1YmxpYyAkYWxsb3dBZnRlcjsKCXB1YmxpYyAkZmlyc3RFeHRlbmRPblRoaXNTZWxlY3RvclBhdGg7CglwdWJsaWMgJHR5cGUgPSAnRXh0ZW5kJzsKCXB1YmxpYyAkcnVsZXNldDsKCgoJcHVibGljICRvYmplY3RfaWQ7CglwdWJsaWMgJHBhcmVudF9pZHMgPSBhcnJheSgpOwoKCS8qKgoJICogQHBhcmFtIGludGVnZXIgJGluZGV4CgkgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc2VsZWN0b3IsICRvcHRpb24sICRpbmRleCl7CgkJc3RhdGljICRpID0gMDsKCQkkdGhpcy0+c2VsZWN0b3IgPSAkc2VsZWN0b3I7CgkJJHRoaXMtPm9wdGlvbiA9ICRvcHRpb247CgkJJHRoaXMtPmluZGV4ID0gJGluZGV4OwoKCQlzd2l0Y2goJG9wdGlvbil7CgkJCWNhc2UgImFsbCI6CgkJCQkkdGhpcy0+YWxsb3dCZWZvcmUgPSB0cnVlOwoJCQkJJHRoaXMtPmFsbG93QWZ0ZXIgPSB0cnVlOwoJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCSR0aGlzLT5hbGxvd0JlZm9yZSA9IGZhbHNlOwoJCQkJJHRoaXMtPmFsbG93QWZ0ZXIgPSBmYWxzZTsKCQkJYnJlYWs7CgkJfQoKCQkkdGhpcy0+b2JqZWN0X2lkID0gJGkrKzsKCQkkdGhpcy0+cGFyZW50X2lkcyA9IGFycmF5KCR0aGlzLT5vYmplY3RfaWQpOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhY2NlcHQoICR2aXNpdG9yICl7CgkJJHRoaXMtPnNlbGVjdG9yID0gJHZpc2l0b3ItPnZpc2l0T2JqKCAkdGhpcy0+c2VsZWN0b3IgKTsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSggJGVudiApewoJCUxlc3NfUGFyc2VyOjokaGFzX2V4dGVuZHMgPSB0cnVlOwoJCSR0aGlzLT5zZWxlY3RvciA9ICR0aGlzLT5zZWxlY3Rvci0+Y29tcGlsZSgkZW52KTsKCQlyZXR1cm4gJHRoaXM7CgkJLy9yZXR1cm4gbmV3IExlc3NfVHJlZV9FeHRlbmQoICR0aGlzLT5zZWxlY3Rvci0+Y29tcGlsZSgkZW52KSwgJHRoaXMtPm9wdGlvbiwgJHRoaXMtPmluZGV4KTsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZmluZFNlbGZTZWxlY3RvcnMoICRzZWxlY3RvcnMgKXsKCQkkc2VsZkVsZW1lbnRzID0gYXJyYXkoKTsKCgoJCWZvciggJGkgPSAwLCAkc2VsZWN0b3JzX2xlbiA9IGNvdW50KCRzZWxlY3RvcnMpOyAkaSA8ICRzZWxlY3RvcnNfbGVuOyAkaSsrICl7CgkJCSRzZWxlY3RvckVsZW1lbnRzID0gJHNlbGVjdG9yc1skaV0tPmVsZW1lbnRzOwoJCQkvLyBkdXBsaWNhdGUgdGhlIGxvZ2ljIGluIGdlbkNTUyBmdW5jdGlvbiBpbnNpZGUgdGhlIHNlbGVjdG9yIG5vZGUuCgkJCS8vIGZ1dHVyZSBUT0RPIC0gbW92ZSBib3RoIGxvZ2ljcyBpbnRvIHRoZSBzZWxlY3RvciBqb2luZXIgdmlzaXRvcgoJCQlpZiggJGkgJiYgJHNlbGVjdG9yRWxlbWVudHMgJiYgJHNlbGVjdG9yRWxlbWVudHNbMF0tPmNvbWJpbmF0b3IgPT09ICIiKSB7CgkJCQkkc2VsZWN0b3JFbGVtZW50c1swXS0+Y29tYmluYXRvciA9ICcgJzsKCQkJfQoJCQkkc2VsZkVsZW1lbnRzID0gYXJyYXlfbWVyZ2UoICRzZWxmRWxlbWVudHMsICRzZWxlY3RvcnNbJGldLT5lbGVtZW50cyApOwoJCX0KCgkJJHRoaXMtPnNlbGZTZWxlY3RvcnMgPSBhcnJheShuZXcgTGVzc19UcmVlX1NlbGVjdG9yKCRzZWxmRWxlbWVudHMpKTsKCX0KCn0=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Import.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDU1MgQGltcG9ydCBub2RlCiAqCiAqIFRoZSBnZW5lcmFsIHN0cmF0ZWd5IGhlcmUgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHdhaXQKICogZm9yIHRoZSBwYXJzaW5nIHRvIGJlIGNvbXBsZXRlZCwgYmVmb3JlIHdlIHN0YXJ0IGltcG9ydGluZwogKiB0aGUgZmlsZS4gVGhhdCdzIGJlY2F1c2UgaW4gdGhlIGNvbnRleHQgb2YgYSBicm93c2VyLAogKiBtb3N0IG9mIHRoZSB0aW1lIHdpbGwgYmUgc3BlbnQgd2FpdGluZyBmb3IgdGhlIHNlcnZlciB0byByZXNwb25kLgogKgogKiBPbiBjcmVhdGlvbiwgd2UgcHVzaCB0aGUgaW1wb3J0IHBhdGggdG8gb3VyIGltcG9ydCBxdWV1ZSwgdGhvdWdoCiAqIGBpbXBvcnQscHVzaGAsIHdlIGFsc28gcGFzcyBpdCBhIGNhbGxiYWNrLCB3aGljaCBpdCdsbCBjYWxsIG9uY2UKICogdGhlIGZpbGUgaGFzIGJlZW4gZmV0Y2hlZCwgYW5kIHBhcnNlZC4KICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfSW1wb3J0IGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAkb3B0aW9uczsKCXB1YmxpYyAkaW5kZXg7CglwdWJsaWMgJHBhdGg7CglwdWJsaWMgJGZlYXR1cmVzOwoJcHVibGljICRjdXJyZW50RmlsZUluZm87CglwdWJsaWMgJGNzczsKCXB1YmxpYyAkc2tpcDsKCXB1YmxpYyAkcm9vdDsKCXB1YmxpYyAkdHlwZSA9ICdJbXBvcnQnOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGF0aCwgJGZlYXR1cmVzLCAkb3B0aW9ucywgJGluZGV4LCAkY3VycmVudEZpbGVJbmZvID0gbnVsbCApewoJCSR0aGlzLT5vcHRpb25zID0gJG9wdGlvbnM7CgkJJHRoaXMtPmluZGV4ID0gJGluZGV4OwoJCSR0aGlzLT5wYXRoID0gJHBhdGg7CgkJJHRoaXMtPmZlYXR1cmVzID0gJGZlYXR1cmVzOwoJCSR0aGlzLT5jdXJyZW50RmlsZUluZm8gPSAkY3VycmVudEZpbGVJbmZvOwoKCQlpZiggaXNfYXJyYXkoJG9wdGlvbnMpICl7CgkJCSR0aGlzLT5vcHRpb25zICs9IGFycmF5KCdpbmxpbmUnPT5mYWxzZSk7CgoJCQlpZiggaXNzZXQoJHRoaXMtPm9wdGlvbnNbJ2xlc3MnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ2lubGluZSddICl7CgkJCQkkdGhpcy0+Y3NzID0gIWlzc2V0KCR0aGlzLT5vcHRpb25zWydsZXNzJ10pIHx8ICEkdGhpcy0+b3B0aW9uc1snbGVzcyddIHx8ICR0aGlzLT5vcHRpb25zWydpbmxpbmUnXTsKCQkJfSBlbHNlIHsKCQkJCSRwYXRoVmFsdWUgPSAkdGhpcy0+Z2V0UGF0aCgpOwoJCQkJaWYoICRwYXRoVmFsdWUgJiYgcHJlZ19tYXRjaCgnL2NzcyhbXD87XS4qKT8kLycsJHBhdGhWYWx1ZSkgKXsKCQkJCQkkdGhpcy0+Y3NzID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0KCX0KCi8vCi8vIFRoZSBhY3R1YWwgaW1wb3J0IG5vZGUgZG9lc24ndCByZXR1cm4gYW55dGhpbmcsIHdoZW4gY29udmVydGVkIHRvIENTUy4KLy8gVGhlIHJlYXNvbiBpcyB0aGF0IGl0J3MgdXNlZCBhdCB0aGUgZXZhbHVhdGlvbiBzdGFnZSwgc28gdGhhdCB0aGUgcnVsZXMKLy8gaXQgaW1wb3J0cyBjYW4gYmUgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBydWxlcy4KLy8KLy8gSW4gYGV2YWxgLCB3ZSBtYWtlIHN1cmUgYWxsIEltcG9ydCBub2RlcyBnZXQgZXZhbHVhdGVkLCByZWN1cnNpdmVseSwgc28KLy8gd2UgZW5kIHVwIHdpdGggYSBmbGF0IHN0cnVjdHVyZSwgd2hpY2ggY2FuIGVhc2lseSBiZSBpbXBvcnRlZCBpbiB0aGUgcGFyZW50Ci8vIHJ1bGVzZXQuCi8vCgogICAgcHVibGljIGZ1bmN0aW9uIGFjY2VwdCgkdmlzaXRvcil7CgoJCWlmKCAkdGhpcy0+ZmVhdHVyZXMgKXsKCQkJJHRoaXMtPmZlYXR1cmVzID0gJHZpc2l0b3ItPnZpc2l0T2JqKCR0aGlzLT5mZWF0dXJlcyk7CgkJfQoJCSR0aGlzLT5wYXRoID0gJHZpc2l0b3ItPnZpc2l0T2JqKCR0aGlzLT5wYXRoKTsKCgkJaWYoICEkdGhpcy0+b3B0aW9uc1snaW5saW5lJ10gJiYgJHRoaXMtPnJvb3QgKXsKCQkJJHRoaXMtPnJvb3QgPSAkdmlzaXRvci0+dmlzaXQoJHRoaXMtPnJvb3QpOwoJCX0KCX0KCiAgICAvKioKICAgICAqIEBzZWUgTGVzc19UcmVlOjpnZW5DU1MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbkNTUyggJG91dHB1dCApewoJCWlmKCAkdGhpcy0+Y3NzICl7CgoJCQkkb3V0cHV0LT5hZGQoICdAaW1wb3J0ICcsICR0aGlzLT5jdXJyZW50RmlsZUluZm8sICR0aGlzLT5pbmRleCApOwoKCQkJJHRoaXMtPnBhdGgtPmdlbkNTUyggJG91dHB1dCApOwoJCQlpZiggJHRoaXMtPmZlYXR1cmVzICl7CgkJCQkkb3V0cHV0LT5hZGQoICcgJyApOwoJCQkJJHRoaXMtPmZlYXR1cmVzLT5nZW5DU1MoICRvdXRwdXQgKTsKCQkJfQoJCQkkb3V0cHV0LT5hZGQoICc7JyApOwoJCX0KCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9DU1MoKXsKCQkkZmVhdHVyZXMgPSAkdGhpcy0+ZmVhdHVyZXMgPyAnICcgLiAkdGhpcy0+ZmVhdHVyZXMtPnRvQ1NTKCkgOiAnJzsKCgkJaWYgKCR0aGlzLT5jc3MpIHsKCQkJcmV0dXJuICJAaW1wb3J0ICIgLiAkdGhpcy0+cGF0aC0+dG9DU1MoKSAuICRmZWF0dXJlcyAuICI7XG4iOwoJCX0gZWxzZSB7CgkJCXJldHVybiAiIjsKCQl9Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aCgpewoJCWlmICgkdGhpcy0+cGF0aCBpbnN0YW5jZW9mIExlc3NfVHJlZV9RdW90ZWQpIHsKCQkJJHBhdGggPSAkdGhpcy0+cGF0aC0+dmFsdWU7CgkJCSRwYXRoID0gKCBpc3NldCgkdGhpcy0+Y3NzKSB8fCBwcmVnX21hdGNoKCcvKFwuW2Etel0qJCl8KFtcPztdLiopJC8nLCRwYXRoKSkgPyAkcGF0aCA6ICRwYXRoIC4gJy5sZXNzJzsKCQl9IGVsc2UgaWYgKCR0aGlzLT5wYXRoIGluc3RhbmNlb2YgTGVzc19UcmVlX1VSTCkgewoJCQkkcGF0aCA9ICR0aGlzLT5wYXRoLT52YWx1ZS0+dmFsdWU7CgkJfWVsc2V7CgkJCXJldHVybiBudWxsOwoJCX0KCgkJLy9yZW1vdmUgcXVlcnkgc3RyaW5nIGFuZCBmcmFnbWVudAoJCXJldHVybiBwcmVnX3JlcGxhY2UoJy9bXD8jXVteXD9dKiQvJywnJywkcGF0aCk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGVGb3JJbXBvcnQoICRlbnYgKXsKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9JbXBvcnQoICR0aGlzLT5wYXRoLT5jb21waWxlKCRlbnYpLCAkdGhpcy0+ZmVhdHVyZXMsICR0aGlzLT5vcHRpb25zLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8pOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlUGF0aCgkZW52KSB7CgkJJHBhdGggPSAkdGhpcy0+cGF0aC0+Y29tcGlsZSgkZW52KTsKCQkkcm9vdHBhdGggPSAnJzsKCQlpZiggJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyAmJiAkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydyb290cGF0aCddICl7CgkJCSRyb290cGF0aCA9ICR0aGlzLT5jdXJyZW50RmlsZUluZm9bJ3Jvb3RwYXRoJ107CgkJfQoKCgkJaWYoICEoJHBhdGggaW5zdGFuY2VvZiBMZXNzX1RyZWVfVVJMKSApewoJCQlpZiggJHJvb3RwYXRoICl7CgkJCQkkcGF0aFZhbHVlID0gJHBhdGgtPnZhbHVlOwoJCQkJLy8gQWRkIHRoZSBiYXNlIHBhdGggaWYgdGhlIGltcG9ydCBpcyByZWxhdGl2ZQoJCQkJaWYoICRwYXRoVmFsdWUgJiYgTGVzc19FbnZpcm9ubWVudDo6aXNQYXRoUmVsYXRpdmUoJHBhdGhWYWx1ZSkgKXsKCQkJCQkkcGF0aC0+dmFsdWUgPSAkdGhpcy0+Y3VycmVudEZpbGVJbmZvWyd1cmlfcm9vdCddLiRwYXRoVmFsdWU7CgkJCQl9CgkJCX0KCQkJJHBhdGgtPnZhbHVlID0gTGVzc19FbnZpcm9ubWVudDo6bm9ybWFsaXplUGF0aCgkcGF0aC0+dmFsdWUpOwoJCX0KCgoKCQlyZXR1cm4gJHBhdGg7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoICRlbnYgKXsKCgkJJGV2YWxkID0gJHRoaXMtPmNvbXBpbGVGb3JJbXBvcnQoJGVudik7CgoJCS8vZ2V0IHBhdGggJiB1cmkKCQkkcGF0aF9hbmRfdXJpID0gbnVsbDsKCQlpZiggaXNfY2FsbGFibGUoTGVzc19QYXJzZXI6OiRvcHRpb25zWydpbXBvcnRfY2FsbGJhY2snXSkgKXsKCQkJJHBhdGhfYW5kX3VyaSA9IGNhbGxfdXNlcl9mdW5jKExlc3NfUGFyc2VyOjokb3B0aW9uc1snaW1wb3J0X2NhbGxiYWNrJ10sJGV2YWxkKTsKCQl9CgoJCWlmKCAhJHBhdGhfYW5kX3VyaSApewoJCQkkcGF0aF9hbmRfdXJpID0gJGV2YWxkLT5QYXRoQW5kVXJpKCk7CgkJfQoKCQlpZiggJHBhdGhfYW5kX3VyaSApewoJCQlsaXN0KCRmdWxsX3BhdGgsICR1cmkpID0gJHBhdGhfYW5kX3VyaTsKCQl9ZWxzZXsKCQkJJGZ1bGxfcGF0aCA9ICR1cmkgPSAkZXZhbGQtPmdldFBhdGgoKTsKCQl9CgoKCQkvL2ltcG9ydCBvbmNlCgkJaWYoICRldmFsZC0+c2tpcCggJGZ1bGxfcGF0aCwgJGVudikgKXsKCQkJcmV0dXJuIGFycmF5KCk7CgkJfQoKCQlpZiggJHRoaXMtPm9wdGlvbnNbJ2lubGluZSddICl7CgkJCS8vdG9kbyBuZWVkcyB0byByZWZlcmVuY2UgY3NzIGZpbGUgbm90IGltcG9ydAoJCQkvLyRjb250ZW50cyA9IG5ldyBMZXNzX1RyZWVfQW5vbnltb3VzKCR0aGlzLT5yb290LCAwLCBhcnJheSgnZmlsZW5hbWUnPT4kdGhpcy0+aW1wb3J0ZWRGaWxlbmFtZSksIHRydWUgKTsKCgkJCUxlc3NfUGFyc2VyOjpBZGRQYXJzZWRGaWxlKCRmdWxsX3BhdGgpOwoJCQkkY29udGVudHMgPSBuZXcgTGVzc19UcmVlX0Fub255bW91cyggZmlsZV9nZXRfY29udGVudHMoJGZ1bGxfcGF0aCksIDAsIGFycmF5KCksIHRydWUgKTsKCgkJCWlmKCAkdGhpcy0+ZmVhdHVyZXMgKXsKCQkJCXJldHVybiBuZXcgTGVzc19UcmVlX01lZGlhKCBhcnJheSgkY29udGVudHMpLCAkdGhpcy0+ZmVhdHVyZXMtPnZhbHVlICk7CgkJCX0KCgkJCXJldHVybiBhcnJheSggJGNvbnRlbnRzICk7CgkJfQoKCQkvLyBvcHRpb25hbCAobmVlZCB0byBiZSBiZWZvcmUgIkNTUyIgdG8gc3VwcG9ydCBvcHRpb25hbCBDU1MgaW1wb3J0cy4gQ1NTIHNob3VsZCBiZSBjaGVja2VkIG9ubHkgaWYgZW1wdHkoJHRoaXMtPmN1cnJlbnRGaWxlSW5mbykpCgkJaWYoIGlzc2V0KCR0aGlzLT5vcHRpb25zWydvcHRpb25hbCddKSAmJiAkdGhpcy0+b3B0aW9uc1snb3B0aW9uYWwnXSAmJiAhZmlsZV9leGlzdHMoJGZ1bGxfcGF0aCkgJiYgKCEkZXZhbGQtPmNzcyB8fCAhZW1wdHkoJHRoaXMtPmN1cnJlbnRGaWxlSW5mbykpKSB7CgkJCXJldHVybiBhcnJheSgpOwoJCX0KCgoJCS8vIGNzcyA/CgkJaWYoICRldmFsZC0+Y3NzICl7CgkJCSRmZWF0dXJlcyA9ICggJGV2YWxkLT5mZWF0dXJlcyA/ICRldmFsZC0+ZmVhdHVyZXMtPmNvbXBpbGUoJGVudikgOiBudWxsICk7CgkJCXJldHVybiBuZXcgTGVzc19UcmVlX0ltcG9ydCggJHRoaXMtPmNvbXBpbGVQYXRoKCAkZW52KSwgJGZlYXR1cmVzLCAkdGhpcy0+b3B0aW9ucywgJHRoaXMtPmluZGV4KTsKCQl9CgoKCQlyZXR1cm4gJHRoaXMtPlBhcnNlSW1wb3J0KCAkZnVsbF9wYXRoLCAkdXJpLCAkZW52ICk7Cgl9CgoKCS8qKgoJICogVXNpbmcgdGhlIGltcG9ydCBkaXJlY3RvcmllcywgZ2V0IHRoZSBmdWxsIGFic29sdXRlIHBhdGggYW5kIHVyaSBvZiB0aGUgaW1wb3J0CgkgKgoJICogQHBhcmFtIExlc3NfVHJlZV9JbXBvcnQgJGV2YWxkCgkgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBQYXRoQW5kVXJpKCl7CgoJCSRldmFsZF9wYXRoID0gJHRoaXMtPmdldFBhdGgoKTsKCgkJaWYoICRldmFsZF9wYXRoICl7CgoJCQkkaW1wb3J0X2RpcnMgPSBhcnJheSgpOwoKCQkJaWYoIExlc3NfRW52aXJvbm1lbnQ6OmlzUGF0aFJlbGF0aXZlKCRldmFsZF9wYXRoKSApewoJCQkJLy9pZiB0aGUgcGF0aCBpcyByZWxhdGl2ZSwgdGhlIGZpbGUgc2hvdWxkIGJlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQoJCQkJJGltcG9ydF9kaXJzWyAkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydjdXJyZW50RGlyZWN0b3J5J10gXSA9ICR0aGlzLT5jdXJyZW50RmlsZUluZm9bJ3VyaV9yb290J107CgoJCQl9ZWxzZXsKCQkJCS8vb3RoZXJ3aXNlLCB0aGUgZmlsZSBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIHNlcnZlciByb290CgkJCQkkaW1wb3J0X2RpcnNbICR0aGlzLT5jdXJyZW50RmlsZUluZm9bJ2VudHJ5UGF0aCddIF0gPSAkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydlbnRyeVVyaSddOwoKCQkJCS8vaWYgdGhlIHVzZXIgc3VwcGxpZWQgZW50cnlQYXRoIGlzbid0IHRoZSBhY3R1YWwgcm9vdAoJCQkJJGltcG9ydF9kaXJzWyAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIF0gPSAnJzsKCgkJCX0KCgkJCS8vIGFsd2F5cyBsb29rIGluIHVzZXIgc3VwcGxpZWQgaW1wb3J0IGRpcmVjdG9yaWVzCgkJCSRpbXBvcnRfZGlycyA9IGFycmF5X21lcmdlKCAkaW1wb3J0X2RpcnMsIExlc3NfUGFyc2VyOjokb3B0aW9uc1snaW1wb3J0X2RpcnMnXSApOwoKCgkJCWZvcmVhY2goICRpbXBvcnRfZGlycyBhcyAkcm9vdHBhdGggPT4gJHJvb3R1cmkpewoJCQkJaWYoIGlzX2NhbGxhYmxlKCRyb290dXJpKSApewoJCQkJCWxpc3QoJHBhdGgsICR1cmkpID0gY2FsbF91c2VyX2Z1bmMoJHJvb3R1cmksICRldmFsZF9wYXRoKTsKCQkJCQlpZiggaXNfc3RyaW5nKCRwYXRoKSApewoJCQkJCQkkZnVsbF9wYXRoID0gJHBhdGg7CgkJCQkJCXJldHVybiBhcnJheSggJGZ1bGxfcGF0aCwgJHVyaSApOwoJCQkJCX0KCQkJCX1lbHNlaWYoICFlbXB0eSgkcm9vdHBhdGgpICl7CgoKCQkJCQlpZiggJHJvb3R1cmkgKXsKCQkJCQkJaWYoIHN0cnBvcygkZXZhbGRfcGF0aCwkcm9vdHVyaSkgPT09IDAgKXsKCQkJCQkJCSRldmFsZF9wYXRoID0gc3Vic3RyKCAkZXZhbGRfcGF0aCwgc3RybGVuKCRyb290dXJpKSApOwoJCQkJCQl9CgkJCQkJfQoKCQkJCQkkcGF0aCA9IHJ0cmltKCRyb290cGF0aCwnL1xcJykuJy8nLmx0cmltKCRldmFsZF9wYXRoLCcvXFwnKTsKCgkJCQkJaWYoIGZpbGVfZXhpc3RzKCRwYXRoKSApewoJCQkJCQkkZnVsbF9wYXRoID0gTGVzc19FbnZpcm9ubWVudDo6bm9ybWFsaXplUGF0aCgkcGF0aCk7CgkJCQkJCSR1cmkgPSBMZXNzX0Vudmlyb25tZW50Ojpub3JtYWxpemVQYXRoKGRpcm5hbWUoJHJvb3R1cmkuJGV2YWxkX3BhdGgpKTsKCQkJCQkJcmV0dXJuIGFycmF5KCAkZnVsbF9wYXRoLCAkdXJpICk7CgkJCQkJfSBlbHNlaWYoIGZpbGVfZXhpc3RzKCRwYXRoLicubGVzcycpICl7CgkJCQkJCSRmdWxsX3BhdGggPSBMZXNzX0Vudmlyb25tZW50Ojpub3JtYWxpemVQYXRoKCRwYXRoLicubGVzcycpOwoJCQkJCQkkdXJpID0gTGVzc19FbnZpcm9ubWVudDo6bm9ybWFsaXplUGF0aChkaXJuYW1lKCRyb290dXJpLiRldmFsZF9wYXRoLicubGVzcycpKTsKCQkJCQkJcmV0dXJuIGFycmF5KCAkZnVsbF9wYXRoLCAkdXJpICk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoKCgkvKioKCSAqIFBhcnNlIHRoZSBpbXBvcnQgdXJsIGFuZCByZXR1cm4gdGhlIHJ1bGVzCgkgKgoJICogQHJldHVybiBMZXNzX1RyZWVfTWVkaWF8YXJyYXkKCSAqLwogICAgcHVibGljIGZ1bmN0aW9uIFBhcnNlSW1wb3J0KCAkZnVsbF9wYXRoLCAkdXJpLCAkZW52ICl7CgoJCSRpbXBvcnRfZW52ID0gY2xvbmUgJGVudjsKCQlpZiggKGlzc2V0KCR0aGlzLT5vcHRpb25zWydyZWZlcmVuY2UnXSkgJiYgJHRoaXMtPm9wdGlvbnNbJ3JlZmVyZW5jZSddKSB8fCBpc3NldCgkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydyZWZlcmVuY2UnXSkgKXsKCQkJJGltcG9ydF9lbnYtPmN1cnJlbnRGaWxlSW5mb1sncmVmZXJlbmNlJ10gPSB0cnVlOwoJCX0KCgkJaWYoIChpc3NldCgkdGhpcy0+b3B0aW9uc1snbXVsdGlwbGUnXSkgJiYgJHRoaXMtPm9wdGlvbnNbJ211bHRpcGxlJ10pICl7CgkJCSRpbXBvcnRfZW52LT5pbXBvcnRNdWx0aXBsZSA9IHRydWU7CgkJfQoKCQkkcGFyc2VyID0gbmV3IExlc3NfUGFyc2VyKCRpbXBvcnRfZW52KTsKCQkkcm9vdCA9ICRwYXJzZXItPnBhcnNlRmlsZSgkZnVsbF9wYXRoLCAkdXJpLCB0cnVlKTsKCgoJCSRydWxlc2V0ID0gbmV3IExlc3NfVHJlZV9SdWxlc2V0KGFycmF5KCksICRyb290LT5ydWxlcyApOwoJCSRydWxlc2V0LT5ldmFsSW1wb3J0cygkaW1wb3J0X2Vudik7CgoJCXJldHVybiAkdGhpcy0+ZmVhdHVyZXMgPyBuZXcgTGVzc19UcmVlX01lZGlhKCRydWxlc2V0LT5ydWxlcywgJHRoaXMtPmZlYXR1cmVzLT52YWx1ZSkgOiAkcnVsZXNldC0+cnVsZXM7Cgl9CgoKCS8qKgoJICogU2hvdWxkIHRoZSBpbXBvcnQgYmUgc2tpcHBlZD8KCSAqCgkgKiBAcmV0dXJuIGJvb2xlYW58bnVsbAoJICovCglwcml2YXRlIGZ1bmN0aW9uIFNraXAoJHBhdGgsICRlbnYpewoKCQkkcGF0aCA9IExlc3NfUGFyc2VyOjp3aW5QYXRoKHJlYWxwYXRoKCRwYXRoKSk7CgoJCWlmKCAkcGF0aCAmJiBMZXNzX1BhcnNlcjo6RmlsZVBhcnNlZCgkcGF0aCkgKXsKCgkJCWlmKCBpc3NldCgkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydyZWZlcmVuY2UnXSkgKXsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgoJCQlyZXR1cm4gIWlzc2V0KCR0aGlzLT5vcHRpb25zWydtdWx0aXBsZSddKSAmJiAhJGVudi0+aW1wb3J0TXVsdGlwbGU7CgkJfQoKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Javascript.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBKYXZhc2NyaXB0CiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX0phdmFzY3JpcHQgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHVibGljICR0eXBlID0gJ0phdmFzY3JpcHQnOwoJcHVibGljICRlc2NhcGVkOwoJcHVibGljICRleHByZXNzaW9uOwoJcHVibGljICRpbmRleDsKCgkvKioKCSAqIEBwYXJhbSBib29sZWFuICRpbmRleAoJICogQHBhcmFtIGJvb2xlYW4gJGVzY2FwZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpbmcsICRpbmRleCwgJGVzY2FwZWQpewoJCSR0aGlzLT5lc2NhcGVkID0gJGVzY2FwZWQ7CgkJJHRoaXMtPmV4cHJlc3Npb24gPSAkc3RyaW5nOwoJCSR0aGlzLT5pbmRleCA9ICRpbmRleDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgpewoJCXJldHVybiBuZXcgTGVzc19UcmVlX0Fub255bW91cygnLyogU29ycnksIGNhbiBub3QgZG8gSmF2YVNjcmlwdCBldmFsdWF0aW9uIGluIFBIUC4uLiA6KCAqLycpOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Keyword.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBLZXl3b3JkCiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX0tleXdvcmQgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHVibGljICR2YWx1ZTsKCXB1YmxpYyAkdHlwZSA9ICdLZXl3b3JkJzsKCgkvKioKCSAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpewoJCSR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgpewoJCXJldHVybiAkdGhpczsKCX0KCiAgICAvKioKICAgICAqIEBzZWUgTGVzc19UcmVlOjpnZW5DU1MKICAgICAqLwoJcHVibGljIGZ1bmN0aW9uIGdlbkNTUyggJG91dHB1dCApewoKCQlpZiggJHRoaXMtPnZhbHVlID09PSAnJScpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJJbnZhbGlkICUgd2l0aG91dCBudW1iZXIiKTsKCQl9CgoJCSRvdXRwdXQtPmFkZCggJHRoaXMtPnZhbHVlICk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNvbXBhcmUoJG90aGVyKSB7CgkJaWYgKCRvdGhlciBpbnN0YW5jZW9mIExlc3NfVHJlZV9LZXl3b3JkKSB7CgkJCXJldHVybiAkb3RoZXItPnZhbHVlID09PSAkdGhpcy0+dmFsdWUgPyAwIDogMTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gLTE7CgkJfQoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Media.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBNZWRpYQogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9NZWRpYSBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJGZlYXR1cmVzOwoJcHVibGljICRydWxlczsKCXB1YmxpYyAkaW5kZXg7CglwdWJsaWMgJGN1cnJlbnRGaWxlSW5mbzsKCXB1YmxpYyAkaXNSZWZlcmVuY2VkOwoJcHVibGljICR0eXBlID0gJ01lZGlhJzsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlID0gYXJyYXkoKSwgJGZlYXR1cmVzID0gYXJyYXkoKSwgJGluZGV4ID0gbnVsbCwgJGN1cnJlbnRGaWxlSW5mbyA9IG51bGwgKXsKCgkJJHRoaXMtPmluZGV4ID0gJGluZGV4OwoJCSR0aGlzLT5jdXJyZW50RmlsZUluZm8gPSAkY3VycmVudEZpbGVJbmZvOwoKCQkkc2VsZWN0b3JzID0gJHRoaXMtPmVtcHR5U2VsZWN0b3JzKCk7CgoJCSR0aGlzLT5mZWF0dXJlcyA9IG5ldyBMZXNzX1RyZWVfVmFsdWUoJGZlYXR1cmVzKTsKCgkJJHRoaXMtPnJ1bGVzID0gYXJyYXkobmV3IExlc3NfVHJlZV9SdWxlc2V0KCRzZWxlY3RvcnMsICR2YWx1ZSkpOwoJCSR0aGlzLT5ydWxlc1swXS0+YWxsb3dJbXBvcnRzID0gdHJ1ZTsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCAkdmlzaXRvciApewoJCSR0aGlzLT5mZWF0dXJlcyA9ICR2aXNpdG9yLT52aXNpdE9iaigkdGhpcy0+ZmVhdHVyZXMpOwoJCSR0aGlzLT5ydWxlcyA9ICR2aXNpdG9yLT52aXNpdEFycmF5KCR0aGlzLT5ydWxlcyk7Cgl9CgogICAgLyoqCiAgICAgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCgkJJG91dHB1dC0+YWRkKCAnQG1lZGlhICcsICR0aGlzLT5jdXJyZW50RmlsZUluZm8sICR0aGlzLT5pbmRleCApOwoJCSR0aGlzLT5mZWF0dXJlcy0+Z2VuQ1NTKCAkb3V0cHV0ICk7CgkJTGVzc19UcmVlOjpvdXRwdXRSdWxlc2V0KCAkb3V0cHV0LCAkdGhpcy0+cnVsZXMpOwoKCX0KCglwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgkZW52KSB7CgoJCSRtZWRpYSA9IG5ldyBMZXNzX1RyZWVfTWVkaWEoYXJyYXkoKSwgYXJyYXkoKSwgJHRoaXMtPmluZGV4LCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvICk7CgoJCSRzdHJpY3RNYXRoQnlwYXNzID0gZmFsc2U7CgkJaWYoIExlc3NfUGFyc2VyOjokb3B0aW9uc1snc3RyaWN0TWF0aCddID09PSBmYWxzZSkgewoJCQkkc3RyaWN0TWF0aEJ5cGFzcyA9IHRydWU7CgkJCUxlc3NfUGFyc2VyOjokb3B0aW9uc1snc3RyaWN0TWF0aCddID0gdHJ1ZTsKCQl9CgoJCSRtZWRpYS0+ZmVhdHVyZXMgPSAkdGhpcy0+ZmVhdHVyZXMtPmNvbXBpbGUoJGVudik7CgoJCWlmKCAkc3RyaWN0TWF0aEJ5cGFzcyApewoJCQlMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ3N0cmljdE1hdGgnXSA9IGZhbHNlOwoJCX0KCgkJJGVudi0+bWVkaWFQYXRoW10gPSAkbWVkaWE7CgkJJGVudi0+bWVkaWFCbG9ja3NbXSA9ICRtZWRpYTsKCgkJYXJyYXlfdW5zaGlmdCgkZW52LT5mcmFtZXMsICR0aGlzLT5ydWxlc1swXSk7CgkJJG1lZGlhLT5ydWxlcyA9IGFycmF5KCR0aGlzLT5ydWxlc1swXS0+Y29tcGlsZSgkZW52KSk7CgkJYXJyYXlfc2hpZnQoJGVudi0+ZnJhbWVzKTsKCgkJYXJyYXlfcG9wKCRlbnYtPm1lZGlhUGF0aCk7CgoJCXJldHVybiAhJGVudi0+bWVkaWFQYXRoID8gJG1lZGlhLT5jb21waWxlVG9wKCRlbnYpIDogJG1lZGlhLT5jb21waWxlTmVzdGVkKCRlbnYpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB2YXJpYWJsZSgkbmFtZSkgewoJCXJldHVybiAkdGhpcy0+cnVsZXNbMF0tPnZhcmlhYmxlKCRuYW1lKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZmluZCgkc2VsZWN0b3IpIHsKCQlyZXR1cm4gJHRoaXMtPnJ1bGVzWzBdLT5maW5kKCRzZWxlY3RvciwgJHRoaXMpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBlbXB0eVNlbGVjdG9ycygpewoJCSRlbCA9IG5ldyBMZXNzX1RyZWVfRWxlbWVudCgnJywnJicsICR0aGlzLT5pbmRleCwgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyApOwoJCSRzZWxzID0gYXJyYXkoIG5ldyBMZXNzX1RyZWVfU2VsZWN0b3IoYXJyYXkoJGVsKSwgYXJyYXkoKSwgbnVsbCwgJHRoaXMtPmluZGV4LCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvKSApOwoJCSRzZWxzWzBdLT5tZWRpYUVtcHR5ID0gdHJ1ZTsKICAgICAgICByZXR1cm4gJHNlbHM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG1hcmtSZWZlcmVuY2VkKCl7CgkJJHRoaXMtPnJ1bGVzWzBdLT5tYXJrUmVmZXJlbmNlZCgpOwoJCSR0aGlzLT5pc1JlZmVyZW5jZWQgPSB0cnVlOwoJCUxlc3NfVHJlZTo6UmVmZXJlbmNlZEFycmF5KCR0aGlzLT5ydWxlc1swXS0+cnVsZXMpOwoJfQoKCS8vIGV2YWx0b3AKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlVG9wKCRlbnYpIHsKCQkkcmVzdWx0ID0gJHRoaXM7CgoJCWlmIChjb3VudCgkZW52LT5tZWRpYUJsb2NrcykgPiAxKSB7CgkJCSRzZWxlY3RvcnMgPSAkdGhpcy0+ZW1wdHlTZWxlY3RvcnMoKTsKCQkJJHJlc3VsdCA9IG5ldyBMZXNzX1RyZWVfUnVsZXNldCgkc2VsZWN0b3JzLCAkZW52LT5tZWRpYUJsb2Nrcyk7CgkJCSRyZXN1bHQtPm11bHRpTWVkaWEgPSB0cnVlOwoJCX0KCgkJJGVudi0+bWVkaWFCbG9ja3MgPSBhcnJheSgpOwoJCSRlbnYtPm1lZGlhUGF0aCA9IGFycmF5KCk7CgoJCXJldHVybiAkcmVzdWx0OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlTmVzdGVkKCRlbnYpIHsKCQkkcGF0aCA9IGFycmF5X21lcmdlKCRlbnYtPm1lZGlhUGF0aCwgYXJyYXkoJHRoaXMpKTsKCgkJLy8gRXh0cmFjdCB0aGUgbWVkaWEtcXVlcnkgY29uZGl0aW9ucyBzZXBhcmF0ZWQgd2l0aCBgLGAgKE9SKS4KCQlmb3JlYWNoICgkcGF0aCBhcyAka2V5ID0+ICRwKSB7CgkJCSR2YWx1ZSA9ICRwLT5mZWF0dXJlcyBpbnN0YW5jZW9mIExlc3NfVHJlZV9WYWx1ZSA/ICRwLT5mZWF0dXJlcy0+dmFsdWUgOiAkcC0+ZmVhdHVyZXM7CgkJCSRwYXRoWyRrZXldID0gaXNfYXJyYXkoJHZhbHVlKSA/ICR2YWx1ZSA6IGFycmF5KCR2YWx1ZSk7CgkJfQoKCQkvLyBUcmFjZSBhbGwgcGVybXV0YXRpb25zIHRvIGdlbmVyYXRlIHRoZSByZXN1bHRpbmcgbWVkaWEtcXVlcnkuCgkJLy8KCQkvLyAoYSwgYiBhbmQgYykgd2l0aCBuZXN0ZWQgKGQsIGUpIC0+CgkJLy8JYSBhbmQgZAoJCS8vCWEgYW5kIGUKCQkvLwliIGFuZCBjIGFuZCBkCgkJLy8JYiBhbmQgYyBhbmQgZQoKCQkkcGVybXV0ZWQgPSAkdGhpcy0+cGVybXV0ZSgkcGF0aCk7CgkJJGV4cHJlc3Npb25zID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRwZXJtdXRlZCBhcyAkcGF0aCl7CgoJCQlmb3IoICRpPTAsICRsZW49Y291bnQoJHBhdGgpOyAkaSA8ICRsZW47ICRpKyspewoJCQkJJHBhdGhbJGldID0gTGVzc19QYXJzZXI6OmlzX21ldGhvZCgkcGF0aFskaV0sICd0b0NTUycpID8gJHBhdGhbJGldIDogbmV3IExlc3NfVHJlZV9Bbm9ueW1vdXMoJHBhdGhbJGldKTsKCQkJfQoKCQkJZm9yKCAkaSA9IGNvdW50KCRwYXRoKSAtIDE7ICRpID4gMDsgJGktLSApewoJCQkJYXJyYXlfc3BsaWNlKCRwYXRoLCAkaSwgMCwgYXJyYXkobmV3IExlc3NfVHJlZV9Bbm9ueW1vdXMoJ2FuZCcpKSk7CgkJCX0KCgkJCSRleHByZXNzaW9uc1tdID0gbmV3IExlc3NfVHJlZV9FeHByZXNzaW9uKCRwYXRoKTsKCQl9CgkJJHRoaXMtPmZlYXR1cmVzID0gbmV3IExlc3NfVHJlZV9WYWx1ZSgkZXhwcmVzc2lvbnMpOwoKCgoJCS8vIEZha2UgYSB0cmVlLW5vZGUgdGhhdCBkb2Vzbid0IG91dHB1dCBhbnl0aGluZy4KCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9SdWxlc2V0KGFycmF5KCksIGFycmF5KCkpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwZXJtdXRlKCRhcnIpIHsKCQlpZiAoISRhcnIpCgkJCXJldHVybiBhcnJheSgpOwoKCQlpZiAoY291bnQoJGFycikgPT0gMSkKCQkJcmV0dXJuICRhcnJbMF07CgoJCSRyZXN1bHQgPSBhcnJheSgpOwoJCSRyZXN0ID0gJHRoaXMtPnBlcm11dGUoYXJyYXlfc2xpY2UoJGFyciwgMSkpOwoJCWZvcmVhY2ggKCRyZXN0IGFzICRyKSB7CgkJCWZvcmVhY2ggKCRhcnJbMF0gYXMgJGEpIHsKCQkJCSRyZXN1bHRbXSA9IGFycmF5X21lcmdlKAoJCQkJCWlzX2FycmF5KCRhKSA/ICRhIDogYXJyYXkoJGEpLAoJCQkJCWlzX2FycmF5KCRyKSA/ICRyIDogYXJyYXkoJHIpCgkJCQkpOwoJCQl9CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYnViYmxlU2VsZWN0b3JzKCRzZWxlY3RvcnMpIHsKCgkJaWYoICEkc2VsZWN0b3JzKSByZXR1cm47CgoJCSR0aGlzLT5ydWxlcyA9IGFycmF5KG5ldyBMZXNzX1RyZWVfUnVsZXNldCggJHNlbGVjdG9ycywgYXJyYXkoJHRoaXMtPnJ1bGVzWzBdKSkpOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Mixin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Mixin/Call.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpjbGFzcyBMZXNzX1RyZWVfTWl4aW5fQ2FsbCBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJHNlbGVjdG9yOwoJcHVibGljICRhcmd1bWVudHM7CglwdWJsaWMgJGluZGV4OwoJcHVibGljICRjdXJyZW50RmlsZUluZm87CgoJcHVibGljICRpbXBvcnRhbnQ7CglwdWJsaWMgJHR5cGUgPSAnTWl4aW5DYWxsJzsKCgkvKioKCSAqIGxlc3MuanM6IHRyZWUubWl4aW4uQ2FsbAoJICoKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRlbGVtZW50cywgJGFyZ3MsICRpbmRleCwgJGN1cnJlbnRGaWxlSW5mbywgJGltcG9ydGFudCA9IGZhbHNlKXsKCQkkdGhpcy0+c2VsZWN0b3IgPSBuZXcgTGVzc19UcmVlX1NlbGVjdG9yKCRlbGVtZW50cyk7CgkJJHRoaXMtPmFyZ3VtZW50cyA9ICRhcmdzOwoJCSR0aGlzLT5pbmRleCA9ICRpbmRleDsKCQkkdGhpcy0+Y3VycmVudEZpbGVJbmZvID0gJGN1cnJlbnRGaWxlSW5mbzsKCQkkdGhpcy0+aW1wb3J0YW50ID0gJGltcG9ydGFudDsKCX0KCgkvL2Z1bmN0aW9uIGFjY2VwdCgkdmlzaXRvcil7CgkvLwkkdGhpcy0+c2VsZWN0b3IgPSAkdmlzaXRvci0+dmlzaXQoJHRoaXMtPnNlbGVjdG9yKTsKCS8vCSR0aGlzLT5hcmd1bWVudHMgPSAkdmlzaXRvci0+dmlzaXQoJHRoaXMtPmFyZ3VtZW50cyk7CgkvL30KCgoJcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudil7CgoJCSRydWxlcyA9IGFycmF5KCk7CgkJJG1hdGNoID0gZmFsc2U7CgkJJGlzT25lRm91bmQgPSBmYWxzZTsKCQkkY2FuZGlkYXRlcyA9IGFycmF5KCk7CgkJJGRlZmF1bHRVc2VkID0gZmFsc2U7CgkJJGNvbmRpdGlvblJlc3VsdCA9IGFycmF5KCk7CgoJCSRhcmdzID0gYXJyYXkoKTsKCQlmb3JlYWNoKCR0aGlzLT5hcmd1bWVudHMgYXMgJGEpewoJCQkkYXJnc1tdID0gYXJyYXkoJ25hbWUnPT4gJGFbJ25hbWUnXSwgJ3ZhbHVlJyA9PiAkYVsndmFsdWUnXS0+Y29tcGlsZSgkZW52KSApOwoJCX0KCgkJZm9yZWFjaCgkZW52LT5mcmFtZXMgYXMgJGZyYW1lKXsKCgkJCSRtaXhpbnMgPSAkZnJhbWUtPmZpbmQoJHRoaXMtPnNlbGVjdG9yKTsKCgkJCWlmKCAhJG1peGlucyApewoJCQkJY29udGludWU7CgkJCX0KCgkJCSRpc09uZUZvdW5kID0gdHJ1ZTsKCQkJJGRlZk5vbmUgPSAwOwoJCQkkZGVmVHJ1ZSA9IDE7CgkJCSRkZWZGYWxzZSA9IDI7CgoJCQkvLyBUbyBtYWtlIGBkZWZhdWx0KClgIGZ1bmN0aW9uIGluZGVwZW5kZW50IG9mIGRlZmluaXRpb24gb3JkZXIgd2UgaGF2ZSB0d28gInN1YnBhc3NlcyIgaGVyZS4KCQkJLy8gQXQgZmlyc3Qgd2UgZXZhbHVhdGUgZWFjaCBndWFyZCAqdHdpY2UqICh3aXRoIGBkZWZhdWx0KCkgPT0gdHJ1ZWAgYW5kIGBkZWZhdWx0KCkgPT0gZmFsc2VgKSwKCQkJLy8gYW5kIGJ1aWxkIGNhbmRpZGF0ZSBsaXN0IHdpdGggY29ycmVzcG9uZGluZyBmbGFncy4gVGhlbiwgd2hlbiB3ZSBrbm93IGFsbCBwb3NzaWJsZSBtYXRjaGVzLAoJCQkvLyB3ZSBtYWtlIGEgZmluYWwgZGVjaXNpb24uCgoJCQkkbWl4aW5zX2xlbiA9IGNvdW50KCRtaXhpbnMpOwoJCQlmb3IoICRtID0gMDsgJG0gPCAkbWl4aW5zX2xlbjsgJG0rKyApewoJCQkJJG1peGluID0gJG1peGluc1skbV07CgoJCQkJaWYoICR0aGlzLT5Jc1JlY3Vyc2l2ZSggJGVudiwgJG1peGluICkgKXsKCQkJCQljb250aW51ZTsKCQkJCX0KCgkJCQlpZiggJG1peGluLT5tYXRjaEFyZ3MoJGFyZ3MsICRlbnYpICl7CgoJCQkJCSRjYW5kaWRhdGUgPSBhcnJheSgnbWl4aW4nID0+ICRtaXhpbiwgJ2dyb3VwJyA9PiAkZGVmTm9uZSk7CgoJCQkJCWlmKCAkbWl4aW4gaW5zdGFuY2VvZiBMZXNzX1RyZWVfUnVsZXNldCApewoKCQkJCQkJZm9yKCAkZiA9IDA7ICRmIDwgMjsgJGYrKyApewoJCQkJCQkJTGVzc19UcmVlX0RlZmF1bHRGdW5jOjp2YWx1ZSgkZik7CgkJCQkJCQkkY29uZGl0aW9uUmVzdWx0WyRmXSA9ICRtaXhpbi0+bWF0Y2hDb25kaXRpb24oICRhcmdzLCAkZW52KTsKCQkJCQkJfQoJCQkJCQlpZiggJGNvbmRpdGlvblJlc3VsdFswXSB8fCAkY29uZGl0aW9uUmVzdWx0WzFdICl7CgkJCQkJCQlpZiggJGNvbmRpdGlvblJlc3VsdFswXSAhPSAkY29uZGl0aW9uUmVzdWx0WzFdICl7CgkJCQkJCQkJJGNhbmRpZGF0ZVsnZ3JvdXAnXSA9ICRjb25kaXRpb25SZXN1bHRbMV0gPyAkZGVmVHJ1ZSA6ICRkZWZGYWxzZTsKCQkJCQkJCX0KCgkJCQkJCQkkY2FuZGlkYXRlc1tdID0gJGNhbmRpZGF0ZTsKCQkJCQkJfQoJCQkJCX1lbHNlewoJCQkJCQkkY2FuZGlkYXRlc1tdID0gJGNhbmRpZGF0ZTsKCQkJCQl9CgoJCQkJCSRtYXRjaCA9IHRydWU7CgkJCQl9CgkJCX0KCgkJCUxlc3NfVHJlZV9EZWZhdWx0RnVuYzo6cmVzZXQoKTsKCgoJCQkkY291bnQgPSBhcnJheSgwLCAwLCAwKTsKCQkJZm9yKCAkbSA9IDA7ICRtIDwgY291bnQoJGNhbmRpZGF0ZXMpOyAkbSsrICl7CgkJCQkkY291bnRbICRjYW5kaWRhdGVzWyRtXVsnZ3JvdXAnXSBdKys7CgkJCX0KCgkJCWlmKCAkY291bnRbJGRlZk5vbmVdID4gMCApewoJCQkJJGRlZmF1bHRSZXN1bHQgPSAkZGVmRmFsc2U7CgkJCX0gZWxzZSB7CgkJCQkkZGVmYXVsdFJlc3VsdCA9ICRkZWZUcnVlOwoJCQkJaWYoICgkY291bnRbJGRlZlRydWVdICsgJGNvdW50WyRkZWZGYWxzZV0pID4gMSApewoJCQkJCXRocm93IG5ldyBFeGNlcHRpb24oICdBbWJpZ3VvdXMgdXNlIG9mIGBkZWZhdWx0KClgIGZvdW5kIHdoZW4gbWF0Y2hpbmcgZm9yIGAnIC4gJHRoaXMtPmZvcm1hdCgkYXJncykgLiAnYCcgKTsKCQkJCX0KCQkJfQoKCgkJCSRjYW5kaWRhdGVzX2xlbmd0aCA9IGNvdW50KCRjYW5kaWRhdGVzKTsKCQkJJGxlbmd0aF8xID0gKCRjYW5kaWRhdGVzX2xlbmd0aCA9PSAxKTsKCgkJCWZvciggJG0gPSAwOyAkbSA8ICRjYW5kaWRhdGVzX2xlbmd0aDsgJG0rKyl7CgkJCQkkY2FuZGlkYXRlID0gJGNhbmRpZGF0ZXNbJG1dWydncm91cCddOwoJCQkJaWYoICgkY2FuZGlkYXRlID09PSAkZGVmTm9uZSkgfHwgKCRjYW5kaWRhdGUgPT09ICRkZWZhdWx0UmVzdWx0KSApewoJCQkJCXRyeXsKCQkJCQkJJG1peGluID0gJGNhbmRpZGF0ZXNbJG1dWydtaXhpbiddOwoJCQkJCQlpZiggISgkbWl4aW4gaW5zdGFuY2VvZiBMZXNzX1RyZWVfTWl4aW5fRGVmaW5pdGlvbikgKXsKCQkJCQkJCSRtaXhpbiA9IG5ldyBMZXNzX1RyZWVfTWl4aW5fRGVmaW5pdGlvbignJywgYXJyYXkoKSwgJG1peGluLT5ydWxlcywgbnVsbCwgZmFsc2UpOwoJCQkJCQkJJG1peGluLT5vcmlnaW5hbFJ1bGVzZXQgPSAkbWl4aW5zWyRtXS0+b3JpZ2luYWxSdWxlc2V0OwoJCQkJCQl9CgkJCQkJCSRydWxlcyA9IGFycmF5X21lcmdlKCRydWxlcywgJG1peGluLT5ldmFsQ2FsbCgkZW52LCAkYXJncywgJHRoaXMtPmltcG9ydGFudCktPnJ1bGVzKTsKCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCQkJCQkJLy90aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJGUtPmdldE1lc3NhZ2UoKSwgJGUtPmluZGV4LCBudWxsLCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydmaWxlbmFtZSddKTsKCQkJCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCRlLT5nZXRNZXNzYWdlKCksIG51bGwsIG51bGwsICR0aGlzLT5jdXJyZW50RmlsZUluZm8pOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJaWYoICRtYXRjaCApewoJCQkJaWYoICEkdGhpcy0+Y3VycmVudEZpbGVJbmZvIHx8ICFpc3NldCgkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydyZWZlcmVuY2UnXSkgfHwgISR0aGlzLT5jdXJyZW50RmlsZUluZm9bJ3JlZmVyZW5jZSddICl7CgkJCQkJTGVzc19UcmVlOjpSZWZlcmVuY2VkQXJyYXkoJHJ1bGVzKTsKCQkJCX0KCgkJCQlyZXR1cm4gJHJ1bGVzOwoJCQl9CgkJfQoKCQlpZiggJGlzT25lRm91bmQgKXsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCdObyBtYXRjaGluZyBkZWZpbml0aW9uIHdhcyBmb3VuZCBmb3IgYCcuJHRoaXMtPkZvcm1hdCggJGFyZ3MgKS4nYCcsIG51bGwsICR0aGlzLT5pbmRleCwgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyk7CgoJCX1lbHNlewoJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIodHJpbSgkdGhpcy0+c2VsZWN0b3ItPnRvQ1NTKCkpIC4gIiBpcyB1bmRlZmluZWQgaW4gIi4kdGhpcy0+Y3VycmVudEZpbGVJbmZvWydmaWxlbmFtZSddLCBudWxsLCAkdGhpcy0+aW5kZXgpOwoJCX0KCgl9CgoJLyoqCgkgKiBGb3JtYXQgdGhlIGFyZ3MgZm9yIHVzZSBpbiBleGNlcHRpb24gbWVzc2FnZXMKCSAqCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gRm9ybWF0KCRhcmdzKXsKCQkkbWVzc2FnZSA9IGFycmF5KCk7CgkJaWYoICRhcmdzICl7CgkJCWZvcmVhY2goJGFyZ3MgYXMgJGEpewoJCQkJJGFyZ1ZhbHVlID0gJyc7CgkJCQlpZiggJGFbJ25hbWUnXSApewoJCQkJCSRhcmdWYWx1ZSAuPSAkYVsnbmFtZSddIC4gJzonOwoJCQkJfQoJCQkJaWYoIGlzX29iamVjdCgkYVsndmFsdWUnXSkgKXsKCQkJCQkkYXJnVmFsdWUgLj0gJGFbJ3ZhbHVlJ10tPnRvQ1NTKCk7CgkJCQl9ZWxzZXsKCQkJCQkkYXJnVmFsdWUgLj0gJz8/Pyc7CgkJCQl9CgkJCQkkbWVzc2FnZVtdID0gJGFyZ1ZhbHVlOwoJCQl9CgkJfQoJCXJldHVybiBpbXBsb2RlKCcsICcsJG1lc3NhZ2UpOwoJfQoKCgkvKioKCSAqIEFyZSB3ZSBpbiBhIHJlY3Vyc2l2ZSBtaXhpbiBjYWxsPwoJICoKCSAqIEByZXR1cm4gYm9vbAoJICovCglwcml2YXRlIGZ1bmN0aW9uIElzUmVjdXJzaXZlKCAkZW52LCAkbWl4aW4gKXsKCgkJZm9yZWFjaCgkZW52LT5mcmFtZXMgYXMgJHJlY3VyX2ZyYW1lKXsKCQkJaWYoICEoJG1peGluIGluc3RhbmNlb2YgTGVzc19UcmVlX01peGluX0RlZmluaXRpb24pICl7CgoJCQkJaWYoICRtaXhpbiA9PT0gJHJlY3VyX2ZyYW1lICl7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgoJCQkJaWYoIGlzc2V0KCRyZWN1cl9mcmFtZS0+b3JpZ2luYWxSdWxlc2V0KSAmJiAkbWl4aW4tPnJ1bGVzZXRfaWQgPT09ICRyZWN1cl9mcmFtZS0+b3JpZ2luYWxSdWxlc2V0ICl7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiBmYWxzZTsKCX0KCn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Mixin/Definition.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIExlc3NfVHJlZV9NaXhpbl9EZWZpbml0aW9uIGV4dGVuZHMgTGVzc19UcmVlX1J1bGVzZXR7CglwdWJsaWMgJG5hbWU7CglwdWJsaWMgJHNlbGVjdG9yczsKCXB1YmxpYyAkcGFyYW1zOwoJcHVibGljICRhcml0eQkJPSAwOwoJcHVibGljICRydWxlczsKCXB1YmxpYyAkbG9va3VwcwkJPSBhcnJheSgpOwoJcHVibGljICRyZXF1aXJlZAk9IDA7CglwdWJsaWMgJGZyYW1lcwkJPSBhcnJheSgpOwoJcHVibGljICRjb25kaXRpb247CglwdWJsaWMgJHZhcmlhZGljOwoJcHVibGljICR0eXBlCQk9ICdNaXhpbkRlZmluaXRpb24nOwoKCgkvLyBsZXNzLmpzIDogL2xpYi9sZXNzL3RyZWUvbWl4aW4uanMgOiB0cmVlLm1peGluLkRlZmluaXRpb24KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJHBhcmFtcywgJHJ1bGVzLCAkY29uZGl0aW9uLCAkdmFyaWFkaWMgPSBmYWxzZSwgJGZyYW1lcyA9IGFycmF5KCkgKXsKCQkkdGhpcy0+bmFtZSA9ICRuYW1lOwoJCSR0aGlzLT5zZWxlY3RvcnMgPSBhcnJheShuZXcgTGVzc19UcmVlX1NlbGVjdG9yKGFycmF5KCBuZXcgTGVzc19UcmVlX0VsZW1lbnQobnVsbCwgJG5hbWUpKSkpOwoKCQkkdGhpcy0+cGFyYW1zID0gJHBhcmFtczsKCQkkdGhpcy0+Y29uZGl0aW9uID0gJGNvbmRpdGlvbjsKCQkkdGhpcy0+dmFyaWFkaWMgPSAkdmFyaWFkaWM7CgkJJHRoaXMtPnJ1bGVzID0gJHJ1bGVzOwoKCQlpZiggJHBhcmFtcyApewoJCQkkdGhpcy0+YXJpdHkgPSBjb3VudCgkcGFyYW1zKTsKCQkJZm9yZWFjaCggJHBhcmFtcyBhcyAkcCApewoJCQkJaWYgKCEgaXNzZXQoJHBbJ25hbWUnXSkgfHwgKCRwWyduYW1lJ10gJiYgIWlzc2V0KCRwWyd2YWx1ZSddKSkpIHsKCQkJCQkkdGhpcy0+cmVxdWlyZWQrKzsKCQkJCX0KCQkJfQoJCX0KCgkJJHRoaXMtPmZyYW1lcyA9ICRmcmFtZXM7CgkJJHRoaXMtPlNldFJ1bGVzZXRJbmRleCgpOwoJfQoKCgoJLy9mdW5jdGlvbiBhY2NlcHQoICR2aXNpdG9yICl7CgkvLwkkdGhpcy0+cGFyYW1zID0gJHZpc2l0b3ItPnZpc2l0KCR0aGlzLT5wYXJhbXMpOwoJLy8JJHRoaXMtPnJ1bGVzID0gJHZpc2l0b3ItPnZpc2l0KCR0aGlzLT5ydWxlcyk7CgkvLwkkdGhpcy0+Y29uZGl0aW9uID0gJHZpc2l0b3ItPnZpc2l0KCR0aGlzLT5jb25kaXRpb24pOwoJLy99CgoKCXB1YmxpYyBmdW5jdGlvbiB0b0NTUygpewoJCXJldHVybiAnJzsKCX0KCgkvLyBsZXNzLmpzIDogL2xpYi9sZXNzL3RyZWUvbWl4aW4uanMgOiB0cmVlLm1peGluLkRlZmluaXRpb24uZXZhbFBhcmFtcwoJcHVibGljIGZ1bmN0aW9uIGNvbXBpbGVQYXJhbXMoJGVudiwgJG1peGluRnJhbWVzLCAkYXJncyA9IGFycmF5KCkgLCAmJGV2YWxkQXJndW1lbnRzID0gYXJyYXkoKSApewoJCSRmcmFtZSA9IG5ldyBMZXNzX1RyZWVfUnVsZXNldChudWxsLCBhcnJheSgpKTsKCQkkcGFyYW1zID0gJHRoaXMtPnBhcmFtczsKCQkkbWl4aW5FbnYgPSBudWxsOwoJCSRhcmdzTGVuZ3RoID0gMDsKCgkJaWYoICRhcmdzICl7CgkJCSRhcmdzTGVuZ3RoID0gY291bnQoJGFyZ3MpOwoJCQlmb3IoJGkgPSAwOyAkaSA8ICRhcmdzTGVuZ3RoOyAkaSsrICl7CgkJCQkkYXJnID0gJGFyZ3NbJGldOwoKCQkJCWlmKCAkYXJnICYmICRhcmdbJ25hbWUnXSApewoJCQkJCSRpc05hbWVkRm91bmQgPSBmYWxzZTsKCgkJCQkJZm9yZWFjaCgkcGFyYW1zIGFzICRqID0+ICRwYXJhbSl7CgkJCQkJCWlmKCAhaXNzZXQoJGV2YWxkQXJndW1lbnRzWyRqXSkgJiYgJGFyZ1snbmFtZSddID09PSAkcGFyYW1zWyRqXVsnbmFtZSddKSB7CgkJCQkJCQkkZXZhbGRBcmd1bWVudHNbJGpdID0gJGFyZ1sndmFsdWUnXS0+Y29tcGlsZSgkZW52KTsKCQkJCQkJCWFycmF5X3Vuc2hpZnQoJGZyYW1lLT5ydWxlcywgbmV3IExlc3NfVHJlZV9SdWxlKCAkYXJnWyduYW1lJ10sICRhcmdbJ3ZhbHVlJ10tPmNvbXBpbGUoJGVudikgKSApOwoJCQkJCQkJJGlzTmFtZWRGb3VuZCA9IHRydWU7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoJGlzTmFtZWRGb3VuZCkgewoJCQkJCQlhcnJheV9zcGxpY2UoJGFyZ3MsICRpLCAxKTsKCQkJCQkJJGktLTsKCQkJCQkJJGFyZ3NMZW5ndGgtLTsKCQkJCQkJY29udGludWU7CgkJCQkJfSBlbHNlIHsKCQkJCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJOYW1lZCBhcmd1bWVudCBmb3IgIiAuICR0aGlzLT5uYW1lIC4nICcuJGFyZ3NbJGldWyduYW1lJ10gLiAnIG5vdCBmb3VuZCcpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJJGFyZ0luZGV4ID0gMDsKCQlmb3JlYWNoKCRwYXJhbXMgYXMgJGkgPT4gJHBhcmFtKXsKCgkJCWlmICggaXNzZXQoJGV2YWxkQXJndW1lbnRzWyRpXSkgKXsgY29udGludWU7IH0KCgkJCSRhcmcgPSBudWxsOwoJCQlpZiggaXNzZXQoJGFyZ3NbJGFyZ0luZGV4XSkgKXsKCQkJCSRhcmcgPSAkYXJnc1skYXJnSW5kZXhdOwoJCQl9CgoJCQlpZiAoaXNzZXQoJHBhcmFtWyduYW1lJ10pICYmICRwYXJhbVsnbmFtZSddKSB7CgoJCQkJaWYoIGlzc2V0KCRwYXJhbVsndmFyaWFkaWMnXSkgKXsKCQkJCQkkdmFyYXJncyA9IGFycmF5KCk7CgkJCQkJZm9yICgkaiA9ICRhcmdJbmRleDsgJGogPCAkYXJnc0xlbmd0aDsgJGorKykgewoJCQkJCQkkdmFyYXJnc1tdID0gJGFyZ3NbJGpdWyd2YWx1ZSddLT5jb21waWxlKCRlbnYpOwoJCQkJCX0KCQkJCQkkZXhwcmVzc2lvbiA9IG5ldyBMZXNzX1RyZWVfRXhwcmVzc2lvbigkdmFyYXJncyk7CgkJCQkJYXJyYXlfdW5zaGlmdCgkZnJhbWUtPnJ1bGVzLCBuZXcgTGVzc19UcmVlX1J1bGUoJHBhcmFtWyduYW1lJ10sICRleHByZXNzaW9uLT5jb21waWxlKCRlbnYpKSk7CgkJCQl9ZWxzZXsKCQkJCQkkdmFsID0gKCRhcmcgJiYgJGFyZ1sndmFsdWUnXSkgPyAkYXJnWyd2YWx1ZSddIDogZmFsc2U7CgoJCQkJCWlmICgkdmFsKSB7CgkJCQkJCSR2YWwgPSAkdmFsLT5jb21waWxlKCRlbnYpOwoJCQkJCX0gZWxzZSBpZiAoIGlzc2V0KCRwYXJhbVsndmFsdWUnXSkgKSB7CgoJCQkJCQlpZiggISRtaXhpbkVudiApewoJCQkJCQkJJG1peGluRW52ID0gbmV3IExlc3NfRW52aXJvbm1lbnQoKTsKCQkJCQkJCSRtaXhpbkVudi0+ZnJhbWVzID0gYXJyYXlfbWVyZ2UoIGFycmF5KCRmcmFtZSksICRtaXhpbkZyYW1lcyk7CgkJCQkJCX0KCgkJCQkJCSR2YWwgPSAkcGFyYW1bJ3ZhbHVlJ10tPmNvbXBpbGUoJG1peGluRW52KTsKCQkJCQkJJGZyYW1lLT5yZXNldENhY2hlKCk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciAiIC4gJHRoaXMtPm5hbWUgLiAiICgiIC4gJGFyZ3NMZW5ndGggLiAnIGZvciAnIC4gJHRoaXMtPmFyaXR5IC4gIikiKTsKCQkJCQl9CgoJCQkJCWFycmF5X3Vuc2hpZnQoJGZyYW1lLT5ydWxlcywgbmV3IExlc3NfVHJlZV9SdWxlKCRwYXJhbVsnbmFtZSddLCAkdmFsKSk7CgkJCQkJJGV2YWxkQXJndW1lbnRzWyRpXSA9ICR2YWw7CgkJCQl9CgkJCX0KCgkJCWlmICggaXNzZXQoJHBhcmFtWyd2YXJpYWRpYyddKSAmJiAkYXJncykgewoJCQkJZm9yICgkaiA9ICRhcmdJbmRleDsgJGogPCAkYXJnc0xlbmd0aDsgJGorKykgewoJCQkJCSRldmFsZEFyZ3VtZW50c1skal0gPSAkYXJnc1skal1bJ3ZhbHVlJ10tPmNvbXBpbGUoJGVudik7CgkJCQl9CgkJCX0KCQkJJGFyZ0luZGV4Kys7CgkJfQoKCQlrc29ydCgkZXZhbGRBcmd1bWVudHMpOwoJCSRldmFsZEFyZ3VtZW50cyA9IGFycmF5X3ZhbHVlcygkZXZhbGRBcmd1bWVudHMpOwoKCQlyZXR1cm4gJGZyYW1lOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCRlbnYpIHsKCQlpZiggJHRoaXMtPmZyYW1lcyApewoJCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9NaXhpbl9EZWZpbml0aW9uKCR0aGlzLT5uYW1lLCAkdGhpcy0+cGFyYW1zLCAkdGhpcy0+cnVsZXMsICR0aGlzLT5jb25kaXRpb24sICR0aGlzLT52YXJpYWRpYywgJHRoaXMtPmZyYW1lcyApOwoJCX0KCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9NaXhpbl9EZWZpbml0aW9uKCR0aGlzLT5uYW1lLCAkdGhpcy0+cGFyYW1zLCAkdGhpcy0+cnVsZXMsICR0aGlzLT5jb25kaXRpb24sICR0aGlzLT52YXJpYWRpYywgJGVudi0+ZnJhbWVzICk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGV2YWxDYWxsKCRlbnYsICRhcmdzID0gTlVMTCwgJGltcG9ydGFudCA9IE5VTEwpIHsKCgkJTGVzc19FbnZpcm9ubWVudDo6JG1peGluX3N0YWNrKys7CgoJCSRfYXJndW1lbnRzID0gYXJyYXkoKTsKCgkJaWYoICR0aGlzLT5mcmFtZXMgKXsKCQkJJG1peGluRnJhbWVzID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmZyYW1lcywgJGVudi0+ZnJhbWVzKTsKCQl9ZWxzZXsKCQkJJG1peGluRnJhbWVzID0gJGVudi0+ZnJhbWVzOwoJCX0KCgkJJGZyYW1lID0gJHRoaXMtPmNvbXBpbGVQYXJhbXMoJGVudiwgJG1peGluRnJhbWVzLCAkYXJncywgJF9hcmd1bWVudHMpOwoKCQkkZXggPSBuZXcgTGVzc19UcmVlX0V4cHJlc3Npb24oJF9hcmd1bWVudHMpOwoJCWFycmF5X3Vuc2hpZnQoJGZyYW1lLT5ydWxlcywgbmV3IExlc3NfVHJlZV9SdWxlKCdAYXJndW1lbnRzJywgJGV4LT5jb21waWxlKCRlbnYpKSk7CgoKCQkkcnVsZXNldCA9IG5ldyBMZXNzX1RyZWVfUnVsZXNldChudWxsLCAkdGhpcy0+cnVsZXMpOwoJCSRydWxlc2V0LT5vcmlnaW5hbFJ1bGVzZXQgPSAkdGhpcy0+cnVsZXNldF9pZDsKCgoJCSRydWxlU2V0RW52ID0gbmV3IExlc3NfRW52aXJvbm1lbnQoKTsKCQkkcnVsZVNldEVudi0+ZnJhbWVzID0gYXJyYXlfbWVyZ2UoIGFycmF5KCR0aGlzLCAkZnJhbWUpLCAkbWl4aW5GcmFtZXMgKTsKCQkkcnVsZXNldCA9ICRydWxlc2V0LT5jb21waWxlKCAkcnVsZVNldEVudiApOwoKCQlpZiggJGltcG9ydGFudCApewoJCQkkcnVsZXNldCA9ICRydWxlc2V0LT5tYWtlSW1wb3J0YW50KCk7CgkJfQoKCQlMZXNzX0Vudmlyb25tZW50OjokbWl4aW5fc3RhY2stLTsKCgkJcmV0dXJuICRydWxlc2V0OwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gbWF0Y2hDb25kaXRpb24oJGFyZ3MsICRlbnYpIHsKCgkJaWYoICEkdGhpcy0+Y29uZGl0aW9uICl7CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJLy8gc2V0IGFycmF5IHRvIHByZXZlbnQgZXJyb3Igb24gYXJyYXlfbWVyZ2UKCQlpZighaXNfYXJyYXkoJHRoaXMtPmZyYW1lcykpIHsKICAgICAgICAgICAgICR0aGlzLT5mcmFtZXMgPSBhcnJheSgpOwogICAgICAgIH0KCgkJJGZyYW1lID0gJHRoaXMtPmNvbXBpbGVQYXJhbXMoJGVudiwgYXJyYXlfbWVyZ2UoJHRoaXMtPmZyYW1lcywkZW52LT5mcmFtZXMpLCAkYXJncyApOwoKCQkkY29tcGlsZV9lbnYgPSBuZXcgTGVzc19FbnZpcm9ubWVudCgpOwoJCSRjb21waWxlX2Vudi0+ZnJhbWVzID0gYXJyYXlfbWVyZ2UoCgkJCQlhcnJheSgkZnJhbWUpCQkvLyB0aGUgcGFyYW1ldGVyIHZhcmlhYmxlcwoJCQkJLCAkdGhpcy0+ZnJhbWVzCQkvLyB0aGUgcGFyZW50IG5hbWVzcGFjZS9taXhpbiBmcmFtZXMKCQkJCSwgJGVudi0+ZnJhbWVzCQkvLyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBmcmFtZXMKCQkJKTsKCgkJJGNvbXBpbGVfZW52LT5mdW5jdGlvbnMgPSAkZW52LT5mdW5jdGlvbnM7CgoJCXJldHVybiAoYm9vbCkkdGhpcy0+Y29uZGl0aW9uLT5jb21waWxlKCRjb21waWxlX2Vudik7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG1hdGNoQXJncygkYXJncywgJGVudiA9IE5VTEwpewoJCSRhcmdzTGVuZ3RoID0gY291bnQoJGFyZ3MpOwoKCQlpZiggISR0aGlzLT52YXJpYWRpYyApewoJCQlpZiggJGFyZ3NMZW5ndGggPCAkdGhpcy0+cmVxdWlyZWQgKXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQlpZiggJGFyZ3NMZW5ndGggPiBjb3VudCgkdGhpcy0+cGFyYW1zKSApewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfWVsc2V7CgkJCWlmKCAkYXJnc0xlbmd0aCA8ICgkdGhpcy0+cmVxdWlyZWQgLSAxKSl7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgoJCSRsZW4gPSBtaW4oJGFyZ3NMZW5ndGgsICR0aGlzLT5hcml0eSk7CgoJCWZvciggJGkgPSAwOyAkaSA8ICRsZW47ICRpKysgKXsKCQkJaWYoICFpc3NldCgkdGhpcy0+cGFyYW1zWyRpXVsnbmFtZSddKSAmJiAhaXNzZXQoJHRoaXMtPnBhcmFtc1skaV1bJ3ZhcmlhZGljJ10pICl7CgkJCQlpZiggJGFyZ3NbJGldWyd2YWx1ZSddLT5jb21waWxlKCRlbnYpLT50b0NTUygpICE9ICR0aGlzLT5wYXJhbXNbJGldWyd2YWx1ZSddLT5jb21waWxlKCRlbnYpLT50b0NTUygpICl7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Mixin/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/NameValue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBIHNpbXBsZSBjc3MgbmFtZS12YWx1ZSBwYWlyCiAqIGV4OiB3aWR0aDoxMDBweDsKICoKICogSW4gYm9vdHN0cmFwLCB0aGVyZSBhcmUgYWJvdXQgNjAwLTEsMDAwIHNpbXBsZSBuYW1lLXZhbHVlIHBhaXJzIChkZXBlbmRpbmcgb24gaG93IGZvcmdpdmluZyB0aGUgbWF0Y2ggaXMpIC12cy0gNiwwMjAgZHluYW1pYyBydWxlcyAoTGVzc19UcmVlX1J1bGUpCiAqIFVzaW5nIHRoZSBuYW1lLXZhbHVlIG9iamVjdCBjYW4gc3BlZWQgdXAgYm9vdHN0cmFwIGNvbXBpbGF0aW9uIHNsaWdodGx5LCBidXQgaXQgYnJlYWtzIGNvbG9yIGtleXdvcmQgaW50ZXJwcmV0YXRpb246IGNvbG9yOnJlZCAtPiBjb2xvcjojRkYwMDAwOwogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9OYW1lVmFsdWUgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHVibGljICRuYW1lOwoJcHVibGljICR2YWx1ZTsKCXB1YmxpYyAkaW5kZXg7CglwdWJsaWMgJGN1cnJlbnRGaWxlSW5mbzsKCXB1YmxpYyAkdHlwZSA9ICdOYW1lVmFsdWUnOwoJcHVibGljICRpbXBvcnRhbnQgPSAnJzsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUsICR2YWx1ZSA9IG51bGwsICRpbmRleCA9IG51bGwsICRjdXJyZW50RmlsZUluZm8gPSBudWxsICl7CgkJJHRoaXMtPm5hbWUgPSAkbmFtZTsKCQkkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CgkJJHRoaXMtPmluZGV4ID0gJGluZGV4OwoJCSR0aGlzLT5jdXJyZW50RmlsZUluZm8gPSAkY3VycmVudEZpbGVJbmZvOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCgkJJG91dHB1dC0+YWRkKAoJCQkkdGhpcy0+bmFtZQoJCQkuIExlc3NfRW52aXJvbm1lbnQ6OiRfb3V0cHV0TWFwWyc6ICddCgkJCS4gJHRoaXMtPnZhbHVlCgkJCS4gJHRoaXMtPmltcG9ydGFudAoJCQkuICgoKExlc3NfRW52aXJvbm1lbnQ6OiRsYXN0UnVsZSAmJiBMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2NvbXByZXNzJ10pKSA/ICIiIDogIjsiKQoJCQksICR0aGlzLT5jdXJyZW50RmlsZUluZm8sICR0aGlzLT5pbmRleCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUgKCRlbnYpewoJCXJldHVybiAkdGhpczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbWFrZUltcG9ydGFudCgpewoJCSRuZXcgPSBuZXcgTGVzc19UcmVlX05hbWVWYWx1ZSgkdGhpcy0+bmFtZSwgJHRoaXMtPnZhbHVlLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8pOwoJCSRuZXctPmltcG9ydGFudCA9ICcgIWltcG9ydGFudCc7CgkJcmV0dXJuICRuZXc7Cgl9CgoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Negative.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBOZWdhdGl2ZQogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9OZWdhdGl2ZSBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJHZhbHVlOwoJcHVibGljICR0eXBlID0gJ05lZ2F0aXZlJzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5vZGUpewoJCSR0aGlzLT52YWx1ZSA9ICRub2RlOwoJfQoKCS8vZnVuY3Rpb24gYWNjZXB0KCR2aXNpdG9yKSB7CgkvLwkkdGhpcy0+dmFsdWUgPSAkdmlzaXRvci0+dmlzaXQoJHRoaXMtPnZhbHVlKTsKCS8vfQoKICAgIC8qKgogICAgICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgkJJG91dHB1dC0+YWRkKCAnLScgKTsKCQkkdGhpcy0+dmFsdWUtPmdlbkNTUyggJG91dHB1dCApOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCRlbnYpIHsKCQlpZiggTGVzc19FbnZpcm9ubWVudDo6aXNNYXRoT24oKSApewoJCQkkcmV0ID0gbmV3IExlc3NfVHJlZV9PcGVyYXRpb24oJyonLCBhcnJheSggbmV3IExlc3NfVHJlZV9EaW1lbnNpb24oLTEpLCAkdGhpcy0+dmFsdWUgKSApOwoJCQlyZXR1cm4gJHJldC0+Y29tcGlsZSgkZW52KTsKCQl9CgkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfTmVnYXRpdmUoICR0aGlzLT52YWx1ZS0+Y29tcGlsZSgkZW52KSApOwoJfQp9]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Operation.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPcGVyYXRpb24KICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfT3BlcmF0aW9uIGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAkb3A7CglwdWJsaWMgJG9wZXJhbmRzOwoJcHVibGljICRpc1NwYWNlZDsKCXB1YmxpYyAkdHlwZSA9ICdPcGVyYXRpb24nOwoKCS8qKgoJICogQHBhcmFtIHN0cmluZyAkb3AKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvcCwgJG9wZXJhbmRzLCAkaXNTcGFjZWQgPSBmYWxzZSl7CgkJJHRoaXMtPm9wID0gdHJpbSgkb3ApOwoJCSR0aGlzLT5vcGVyYW5kcyA9ICRvcGVyYW5kczsKCQkkdGhpcy0+aXNTcGFjZWQgPSAkaXNTcGFjZWQ7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGFjY2VwdCgkdmlzaXRvcikgewoJCSR0aGlzLT5vcGVyYW5kcyA9ICR2aXNpdG9yLT52aXNpdEFycmF5KCR0aGlzLT5vcGVyYW5kcyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudil7CgkJJGEgPSAkdGhpcy0+b3BlcmFuZHNbMF0tPmNvbXBpbGUoJGVudik7CgkJJGIgPSAkdGhpcy0+b3BlcmFuZHNbMV0tPmNvbXBpbGUoJGVudik7CgoKCQlpZiggTGVzc19FbnZpcm9ubWVudDo6aXNNYXRoT24oKSApewoKCQkJaWYoICRhIGluc3RhbmNlb2YgTGVzc19UcmVlX0RpbWVuc2lvbiAmJiAkYiBpbnN0YW5jZW9mIExlc3NfVHJlZV9Db2xvciApewoJCQkJJGEgPSAkYS0+dG9Db2xvcigpOwoKCQkJfWVsc2VpZiggJGIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGltZW5zaW9uICYmICRhIGluc3RhbmNlb2YgTGVzc19UcmVlX0NvbG9yICl7CgkJCQkkYiA9ICRiLT50b0NvbG9yKCk7CgoJCQl9CgoJCQlpZiggIW1ldGhvZF9leGlzdHMoJGEsJ29wZXJhdGUnKSApewoJCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJPcGVyYXRpb24gb24gYW4gaW52YWxpZCB0eXBlIik7CgkJCX0KCgkJCXJldHVybiAkYS0+b3BlcmF0ZSggJHRoaXMtPm9wLCAkYik7CgkJfQoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9PcGVyYXRpb24oJHRoaXMtPm9wLCBhcnJheSgkYSwgJGIpLCAkdGhpcy0+aXNTcGFjZWQgKTsKCX0KCgogICAgLyoqCiAgICAgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCQkkdGhpcy0+b3BlcmFuZHNbMF0tPmdlbkNTUyggJG91dHB1dCApOwoJCWlmKCAkdGhpcy0+aXNTcGFjZWQgKXsKCQkJJG91dHB1dC0+YWRkKCAiICIgKTsKCQl9CgkJJG91dHB1dC0+YWRkKCAkdGhpcy0+b3AgKTsKCQlpZiggJHRoaXMtPmlzU3BhY2VkICl7CgkJCSRvdXRwdXQtPmFkZCggJyAnICk7CgkJfQoJCSR0aGlzLT5vcGVyYW5kc1sxXS0+Z2VuQ1NTKCAkb3V0cHV0ICk7Cgl9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Paren.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBQYXJlbgogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9QYXJlbiBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJHZhbHVlOwoJcHVibGljICR0eXBlID0gJ1BhcmVuJzsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKSB7CgkJJHRoaXMtPnZhbHVlID0gJHZhbHVlOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhY2NlcHQoJHZpc2l0b3IpewoJCSR0aGlzLT52YWx1ZSA9ICR2aXNpdG9yLT52aXNpdE9iaigkdGhpcy0+dmFsdWUpOwoJfQoKICAgIC8qKgogICAgICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgkJJG91dHB1dC0+YWRkKCAnKCcgKTsKCQkkdGhpcy0+dmFsdWUtPmdlbkNTUyggJG91dHB1dCApOwoJCSRvdXRwdXQtPmFkZCggJyknICk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudikgewoJCXJldHVybiBuZXcgTGVzc19UcmVlX1BhcmVuKCR0aGlzLT52YWx1ZS0+Y29tcGlsZSgkZW52KSk7Cgl9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Quoted.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBRdW90ZWQKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfUXVvdGVkIGV4dGVuZHMgTGVzc19UcmVlewoJcHVibGljICRlc2NhcGVkOwoJcHVibGljICR2YWx1ZTsKCXB1YmxpYyAkcXVvdGU7CglwdWJsaWMgJGluZGV4OwoJcHVibGljICRjdXJyZW50RmlsZUluZm87CglwdWJsaWMgJHR5cGUgPSAnUXVvdGVkJzsKCgkvKioKCSAqIEBwYXJhbSBzdHJpbmcgJHN0cgoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0ciwgJGNvbnRlbnQgPSAnJywgJGVzY2FwZWQgPSBmYWxzZSwgJGluZGV4ID0gZmFsc2UsICRjdXJyZW50RmlsZUluZm8gPSBudWxsICl7CgkJJHRoaXMtPmVzY2FwZWQgPSAkZXNjYXBlZDsKCQkkdGhpcy0+dmFsdWUgPSAkY29udGVudDsKCQlpZiggJHN0ciApewoJCQkkdGhpcy0+cXVvdGUgPSAkc3RyWzBdOwoJCX0KCQkkdGhpcy0+aW5kZXggPSAkaW5kZXg7CgkJJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyA9ICRjdXJyZW50RmlsZUluZm87Cgl9CgogICAgLyoqCiAgICAgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCQlpZiggISR0aGlzLT5lc2NhcGVkICl7CgkJCSRvdXRwdXQtPmFkZCggJHRoaXMtPnF1b3RlLCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvLCAkdGhpcy0+aW5kZXggKTsKICAgICAgICB9CiAgICAgICAgJG91dHB1dC0+YWRkKCAkdGhpcy0+dmFsdWUgKTsKICAgICAgICBpZiggISR0aGlzLT5lc2NhcGVkICl7CgkJCSRvdXRwdXQtPmFkZCggJHRoaXMtPnF1b3RlICk7CiAgICAgICAgfQogICAgfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCRlbnYpewoKCQkkdmFsdWUgPSAkdGhpcy0+dmFsdWU7CgkJaWYoIHByZWdfbWF0Y2hfYWxsKCcvYChbXmBdKylgLycsICR0aGlzLT52YWx1ZSwgJG1hdGNoZXMpICl7CgkJCWZvcmVhY2goJG1hdGNoZXMgYXMgJGkgPT4gJG1hdGNoKXsKCQkJCSRqcyA9IG5ldyBMZXNzX1RyZWVfSmF2YVNjcmlwdCgkbWF0Y2hlc1sxXSwgJHRoaXMtPmluZGV4LCB0cnVlKTsKCQkJCSRqcyA9ICRqcy0+Y29tcGlsZSgpLT52YWx1ZTsKCQkJCSR2YWx1ZSA9IHN0cl9yZXBsYWNlKCRtYXRjaGVzWzBdWyRpXSwgJGpzLCAkdmFsdWUpOwoJCQl9CgkJfQoKCQlpZiggcHJlZ19tYXRjaF9hbGwoJy9AXHsoW1x3LV0rKVx9LycsJHZhbHVlLCRtYXRjaGVzKSApewoJCQlmb3JlYWNoKCRtYXRjaGVzWzFdIGFzICRpID0+ICRtYXRjaCl7CgkJCQkkdiA9IG5ldyBMZXNzX1RyZWVfVmFyaWFibGUoJ0AnIC4gJG1hdGNoLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8gKTsKCQkJCSR2ID0gJHYtPmNvbXBpbGUoJGVudik7CgkJCQkkdiA9ICgkdiBpbnN0YW5jZW9mIExlc3NfVHJlZV9RdW90ZWQpID8gJHYtPnZhbHVlIDogJHYtPnRvQ1NTKCk7CgkJCQkkdmFsdWUgPSBzdHJfcmVwbGFjZSgkbWF0Y2hlc1swXVskaV0sICR2LCAkdmFsdWUpOwoJCQl9CgkJfQoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9RdW90ZWQoJHRoaXMtPnF1b3RlIC4gJHZhbHVlIC4gJHRoaXMtPnF1b3RlLCAkdmFsdWUsICR0aGlzLT5lc2NhcGVkLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8pOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlKCR4KSB7CgoJCWlmKCAhTGVzc19QYXJzZXI6OmlzX21ldGhvZCgkeCwgJ3RvQ1NTJykgKXsKCQkJcmV0dXJuIC0xOwoJCX0KCgkJJGxlZnQgPSAkdGhpcy0+dG9DU1MoKTsKCQkkcmlnaHQgPSAkeC0+dG9DU1MoKTsKCgkJaWYgKCRsZWZ0ID09PSAkcmlnaHQpIHsKCQkJcmV0dXJuIDA7CgkJfQoKCQlyZXR1cm4gJGxlZnQgPCAkcmlnaHQgPyAtMSA6IDE7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Rule.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBSdWxlCiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX1J1bGUgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHVibGljICRuYW1lOwoJcHVibGljICR2YWx1ZTsKCXB1YmxpYyAkaW1wb3J0YW50OwoJcHVibGljICRtZXJnZTsKCXB1YmxpYyAkaW5kZXg7CglwdWJsaWMgJGlubGluZTsKCXB1YmxpYyAkdmFyaWFibGU7CglwdWJsaWMgJGN1cnJlbnRGaWxlSW5mbzsKCXB1YmxpYyAkdHlwZSA9ICdSdWxlJzsKCgkvKioKCSAqIEBwYXJhbSBzdHJpbmcgJGltcG9ydGFudAoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUsICR2YWx1ZSA9IG51bGwsICRpbXBvcnRhbnQgPSBudWxsLCAkbWVyZ2UgPSBudWxsLCAkaW5kZXggPSBudWxsLCAkY3VycmVudEZpbGVJbmZvID0gbnVsbCwgICRpbmxpbmUgPSBmYWxzZSl7CgkJJHRoaXMtPm5hbWUgPSAkbmFtZTsKCQkkdGhpcy0+dmFsdWUgPSAoJHZhbHVlIGluc3RhbmNlb2YgTGVzc19UcmVlX1ZhbHVlIHx8ICR2YWx1ZSBpbnN0YW5jZW9mIExlc3NfVHJlZV9SdWxlc2V0KSA/ICR2YWx1ZSA6IG5ldyBMZXNzX1RyZWVfVmFsdWUoYXJyYXkoJHZhbHVlKSk7CgkJJHRoaXMtPmltcG9ydGFudCA9ICRpbXBvcnRhbnQgPyAnICcgLiB0cmltKCRpbXBvcnRhbnQpIDogJyc7CgkJJHRoaXMtPm1lcmdlID0gJG1lcmdlOwoJCSR0aGlzLT5pbmRleCA9ICRpbmRleDsKCQkkdGhpcy0+Y3VycmVudEZpbGVJbmZvID0gJGN1cnJlbnRGaWxlSW5mbzsKCQkkdGhpcy0+aW5saW5lID0gJGlubGluZTsKCQkkdGhpcy0+dmFyaWFibGUgPSAoIGlzX3N0cmluZygkbmFtZSkgJiYgJG5hbWVbMF0gPT09ICdAJyk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGFjY2VwdCgkdmlzaXRvcikgewoJCSR0aGlzLT52YWx1ZSA9ICR2aXNpdG9yLT52aXNpdE9iaiggJHRoaXMtPnZhbHVlICk7Cgl9CgogICAgLyoqCiAgICAgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCgkJJG91dHB1dC0+YWRkKCAkdGhpcy0+bmFtZSAuIExlc3NfRW52aXJvbm1lbnQ6OiRfb3V0cHV0TWFwWyc6ICddLCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvLCAkdGhpcy0+aW5kZXgpOwoJCXRyeXsKCQkJJHRoaXMtPnZhbHVlLT5nZW5DU1MoICRvdXRwdXQpOwoKCQl9Y2F0Y2goIExlc3NfRXhjZXB0aW9uX1BhcnNlciAkZSApewoJCQkkZS0+aW5kZXggPSAkdGhpcy0+aW5kZXg7CgkJCSRlLT5jdXJyZW50RmlsZSA9ICR0aGlzLT5jdXJyZW50RmlsZUluZm87CgkJCXRocm93ICRlOwoJCX0KCQkkb3V0cHV0LT5hZGQoICR0aGlzLT5pbXBvcnRhbnQgLiAoKCR0aGlzLT5pbmxpbmUgfHwgKExlc3NfRW52aXJvbm1lbnQ6OiRsYXN0UnVsZSAmJiBMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2NvbXByZXNzJ10pKSA/ICIiIDogIjsiKSwgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbywgJHRoaXMtPmluZGV4KTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSAoJGVudil7CgoJCSRuYW1lID0gJHRoaXMtPm5hbWU7CgkJaWYoIGlzX2FycmF5KCRuYW1lKSApewoJCQkvLyBleHBhbmQgJ3ByaW1pdGl2ZScgbmFtZSBkaXJlY3RseSB0byBnZXQKCQkJLy8gdGhpbmdzIGZhc3RlciAofjEwJSBmb3IgYmVuY2htYXJrLmxlc3MpOgoJCQlpZiggY291bnQoJG5hbWUpID09PSAxICYmICRuYW1lWzBdIGluc3RhbmNlb2YgTGVzc19UcmVlX0tleXdvcmQgKXsKCQkJCSRuYW1lID0gJG5hbWVbMF0tPnZhbHVlOwoJCQl9ZWxzZXsKCQkJCSRuYW1lID0gJHRoaXMtPkNvbXBpbGVOYW1lKCRlbnYsJG5hbWUpOwoJCQl9CgkJfQoKCQkkc3RyaWN0TWF0aEJ5cGFzcyA9IExlc3NfUGFyc2VyOjokb3B0aW9uc1snc3RyaWN0TWF0aCddOwoJCWlmKCAkbmFtZSA9PT0gImZvbnQiICYmICFMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ3N0cmljdE1hdGgnXSApewoJCQlMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ3N0cmljdE1hdGgnXSA9IHRydWU7CgkJfQoKCQl0cnkgewoJCQkkZXZhbGRWYWx1ZSA9ICR0aGlzLT52YWx1ZS0+Y29tcGlsZSgkZW52KTsKCgkJCWlmKCAhJHRoaXMtPnZhcmlhYmxlICYmICRldmFsZFZhbHVlLT50eXBlID09PSAiRGV0YWNoZWRSdWxlc2V0IikgewoJCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJSdWxlc2V0cyBjYW5ub3QgYmUgZXZhbHVhdGVkIG9uIGEgcHJvcGVydHkuIiwgbnVsbCwgJHRoaXMtPmluZGV4LCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvKTsKCQkJfQoKCQkJaWYoIExlc3NfRW52aXJvbm1lbnQ6OiRtaXhpbl9zdGFjayApewoJCQkJJHJldHVybiA9IG5ldyBMZXNzX1RyZWVfUnVsZSgkbmFtZSwgJGV2YWxkVmFsdWUsICR0aGlzLT5pbXBvcnRhbnQsICR0aGlzLT5tZXJnZSwgJHRoaXMtPmluZGV4LCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvLCAkdGhpcy0+aW5saW5lKTsKCQkJfWVsc2V7CgkJCQkkdGhpcy0+bmFtZSA9ICRuYW1lOwoJCQkJJHRoaXMtPnZhbHVlID0gJGV2YWxkVmFsdWU7CgkJCQkkcmV0dXJuID0gJHRoaXM7CgkJCX0KCgkJfWNhdGNoKCBMZXNzX0V4Y2VwdGlvbl9QYXJzZXIgJGUgKXsKCQkJaWYoICFpc19udW1lcmljKCRlLT5pbmRleCkgKXsKCQkJCSRlLT5pbmRleCA9ICR0aGlzLT5pbmRleDsKCQkJCSRlLT5jdXJyZW50RmlsZSA9ICR0aGlzLT5jdXJyZW50RmlsZUluZm87CgkJCX0KCQkJdGhyb3cgJGU7CgkJfQoKCQlMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ3N0cmljdE1hdGgnXSA9ICRzdHJpY3RNYXRoQnlwYXNzOwoKCQlyZXR1cm4gJHJldHVybjsKCX0KCgogICAgcHVibGljIGZ1bmN0aW9uIENvbXBpbGVOYW1lKCAkZW52LCAkbmFtZSApewoJCSRvdXRwdXQgPSBuZXcgTGVzc19PdXRwdXQoKTsKCQlmb3JlYWNoKCRuYW1lIGFzICRuKXsKCQkJJG4tPmNvbXBpbGUoJGVudiktPmdlbkNTUygkb3V0cHV0KTsKCQl9CgkJcmV0dXJuICRvdXRwdXQtPnRvU3RyaW5nKCk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIG1ha2VJbXBvcnRhbnQoKXsKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9SdWxlKCR0aGlzLT5uYW1lLCAkdGhpcy0+dmFsdWUsICchaW1wb3J0YW50JywgJHRoaXMtPm1lcmdlLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8sICR0aGlzLT5pbmxpbmUpOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Ruleset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBSdWxlc2V0CiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX1J1bGVzZXQgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJcHJvdGVjdGVkICRsb29rdXBzOwoJcHVibGljICRfdmFyaWFibGVzOwoJcHVibGljICRfcnVsZXNldHM7CgoJcHVibGljICRzdHJpY3RJbXBvcnRzOwoKCXB1YmxpYyAkc2VsZWN0b3JzOwoJcHVibGljICRydWxlczsKCXB1YmxpYyAkcm9vdDsKCXB1YmxpYyAkYWxsb3dJbXBvcnRzOwoJcHVibGljICRwYXRoczsKCXB1YmxpYyAkZmlyc3RSb290OwoJcHVibGljICR0eXBlID0gJ1J1bGVzZXQnOwoJcHVibGljICRtdWx0aU1lZGlhOwoJcHVibGljICRhbGxFeHRlbmRzOwoKCXB1YmxpYyAkcnVsZXNldF9pZDsKCXB1YmxpYyAkb3JpZ2luYWxSdWxlc2V0OwoKCXB1YmxpYyAkZmlyc3Rfb2VsZW1lbnRzOwoKCXB1YmxpYyBmdW5jdGlvbiBTZXRSdWxlc2V0SW5kZXgoKXsKCQkkdGhpcy0+cnVsZXNldF9pZCA9IExlc3NfUGFyc2VyOjokbmV4dF9pZCsrOwoJCSR0aGlzLT5vcmlnaW5hbFJ1bGVzZXQgPSAkdGhpcy0+cnVsZXNldF9pZDsKCgkJaWYoICR0aGlzLT5zZWxlY3RvcnMgKXsKCQkJZm9yZWFjaCgkdGhpcy0+c2VsZWN0b3JzIGFzICRzZWwpewoJCQkJaWYoICRzZWwtPl9vZWxlbWVudHMgKXsKCQkJCQkkdGhpcy0+Zmlyc3Rfb2VsZW1lbnRzWyRzZWwtPl9vZWxlbWVudHNbMF1dID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNlbGVjdG9ycywgJHJ1bGVzLCAkc3RyaWN0SW1wb3J0cyA9IG51bGwpewoJCSR0aGlzLT5zZWxlY3RvcnMgPSAkc2VsZWN0b3JzOwoJCSR0aGlzLT5ydWxlcyA9ICRydWxlczsKCQkkdGhpcy0+bG9va3VwcyA9IGFycmF5KCk7CgkJJHRoaXMtPnN0cmljdEltcG9ydHMgPSAkc3RyaWN0SW1wb3J0czsKCQkkdGhpcy0+U2V0UnVsZXNldEluZGV4KCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGFjY2VwdCggJHZpc2l0b3IgKXsKCQlpZiggJHRoaXMtPnBhdGhzICl7CgkJCSRwYXRoc19sZW4gPSBjb3VudCgkdGhpcy0+cGF0aHMpOwoJCQlmb3IoJGkgPSAwLCRwYXRoc19sZW47ICRpIDwgJHBhdGhzX2xlbjsgJGkrKyApewoJCQkJJHRoaXMtPnBhdGhzWyRpXSA9ICR2aXNpdG9yLT52aXNpdEFycmF5KCR0aGlzLT5wYXRoc1skaV0pOwoJCQl9CgkJfWVsc2VpZiggJHRoaXMtPnNlbGVjdG9ycyApewoJCQkkdGhpcy0+c2VsZWN0b3JzID0gJHZpc2l0b3ItPnZpc2l0QXJyYXkoJHRoaXMtPnNlbGVjdG9ycyk7CgkJfQoKCQlpZiggJHRoaXMtPnJ1bGVzICl7CgkJCSR0aGlzLT5ydWxlcyA9ICR2aXNpdG9yLT52aXNpdEFycmF5KCR0aGlzLT5ydWxlcyk7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCRlbnYpewoKCQkkcnVsZXNldCA9ICR0aGlzLT5QcmVwYXJlUnVsZXNldCgkZW52KTsKCgoJCS8vIFN0b3JlIHRoZSBmcmFtZXMgYXJvdW5kIG1peGluIGRlZmluaXRpb25zLAoJCS8vIHNvIHRoZXkgY2FuIGJlIGV2YWx1YXRlZCBsaWtlIGNsb3N1cmVzIHdoZW4gdGhlIHRpbWUgY29tZXMuCgkJJHJzUnVsZUNudCA9IGNvdW50KCRydWxlc2V0LT5ydWxlcyk7CgkJZm9yKCAkaSA9IDA7ICRpIDwgJHJzUnVsZUNudDsgJGkrKyApewoJCQlpZiggJHJ1bGVzZXQtPnJ1bGVzWyRpXSBpbnN0YW5jZW9mIExlc3NfVHJlZV9NaXhpbl9EZWZpbml0aW9uIHx8ICRydWxlc2V0LT5ydWxlc1skaV0gaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGV0YWNoZWRSdWxlc2V0ICl7CgkJCQkkcnVsZXNldC0+cnVsZXNbJGldID0gJHJ1bGVzZXQtPnJ1bGVzWyRpXS0+Y29tcGlsZSgkZW52KTsKCQkJfQoJCX0KCgkJJG1lZGlhQmxvY2tDb3VudCA9IDA7CgkJaWYoICRlbnYgaW5zdGFuY2VvZiBMZXNzX0Vudmlyb25tZW50ICl7CgkJCSRtZWRpYUJsb2NrQ291bnQgPSBjb3VudCgkZW52LT5tZWRpYUJsb2Nrcyk7CgkJfQoKCQkvLyBFdmFsdWF0ZSBtaXhpbiBjYWxscy4KCQkkdGhpcy0+RXZhbE1peGluQ2FsbHMoICRydWxlc2V0LCAkZW52LCAkcnNSdWxlQ250ICk7CgoKCQkvLyBFdmFsdWF0ZSBldmVyeXRoaW5nIGVsc2UKCQlmb3IoICRpPTA7ICRpPCRyc1J1bGVDbnQ7ICRpKysgKXsKCQkJaWYoISAoJHJ1bGVzZXQtPnJ1bGVzWyRpXSBpbnN0YW5jZW9mIExlc3NfVHJlZV9NaXhpbl9EZWZpbml0aW9uIHx8ICRydWxlc2V0LT5ydWxlc1skaV0gaW5zdGFuY2VvZiBMZXNzX1RyZWVfRGV0YWNoZWRSdWxlc2V0KSApewoJCQkJJHJ1bGVzZXQtPnJ1bGVzWyRpXSA9ICRydWxlc2V0LT5ydWxlc1skaV0tPmNvbXBpbGUoJGVudik7CgkJCX0KCQl9CgogICAgICAgIC8vIEV2YWx1YXRlIGV2ZXJ5dGhpbmcgZWxzZQoJCWZvciggJGk9MDsgJGk8JHJzUnVsZUNudDsgJGkrKyApewoJCQkkcnVsZSA9ICRydWxlc2V0LT5ydWxlc1skaV07CgogICAgICAgICAgICAvLyBmb3IgcnVsZXNldHMsIGNoZWNrIGlmIGl0IGlzIGEgY3NzIGd1YXJkIGFuZCBjYW4gYmUgcmVtb3ZlZAoJCQlpZiggJHJ1bGUgaW5zdGFuY2VvZiBMZXNzX1RyZWVfUnVsZXNldCAmJiAkcnVsZS0+c2VsZWN0b3JzICYmIGNvdW50KCRydWxlLT5zZWxlY3RvcnMpID09PSAxICl7CgogICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQgY2FuIGJlIGZvbGRlZCBpbiAoZS5nLiAmIHdoZXJlKQoJCQkJaWYoICRydWxlLT5zZWxlY3RvcnNbMF0tPmlzSnVzdFBhcmVudFNlbGVjdG9yKCkgKXsKCQkJCQlhcnJheV9zcGxpY2UoJHJ1bGVzZXQtPnJ1bGVzLCRpLS0sMSk7CgkJCQkJJHJzUnVsZUNudC0tOwoKCQkJCQlmb3IoJGogPSAwOyAkaiA8IGNvdW50KCRydWxlLT5ydWxlcyk7ICRqKysgKXsKCQkJCQkJJHN1YlJ1bGUgPSAkcnVsZS0+cnVsZXNbJGpdOwoJCQkJCQlpZiggISgkc3ViUnVsZSBpbnN0YW5jZW9mIExlc3NfVHJlZV9SdWxlKSB8fCAhJHN1YlJ1bGUtPnZhcmlhYmxlICl7CgkJCQkJCQlhcnJheV9zcGxpY2UoJHJ1bGVzZXQtPnJ1bGVzLCArKyRpLCAwLCBhcnJheSgkc3ViUnVsZSkpOwoJCQkJCQkJJHJzUnVsZUNudCsrOwoJCQkJCQl9CgkJCQkJfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoJCS8vIFBvcCB0aGUgc3RhY2sKCQkkZW52LT5zaGlmdEZyYW1lKCk7CgoJCWlmICgkbWVkaWFCbG9ja0NvdW50KSB7CgkJCSRsZW4gPSBjb3VudCgkZW52LT5tZWRpYUJsb2Nrcyk7CgkJCWZvcigkaSA9ICRtZWRpYUJsb2NrQ291bnQ7ICRpIDwgJGxlbjsgJGkrKyApewoJCQkJJGVudi0+bWVkaWFCbG9ja3NbJGldLT5idWJibGVTZWxlY3RvcnMoJHJ1bGVzZXQtPnNlbGVjdG9ycyk7CgkJCX0KCQl9CgoJCXJldHVybiAkcnVsZXNldDsKCX0KCgkvKioKCSAqIENvbXBpbGUgTGVzc19UcmVlX01peGluX0NhbGwgb2JqZWN0cwoJICoKCSAqIEBwYXJhbSBMZXNzX1RyZWVfUnVsZXNldCAkcnVsZXNldAoJICogQHBhcmFtIGludGVnZXIgJHJzUnVsZUNudAoJICovCglwcml2YXRlIGZ1bmN0aW9uIEV2YWxNaXhpbkNhbGxzKCAkcnVsZXNldCwgJGVudiwgJiRyc1J1bGVDbnQgKXsKCQlmb3IoJGk9MDsgJGkgPCAkcnNSdWxlQ250OyAkaSsrKXsKCQkJJHJ1bGUgPSAkcnVsZXNldC0+cnVsZXNbJGldOwoKCQkJaWYoICRydWxlIGluc3RhbmNlb2YgTGVzc19UcmVlX01peGluX0NhbGwgKXsKCQkJCSRydWxlID0gJHJ1bGUtPmNvbXBpbGUoJGVudik7CgoJCQkJJHRlbXAgPSBhcnJheSgpOwoJCQkJZm9yZWFjaCgkcnVsZSBhcyAkcil7CgkJCQkJaWYoICgkciBpbnN0YW5jZW9mIExlc3NfVHJlZV9SdWxlKSAmJiAkci0+dmFyaWFibGUgKXsKCQkJCQkJLy8gZG8gbm90IHBvbGx1dGUgdGhlIHNjb3BlIGlmIHRoZSB2YXJpYWJsZSBpcwoJCQkJCQkvLyBhbHJlYWR5IHRoZXJlLiBjb25zaWRlciByZXR1cm5pbmcgZmFsc2UgaGVyZQoJCQkJCQkvLyBidXQgd2UgbmVlZCBhIHdheSB0byAicmV0dXJuIiB2YXJpYWJsZSBmcm9tIG1peGlucwoJCQkJCQlpZiggISRydWxlc2V0LT52YXJpYWJsZSgkci0+bmFtZSkgKXsKCQkJCQkJCSR0ZW1wW10gPSAkcjsKCQkJCQkJfQoJCQkJCX1lbHNlewoJCQkJCQkkdGVtcFtdID0gJHI7CgkJCQkJfQoJCQkJfQoJCQkJJHRlbXBfY291bnQgPSBjb3VudCgkdGVtcCktMTsKCQkJCWFycmF5X3NwbGljZSgkcnVsZXNldC0+cnVsZXMsICRpLCAxLCAkdGVtcCk7CgkJCQkkcnNSdWxlQ250ICs9ICR0ZW1wX2NvdW50OwoJCQkJJGkgKz0gJHRlbXBfY291bnQ7CgkJCQkkcnVsZXNldC0+cmVzZXRDYWNoZSgpOwoKCQkJfWVsc2VpZiggJHJ1bGUgaW5zdGFuY2VvZiBMZXNzX1RyZWVfUnVsZXNldENhbGwgKXsKCgkJCQkkcnVsZSA9ICRydWxlLT5jb21waWxlKCRlbnYpOwoJCQkJJHJ1bGVzID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJHJ1bGUtPnJ1bGVzIGFzICRyKXsKCQkJCQlpZiggKCRyIGluc3RhbmNlb2YgTGVzc19UcmVlX1J1bGUpICYmICRyLT52YXJpYWJsZSApewoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQkJJHJ1bGVzW10gPSAkcjsKCQkJCX0KCgkJCQlhcnJheV9zcGxpY2UoJHJ1bGVzZXQtPnJ1bGVzLCAkaSwgMSwgJHJ1bGVzKTsKCQkJCSR0ZW1wX2NvdW50ID0gY291bnQoJHJ1bGVzKTsKCQkJCSRyc1J1bGVDbnQgKz0gJHRlbXBfY291bnQgLSAxOwoJCQkJJGkgKz0gJHRlbXBfY291bnQtMTsKCQkJCSRydWxlc2V0LT5yZXNldENhY2hlKCk7CgkJCX0KCgkJfQoJfQoKCgkvKioKCSAqIENvbXBpbGUgdGhlIHNlbGVjdG9ycyBhbmQgY3JlYXRlIGEgbmV3IHJ1bGVzZXQgb2JqZWN0IGZvciB0aGUgY29tcGlsZSgpIG1ldGhvZAoJICoKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBQcmVwYXJlUnVsZXNldCgkZW52KXsKCgkJJGhhc09uZVBhc3NpbmdTZWxlY3RvciA9IGZhbHNlOwoJCSRzZWxlY3RvcnMgPSBhcnJheSgpOwoJCWlmKCAkdGhpcy0+c2VsZWN0b3JzICl7CgkJCUxlc3NfVHJlZV9EZWZhdWx0RnVuYzo6ZXJyb3IoIml0IGlzIGN1cnJlbnRseSBvbmx5IGFsbG93ZWQgaW4gcGFyYW1ldHJpYyBtaXhpbiBndWFyZHMsIik7CgoJCQlmb3JlYWNoKCR0aGlzLT5zZWxlY3RvcnMgYXMgJHMpewoJCQkJJHNlbGVjdG9yID0gJHMtPmNvbXBpbGUoJGVudik7CgkJCQkkc2VsZWN0b3JzW10gPSAkc2VsZWN0b3I7CgkJCQlpZiggJHNlbGVjdG9yLT5ldmFsZENvbmRpdGlvbiApewoJCQkJCSRoYXNPbmVQYXNzaW5nU2VsZWN0b3IgPSB0cnVlOwoJCQkJfQoJCQl9CgoJCQlMZXNzX1RyZWVfRGVmYXVsdEZ1bmM6OnJlc2V0KCk7CgkJfSBlbHNlIHsKCQkJJGhhc09uZVBhc3NpbmdTZWxlY3RvciA9IHRydWU7CgkJfQoKCQlpZiggJHRoaXMtPnJ1bGVzICYmICRoYXNPbmVQYXNzaW5nU2VsZWN0b3IgKXsKCQkJJHJ1bGVzID0gJHRoaXMtPnJ1bGVzOwoJCX1lbHNlewoJCQkkcnVsZXMgPSBhcnJheSgpOwoJCX0KCgkJJHJ1bGVzZXQgPSBuZXcgTGVzc19UcmVlX1J1bGVzZXQoJHNlbGVjdG9ycywgJHJ1bGVzLCAkdGhpcy0+c3RyaWN0SW1wb3J0cyk7CgoJCSRydWxlc2V0LT5vcmlnaW5hbFJ1bGVzZXQgPSAkdGhpcy0+cnVsZXNldF9pZDsKCgkJJHJ1bGVzZXQtPnJvb3QgPSAkdGhpcy0+cm9vdDsKCQkkcnVsZXNldC0+Zmlyc3RSb290ID0gJHRoaXMtPmZpcnN0Um9vdDsKCQkkcnVsZXNldC0+YWxsb3dJbXBvcnRzID0gJHRoaXMtPmFsbG93SW1wb3J0czsKCgoJCS8vIHB1c2ggdGhlIGN1cnJlbnQgcnVsZXNldCB0byB0aGUgZnJhbWVzIHN0YWNrCgkJJGVudi0+dW5zaGlmdEZyYW1lKCRydWxlc2V0KTsKCgoJCS8vIEV2YWx1YXRlIGltcG9ydHMKCQlpZiggJHJ1bGVzZXQtPnJvb3QgfHwgJHJ1bGVzZXQtPmFsbG93SW1wb3J0cyB8fCAhJHJ1bGVzZXQtPnN0cmljdEltcG9ydHMgKXsKCQkJJHJ1bGVzZXQtPmV2YWxJbXBvcnRzKCRlbnYpOwoJCX0KCgkJcmV0dXJuICRydWxlc2V0OwoJfQoKCWZ1bmN0aW9uIGV2YWxJbXBvcnRzKCRlbnYpIHsKCgkJJHJ1bGVzX2xlbiA9IGNvdW50KCR0aGlzLT5ydWxlcyk7CgkJZm9yKCRpPTA7ICRpIDwgJHJ1bGVzX2xlbjsgJGkrKyl7CgkJCSRydWxlID0gJHRoaXMtPnJ1bGVzWyRpXTsKCgkJCWlmKCAkcnVsZSBpbnN0YW5jZW9mIExlc3NfVHJlZV9JbXBvcnQgKXsKCQkJCSRydWxlcyA9ICRydWxlLT5jb21waWxlKCRlbnYpOwoJCQkJaWYoIGlzX2FycmF5KCRydWxlcykgKXsKCQkJCQlhcnJheV9zcGxpY2UoJHRoaXMtPnJ1bGVzLCAkaSwgMSwgJHJ1bGVzKTsKCQkJCQkkdGVtcF9jb3VudCA9IGNvdW50KCRydWxlcyktMTsKCQkJCQkkaSArPSAkdGVtcF9jb3VudDsKCQkJCQkkcnVsZXNfbGVuICs9ICR0ZW1wX2NvdW50OwoJCQkJfWVsc2V7CgkJCQkJYXJyYXlfc3BsaWNlKCR0aGlzLT5ydWxlcywgJGksIDEsIGFycmF5KCRydWxlcykpOwoJCQkJfQoKCQkJCSR0aGlzLT5yZXNldENhY2hlKCk7CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gbWFrZUltcG9ydGFudCgpewoKCQkkaW1wb3J0YW50X3J1bGVzID0gYXJyYXkoKTsKCQlmb3JlYWNoKCR0aGlzLT5ydWxlcyBhcyAkcnVsZSl7CgkJCWlmKCAkcnVsZSBpbnN0YW5jZW9mIExlc3NfVHJlZV9SdWxlIHx8ICRydWxlIGluc3RhbmNlb2YgTGVzc19UcmVlX1J1bGVzZXQgfHwgJHJ1bGUgaW5zdGFuY2VvZiBMZXNzX1RyZWVfTmFtZVZhbHVlICl7CgkJCQkkaW1wb3J0YW50X3J1bGVzW10gPSAkcnVsZS0+bWFrZUltcG9ydGFudCgpOwoJCQl9ZWxzZXsKCQkJCSRpbXBvcnRhbnRfcnVsZXNbXSA9ICRydWxlOwoJCQl9CgkJfQoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9SdWxlc2V0KCR0aGlzLT5zZWxlY3RvcnMsICRpbXBvcnRhbnRfcnVsZXMsICR0aGlzLT5zdHJpY3RJbXBvcnRzICk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG1hdGNoQXJncygkYXJncyl7CgkJcmV0dXJuICEkYXJnczsKCX0KCgkvLyBsZXRzIHlvdSBjYWxsIGEgY3NzIHNlbGVjdG9yIHdpdGggYSBndWFyZAoJcHVibGljIGZ1bmN0aW9uIG1hdGNoQ29uZGl0aW9uKCAkYXJncywgJGVudiApewoJCSRsYXN0U2VsZWN0b3IgPSBlbmQoJHRoaXMtPnNlbGVjdG9ycyk7CgoJCWlmKCAhJGxhc3RTZWxlY3Rvci0+ZXZhbGRDb25kaXRpb24gKXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlpZiggJGxhc3RTZWxlY3Rvci0+Y29uZGl0aW9uICYmICEkbGFzdFNlbGVjdG9yLT5jb25kaXRpb24tPmNvbXBpbGUoICRlbnYtPmNvcHlFdmFsRW52KCAkZW52LT5mcmFtZXMgKSApICl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gcmVzZXRDYWNoZSgpewoJCSR0aGlzLT5fcnVsZXNldHMgPSBudWxsOwoJCSR0aGlzLT5fdmFyaWFibGVzID0gbnVsbDsKCQkkdGhpcy0+bG9va3VwcyA9IGFycmF5KCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHZhcmlhYmxlcygpewoJCSR0aGlzLT5fdmFyaWFibGVzID0gYXJyYXkoKTsKCQlmb3JlYWNoKCAkdGhpcy0+cnVsZXMgYXMgJHIpewoJCQlpZiAoJHIgaW5zdGFuY2VvZiBMZXNzX1RyZWVfUnVsZSAmJiAkci0+dmFyaWFibGUgPT09IHRydWUpIHsKCQkJCSR0aGlzLT5fdmFyaWFibGVzWyRyLT5uYW1lXSA9ICRyOwoJCQl9CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiB2YXJpYWJsZSgkbmFtZSl7CgoJCWlmKCBpc19udWxsKCR0aGlzLT5fdmFyaWFibGVzKSApewoJCQkkdGhpcy0+dmFyaWFibGVzKCk7CgkJfQoJCXJldHVybiBpc3NldCgkdGhpcy0+X3ZhcmlhYmxlc1skbmFtZV0pID8gJHRoaXMtPl92YXJpYWJsZXNbJG5hbWVdIDogbnVsbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZmluZCggJHNlbGVjdG9yLCAkc2VsZiA9IG51bGwgKXsKCgkJJGtleSA9IGltcGxvZGUoJyAnLCRzZWxlY3Rvci0+X29lbGVtZW50cyk7CgoJCWlmKCAhaXNzZXQoJHRoaXMtPmxvb2t1cHNbJGtleV0pICl7CgoJCQlpZiggISRzZWxmICl7CgkJCQkkc2VsZiA9ICR0aGlzLT5ydWxlc2V0X2lkOwoJCQl9CgoJCQkkdGhpcy0+bG9va3Vwc1ska2V5XSA9IGFycmF5KCk7CgoJCQkkZmlyc3Rfb2VsZW1lbnQgPSAkc2VsZWN0b3ItPl9vZWxlbWVudHNbMF07CgoJCQlmb3JlYWNoKCR0aGlzLT5ydWxlcyBhcyAkcnVsZSl7CgkJCQlpZiggJHJ1bGUgaW5zdGFuY2VvZiBMZXNzX1RyZWVfUnVsZXNldCAmJiAkcnVsZS0+cnVsZXNldF9pZCAhPSAkc2VsZiApewoKCQkJCQlpZiggaXNzZXQoJHJ1bGUtPmZpcnN0X29lbGVtZW50c1skZmlyc3Rfb2VsZW1lbnRdKSApewoKCQkJCQkJZm9yZWFjaCggJHJ1bGUtPnNlbGVjdG9ycyBhcyAkcnVsZVNlbGVjdG9yICl7CgkJCQkJCQkkbWF0Y2ggPSAkc2VsZWN0b3ItPm1hdGNoKCRydWxlU2VsZWN0b3IpOwoJCQkJCQkJaWYoICRtYXRjaCApewoJCQkJCQkJCWlmKCAkc2VsZWN0b3ItPmVsZW1lbnRzX2xlbiA+ICRtYXRjaCApewoJCQkJCQkJCQkkdGhpcy0+bG9va3Vwc1ska2V5XSA9IGFycmF5X21lcmdlKCR0aGlzLT5sb29rdXBzWyRrZXldLCAkcnVsZS0+ZmluZCggbmV3IExlc3NfVHJlZV9TZWxlY3RvcihhcnJheV9zbGljZSgkc2VsZWN0b3ItPmVsZW1lbnRzLCAkbWF0Y2gpKSwgJHNlbGYpKTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkdGhpcy0+bG9va3Vwc1ska2V5XVtdID0gJHJ1bGU7CgkJCQkJCQkJfQoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gJHRoaXMtPmxvb2t1cHNbJGtleV07Cgl9CgoKCS8qKgoJICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgoJCWlmKCAhJHRoaXMtPnJvb3QgKXsKCQkJTGVzc19FbnZpcm9ubWVudDo6JHRhYkxldmVsKys7CgkJfQoKCQkkdGFiUnVsZVN0ciA9ICR0YWJTZXRTdHIgPSAnJzsKCQlpZiggIUxlc3NfUGFyc2VyOjokb3B0aW9uc1snY29tcHJlc3MnXSApewoJCQlpZiggTGVzc19FbnZpcm9ubWVudDo6JHRhYkxldmVsICl7CgkJCQkkdGFiUnVsZVN0ciA9ICJcbiIuc3RyX3JlcGVhdCggTGVzc19QYXJzZXI6OiRvcHRpb25zWydpbmRlbnRhdGlvbiddICwgTGVzc19FbnZpcm9ubWVudDo6JHRhYkxldmVsICk7CgkJCQkkdGFiU2V0U3RyID0gIlxuIi5zdHJfcmVwZWF0KCBMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ2luZGVudGF0aW9uJ10gLCBMZXNzX0Vudmlyb25tZW50OjokdGFiTGV2ZWwtMSApOwoJCQl9ZWxzZXsKCQkJCSR0YWJTZXRTdHIgPSAkdGFiUnVsZVN0ciA9ICJcbiI7CgkJCX0KCQl9CgoKCQkkcnVsZU5vZGVzID0gYXJyYXkoKTsKCQkkcnVsZXNldE5vZGVzID0gYXJyYXkoKTsKCQlmb3JlYWNoKCR0aGlzLT5ydWxlcyBhcyAkcnVsZSl7CgoJCQkkY2xhc3MgPSBnZXRfY2xhc3MoJHJ1bGUpOwoJCQlpZiggKCRjbGFzcyA9PT0gJ0xlc3NfVHJlZV9NZWRpYScpIHx8ICgkY2xhc3MgPT09ICdMZXNzX1RyZWVfRGlyZWN0aXZlJykgfHwgKCR0aGlzLT5yb290ICYmICRjbGFzcyA9PT0gJ0xlc3NfVHJlZV9Db21tZW50JykgfHwgKCRjbGFzcyA9PT0gJ0xlc3NfVHJlZV9SdWxlc2V0JyAmJiAkcnVsZS0+cnVsZXMpICl7CgkJCQkkcnVsZXNldE5vZGVzW10gPSAkcnVsZTsKCQkJfWVsc2V7CgkJCQkkcnVsZU5vZGVzW10gPSAkcnVsZTsKCQkJfQoJCX0KCgkJLy8gSWYgdGhpcyBpcyB0aGUgcm9vdCBub2RlLCB3ZSBkb24ndCByZW5kZXIKCQkvLyBhIHNlbGVjdG9yLCBvciB7fS4KCQlpZiggISR0aGlzLT5yb290ICl7CgoJCQkvKgoJCQlkZWJ1Z0luZm8gPSB0cmVlLmRlYnVnSW5mbyhlbnYsIHRoaXMsIHRhYlNldFN0cik7CgoJCQlpZiAoZGVidWdJbmZvKSB7CgkJCQlvdXRwdXQuYWRkKGRlYnVnSW5mbyk7CgkJCQlvdXRwdXQuYWRkKHRhYlNldFN0cik7CgkJCX0KCQkJKi8KCgkJCSRwYXRoc19sZW4gPSBjb3VudCgkdGhpcy0+cGF0aHMpOwoJCQlmb3IoICRpID0gMDsgJGkgPCAkcGF0aHNfbGVuOyAkaSsrICl7CgkJCQkkcGF0aCA9ICR0aGlzLT5wYXRoc1skaV07CgkJCQkkZmlyc3RTZWxlY3RvciA9IHRydWU7CgoJCQkJZm9yZWFjaCgkcGF0aCBhcyAkcCl7CgkJCQkJJHAtPmdlbkNTUyggJG91dHB1dCwgJGZpcnN0U2VsZWN0b3IgKTsKCQkJCQkkZmlyc3RTZWxlY3RvciA9IGZhbHNlOwoJCQkJfQoKCQkJCWlmKCAkaSArIDEgPCAkcGF0aHNfbGVuICl7CgkJCQkJJG91dHB1dC0+YWRkKCAnLCcgLiAkdGFiU2V0U3RyICk7CgkJCQl9CgkJCX0KCgkJCSRvdXRwdXQtPmFkZCggKExlc3NfUGFyc2VyOjokb3B0aW9uc1snY29tcHJlc3MnXSA/ICd7JyA6ICIgeyIpIC4gJHRhYlJ1bGVTdHIgKTsKCQl9CgoJCS8vIENvbXBpbGUgcnVsZXMgYW5kIHJ1bGVzZXRzCgkJJHJ1bGVOb2Rlc19sZW4gPSBjb3VudCgkcnVsZU5vZGVzKTsKCQkkcnVsZXNldE5vZGVzX2xlbiA9IGNvdW50KCRydWxlc2V0Tm9kZXMpOwoJCWZvciggJGkgPSAwOyAkaSA8ICRydWxlTm9kZXNfbGVuOyAkaSsrICl7CgkJCSRydWxlID0gJHJ1bGVOb2Rlc1skaV07CgoJCQkvLyBAcGFnZXsgZGlyZWN0aXZlIGVuZHMgdXAgd2l0aCByb290IGVsZW1lbnRzIGluc2lkZSBpdCwgYSBtaXggb2YgcnVsZXMgYW5kIHJ1bGVzZXRzCgkJCS8vIEluIHRoaXMgaW5zdGFuY2Ugd2UgZG8gbm90IGtub3cgd2hldGhlciBpdCBpcyB0aGUgbGFzdCBwcm9wZXJ0eQoJCQlpZiggJGkgKyAxID09PSAkcnVsZU5vZGVzX2xlbiAmJiAoISR0aGlzLT5yb290IHx8ICRydWxlc2V0Tm9kZXNfbGVuID09PSAwIHx8ICR0aGlzLT5maXJzdFJvb3QgKSApewoJCQkJTGVzc19FbnZpcm9ubWVudDo6JGxhc3RSdWxlID0gdHJ1ZTsKCQkJfQoKCQkJJHJ1bGUtPmdlbkNTUyggJG91dHB1dCApOwoKCQkJaWYoICFMZXNzX0Vudmlyb25tZW50OjokbGFzdFJ1bGUgKXsKCQkJCSRvdXRwdXQtPmFkZCggJHRhYlJ1bGVTdHIgKTsKCQkJfWVsc2V7CgkJCQlMZXNzX0Vudmlyb25tZW50OjokbGFzdFJ1bGUgPSBmYWxzZTsKCQkJfQoJCX0KCgkJaWYoICEkdGhpcy0+cm9vdCApewoJCQkkb3V0cHV0LT5hZGQoICR0YWJTZXRTdHIgLiAnfScgKTsKCQkJTGVzc19FbnZpcm9ubWVudDo6JHRhYkxldmVsLS07CgkJfQoKCQkkZmlyc3RSdWxlc2V0ID0gdHJ1ZTsKCQkkc3BhY2UgPSAoJHRoaXMtPnJvb3QgPyAkdGFiUnVsZVN0ciA6ICR0YWJTZXRTdHIpOwoJCWZvciggJGkgPSAwOyAkaSA8ICRydWxlc2V0Tm9kZXNfbGVuOyAkaSsrICl7CgoJCQlpZiggJHJ1bGVOb2Rlc19sZW4gJiYgJGZpcnN0UnVsZXNldCApewoJCQkJJG91dHB1dC0+YWRkKCAkc3BhY2UgKTsKCQkJfWVsc2VpZiggISRmaXJzdFJ1bGVzZXQgKXsKCQkJCSRvdXRwdXQtPmFkZCggJHNwYWNlICk7CgkJCX0KCQkJJGZpcnN0UnVsZXNldCA9IGZhbHNlOwoJCQkkcnVsZXNldE5vZGVzWyRpXS0+Z2VuQ1NTKCAkb3V0cHV0KTsKCQl9CgoJCWlmKCAhTGVzc19QYXJzZXI6OiRvcHRpb25zWydjb21wcmVzcyddICYmICR0aGlzLT5maXJzdFJvb3QgKXsKCQkJJG91dHB1dC0+YWRkKCAiXG4iICk7CgkJfQoKCX0KCgoJZnVuY3Rpb24gbWFya1JlZmVyZW5jZWQoKXsKCQlpZiggISR0aGlzLT5zZWxlY3RvcnMgKXsKCQkJcmV0dXJuOwoJCX0KCQlmb3JlYWNoKCR0aGlzLT5zZWxlY3RvcnMgYXMgJHNlbGVjdG9yKXsKCQkJJHNlbGVjdG9yLT5tYXJrUmVmZXJlbmNlZCgpOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gam9pblNlbGVjdG9ycyggJGNvbnRleHQsICRzZWxlY3RvcnMgKXsKCQkkcGF0aHMgPSBhcnJheSgpOwoJCWlmKCBpc19hcnJheSgkc2VsZWN0b3JzKSApewoJCQlmb3JlYWNoKCRzZWxlY3RvcnMgYXMgJHNlbGVjdG9yKSB7CgkJCQkkdGhpcy0+am9pblNlbGVjdG9yKCAkcGF0aHMsICRjb250ZXh0LCAkc2VsZWN0b3IpOwoJCQl9CgkJfQoJCXJldHVybiAkcGF0aHM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGpvaW5TZWxlY3RvciggJiRwYXRocywgJGNvbnRleHQsICRzZWxlY3Rvcil7CgoJCSRoYXNQYXJlbnRTZWxlY3RvciA9IGZhbHNlOwoKCQlmb3JlYWNoKCRzZWxlY3Rvci0+ZWxlbWVudHMgYXMgJGVsKSB7CgkJCWlmKCAkZWwtPnZhbHVlID09PSAnJicpIHsKCQkJCSRoYXNQYXJlbnRTZWxlY3RvciA9IHRydWU7CgkJCX0KCQl9CgoJCWlmKCAhJGhhc1BhcmVudFNlbGVjdG9yICl7CgkJCWlmKCAkY29udGV4dCApewoJCQkJZm9yZWFjaCgkY29udGV4dCBhcyAkY29udGV4dF9lbCl7CgkJCQkJJHBhdGhzW10gPSBhcnJheV9tZXJnZSgkY29udGV4dF9lbCwgYXJyYXkoJHNlbGVjdG9yKSApOwoJCQkJfQoJCQl9ZWxzZSB7CgkJCQkkcGF0aHNbXSA9IGFycmF5KCRzZWxlY3Rvcik7CgkJCX0KCQkJcmV0dXJuOwoJCX0KCgoJCS8vIFRoZSBwYXRocyBhcmUgW1tTZWxlY3Rvcl1dCgkJLy8gVGhlIGZpcnN0IGxpc3QgaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGVyYXRlZCBzZWxlY3RvcnMKCQkvLyBUaGUgaW5uZXIgbGlzdCBpcyBhIGxpc3Qgb2YgaW5oZXJpdGFuY2Ugc2VwZXJhdGVkIHNlbGVjdG9ycwoJCS8vIGUuZy4KCQkvLyAuYSwgLmIgewoJCS8vICAgLmMgewoJCS8vICAgfQoJCS8vIH0KCQkvLyA9PSBbWy5hXSBbLmNdXSBbWy5iXSBbLmNdXQoJCS8vCgoJCS8vIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdG9yIHNvIGZhcgoJCSRjdXJyZW50RWxlbWVudHMgPSBhcnJheSgpOwoJCS8vIHRoZSBjdXJyZW50IGxpc3Qgb2YgbmV3IHNlbGVjdG9ycyB0byBhZGQgdG8gdGhlIHBhdGguCgkJLy8gV2Ugd2lsbCBidWlsZCBpdCB1cC4gV2UgaW5pdGlhdGUgaXQgd2l0aCBvbmUgZW1wdHkgc2VsZWN0b3IgYXMgd2UgIm11bHRpcGx5IiB0aGUgbmV3IHNlbGVjdG9ycwoJCS8vIGJ5IHRoZSBwYXJlbnRzCgkJJG5ld1NlbGVjdG9ycyA9IGFycmF5KGFycmF5KCkpOwoKCgkJZm9yZWFjaCggJHNlbGVjdG9yLT5lbGVtZW50cyBhcyAkZWwpewoKCQkJLy8gbm9uIHBhcmVudCByZWZlcmVuY2UgZWxlbWVudHMganVzdCBnZXQgYWRkZWQKCQkJaWYoICRlbC0+dmFsdWUgIT09ICcmJyApewoJCQkJJGN1cnJlbnRFbGVtZW50c1tdID0gJGVsOwoJCQl9IGVsc2UgewoJCQkJLy8gdGhlIG5ldyBsaXN0IG9mIHNlbGVjdG9ycyB0byBhZGQKCQkJCSRzZWxlY3RvcnNNdWx0aXBsaWVkID0gYXJyYXkoKTsKCgkJCQkvLyBtZXJnZSB0aGUgY3VycmVudCBsaXN0IG9mIG5vbiBwYXJlbnQgc2VsZWN0b3IgZWxlbWVudHMKCQkJCS8vIG9uIHRvIHRoZSBjdXJyZW50IGxpc3Qgb2Ygc2VsZWN0b3JzIHRvIGFkZAoJCQkJaWYoICRjdXJyZW50RWxlbWVudHMgKXsKCQkJCQkkdGhpcy0+bWVyZ2VFbGVtZW50c09uVG9TZWxlY3RvcnMoICRjdXJyZW50RWxlbWVudHMsICRuZXdTZWxlY3RvcnMpOwoJCQkJfQoKCQkJCS8vIGxvb3AgdGhyb3VnaCBvdXIgY3VycmVudCBzZWxlY3RvcnMKCQkJCWZvcmVhY2goJG5ld1NlbGVjdG9ycyBhcyAkc2VsKXsKCgkJCQkJLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgcGFyZW50IHBhdGhzLCB0aGUgJiBtaWdodCBiZSBpbiBhIG1peGluIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQKCQkJCQkvLyB3aGV0aGVyIHRoZXJlIGFyZSBwYXJlbnRzIG9yIG5vdAoJCQkJCWlmKCAhJGNvbnRleHQgKXsKCQkJCQkJLy8gdGhlIGNvbWJpbmF0b3IgdXNlZCBvbiBlbCBzaG91bGQgbm93IGJlIGFwcGxpZWQgdG8gdGhlIG5leHQgZWxlbWVudCBpbnN0ZWFkIHNvIHRoYXQKCQkJCQkJLy8gaXQgaXMgbm90IGxvc3QKCQkJCQkJaWYoICRzZWwgKXsKCQkJCQkJCSRzZWxbMF0tPmVsZW1lbnRzID0gYXJyYXlfc2xpY2UoJHNlbFswXS0+ZWxlbWVudHMsMCk7CgkJCQkJCQkkc2VsWzBdLT5lbGVtZW50c1tdID0gbmV3IExlc3NfVHJlZV9FbGVtZW50KCRlbC0+Y29tYmluYXRvciwgJycsICRlbC0+aW5kZXgsICRlbC0+Y3VycmVudEZpbGVJbmZvICk7CgkJCQkJCX0KCQkJCQkJJHNlbGVjdG9yc011bHRpcGxpZWRbXSA9ICRzZWw7CgkJCQkJfWVsc2UgewoKCQkJCQkJLy8gYW5kIHRoZSBwYXJlbnQgc2VsZWN0b3JzCgkJCQkJCWZvcmVhY2goJGNvbnRleHQgYXMgJHBhcmVudFNlbCl7CgkJCQkJCQkvLyBXZSBuZWVkIHRvIHB1dCB0aGUgY3VycmVudCBzZWxlY3RvcnMKCQkJCQkJCS8vIHRoZW4gam9pbiB0aGUgbGFzdCBzZWxlY3RvcidzIGVsZW1lbnRzIG9uIHRvIHRoZSBwYXJlbnRzIHNlbGVjdG9ycwoKCQkJCQkJCS8vIG91ciBuZXcgc2VsZWN0b3IgcGF0aAoJCQkJCQkJJG5ld1NlbGVjdG9yUGF0aCA9IGFycmF5KCk7CgkJCQkJCQkvLyBzZWxlY3RvcnMgZnJvbSB0aGUgcGFyZW50IGFmdGVyIHRoZSBqb2luCgkJCQkJCQkkYWZ0ZXJQYXJlbnRKb2luID0gYXJyYXkoKTsKCQkJCQkJCSRuZXdKb2luZWRTZWxlY3RvckVtcHR5ID0gdHJ1ZTsKCgkJCQkJCQkvL2NvbnN0cnVjdCB0aGUgam9pbmVkIHNlbGVjdG9yIC0gaWYgJiBpcyB0aGUgZmlyc3QgdGhpbmcgdGhpcyB3aWxsIGJlIGVtcHR5LAoJCQkJCQkJLy8gaWYgbm90IG5ld0pvaW5lZFNlbGVjdG9yIHdpbGwgYmUgdGhlIGxhc3Qgc2V0IG9mIGVsZW1lbnRzIGluIHRoZSBzZWxlY3RvcgoJCQkJCQkJaWYoICRzZWwgKXsKCQkJCQkJCQkkbmV3U2VsZWN0b3JQYXRoID0gJHNlbDsKCQkJCQkJCQkkbGFzdFNlbGVjdG9yID0gYXJyYXlfcG9wKCRuZXdTZWxlY3RvclBhdGgpOwoJCQkJCQkJCSRuZXdKb2luZWRTZWxlY3RvciA9ICRzZWxlY3Rvci0+Y3JlYXRlRGVyaXZlZCggYXJyYXlfc2xpY2UoJGxhc3RTZWxlY3Rvci0+ZWxlbWVudHMsMCkgKTsKCQkJCQkJCQkkbmV3Sm9pbmVkU2VsZWN0b3JFbXB0eSA9IGZhbHNlOwoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJJG5ld0pvaW5lZFNlbGVjdG9yID0gJHNlbGVjdG9yLT5jcmVhdGVEZXJpdmVkKGFycmF5KCkpOwoJCQkJCQkJfQoKCQkJCQkJCS8vcHV0IHRvZ2V0aGVyIHRoZSBwYXJlbnQgc2VsZWN0b3JzIGFmdGVyIHRoZSBqb2luCgkJCQkJCQlpZiAoIGNvdW50KCRwYXJlbnRTZWwpID4gMSkgewoJCQkJCQkJCSRhZnRlclBhcmVudEpvaW4gPSBhcnJheV9tZXJnZSgkYWZ0ZXJQYXJlbnRKb2luLCBhcnJheV9zbGljZSgkcGFyZW50U2VsLDEpICk7CgkJCQkJCQl9CgoJCQkJCQkJaWYgKCAkcGFyZW50U2VsICl7CgkJCQkJCQkJJG5ld0pvaW5lZFNlbGVjdG9yRW1wdHkgPSBmYWxzZTsKCgkJCQkJCQkJLy8gam9pbiB0aGUgZWxlbWVudHMgc28gZmFyIHdpdGggdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhcmVudAoJCQkJCQkJCSRuZXdKb2luZWRTZWxlY3Rvci0+ZWxlbWVudHNbXSA9IG5ldyBMZXNzX1RyZWVfRWxlbWVudCggJGVsLT5jb21iaW5hdG9yLCAkcGFyZW50U2VsWzBdLT5lbGVtZW50c1swXS0+dmFsdWUsICRlbC0+aW5kZXgsICRlbC0+Y3VycmVudEZpbGVJbmZvKTsKCgkJCQkJCQkJJG5ld0pvaW5lZFNlbGVjdG9yLT5lbGVtZW50cyA9IGFycmF5X21lcmdlKCAkbmV3Sm9pbmVkU2VsZWN0b3ItPmVsZW1lbnRzLCBhcnJheV9zbGljZSgkcGFyZW50U2VsWzBdLT5lbGVtZW50cywgMSkgKTsKCQkJCQkJCX0KCgkJCQkJCQlpZiAoISRuZXdKb2luZWRTZWxlY3RvckVtcHR5KSB7CgkJCQkJCQkJLy8gbm93IGFkZCB0aGUgam9pbmVkIHNlbGVjdG9yCgkJCQkJCQkJJG5ld1NlbGVjdG9yUGF0aFtdID0gJG5ld0pvaW5lZFNlbGVjdG9yOwoJCQkJCQkJfQoKCQkJCQkJCS8vIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGFyZW50CgkJCQkJCQkkbmV3U2VsZWN0b3JQYXRoID0gYXJyYXlfbWVyZ2UoJG5ld1NlbGVjdG9yUGF0aCwgJGFmdGVyUGFyZW50Sm9pbik7CgoJCQkJCQkJLy8gYWRkIHRoYXQgdG8gb3VyIG5ldyBzZXQgb2Ygc2VsZWN0b3JzCgkJCQkJCQkkc2VsZWN0b3JzTXVsdGlwbGllZFtdID0gJG5ld1NlbGVjdG9yUGF0aDsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQkvLyBvdXIgbmV3IHNlbGVjdG9ycyBoYXMgYmVlbiBtdWx0aXBsaWVkLCBzbyByZXNldCB0aGUgc3RhdGUKCQkJCSRuZXdTZWxlY3RvcnMgPSAkc2VsZWN0b3JzTXVsdGlwbGllZDsKCQkJCSRjdXJyZW50RWxlbWVudHMgPSBhcnJheSgpOwoJCQl9CgkJfQoKCQkvLyBpZiB3ZSBoYXZlIGFueSBlbGVtZW50cyBsZWZ0IG92ZXIgKGUuZy4gLmEmIC5iID09IC5iKQoJCS8vIGFkZCB0aGVtIG9uIHRvIGFsbCB0aGUgY3VycmVudCBzZWxlY3RvcnMKCQlpZiggJGN1cnJlbnRFbGVtZW50cyApewoJCQkkdGhpcy0+bWVyZ2VFbGVtZW50c09uVG9TZWxlY3RvcnMoJGN1cnJlbnRFbGVtZW50cywgJG5ld1NlbGVjdG9ycyk7CgkJfQoJCWZvcmVhY2goICRuZXdTZWxlY3RvcnMgYXMgJG5ld19zZWwpewoJCQlpZiggJG5ld19zZWwgKXsKCQkJCSRwYXRoc1tdID0gJG5ld19zZWw7CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gbWVyZ2VFbGVtZW50c09uVG9TZWxlY3RvcnMoICRlbGVtZW50cywgJiRzZWxlY3RvcnMpewoKCQlpZiggISRzZWxlY3RvcnMgKXsKCQkJJHNlbGVjdG9yc1tdID0gYXJyYXkoIG5ldyBMZXNzX1RyZWVfU2VsZWN0b3IoJGVsZW1lbnRzKSApOwoJCQlyZXR1cm47CgkJfQoKCgkJZm9yZWFjaCggJHNlbGVjdG9ycyBhcyAmJHNlbCl7CgoJCQkvLyBpZiB0aGUgcHJldmlvdXMgdGhpbmcgaW4gc2VsIGlzIGEgcGFyZW50IHRoaXMgbmVlZHMgdG8gam9pbiBvbiB0byBpdAoJCQlpZiggJHNlbCApewoJCQkJJGxhc3QgPSBjb3VudCgkc2VsKS0xOwoJCQkJJHNlbFskbGFzdF0gPSAkc2VsWyRsYXN0XS0+Y3JlYXRlRGVyaXZlZCggYXJyYXlfbWVyZ2UoJHNlbFskbGFzdF0tPmVsZW1lbnRzLCAkZWxlbWVudHMpICk7CgkJCX1lbHNlewoJCQkJJHNlbFtdID0gbmV3IExlc3NfVHJlZV9TZWxlY3RvciggJGVsZW1lbnRzICk7CgkJCX0KCQl9Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/RulesetCall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBSdWxlc2V0Q2FsbAogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9SdWxlc2V0Q2FsbCBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJHZhcmlhYmxlOwoJcHVibGljICR0eXBlID0gIlJ1bGVzZXRDYWxsIjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhcmlhYmxlKXsKCQkkdGhpcy0+dmFyaWFibGUgPSAkdmFyaWFibGU7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGFjY2VwdCgkdmlzaXRvcikge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSggJGVudiApewoJCSR2YXJpYWJsZSA9IG5ldyBMZXNzX1RyZWVfVmFyaWFibGUoJHRoaXMtPnZhcmlhYmxlKTsKCQkkZGV0YWNoZWRSdWxlc2V0ID0gJHZhcmlhYmxlLT5jb21waWxlKCRlbnYpOwoJCXJldHVybiAkZGV0YWNoZWRSdWxlc2V0LT5jYWxsRXZhbCgkZW52KTsKCX0KfQoK]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Selector.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTZWxlY3RvcgogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9TZWxlY3RvciBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJGVsZW1lbnRzOwoJcHVibGljICRjb25kaXRpb247CglwdWJsaWMgJGV4dGVuZExpc3QgPSBhcnJheSgpOwoJcHVibGljICRfY3NzOwoJcHVibGljICRpbmRleDsKCXB1YmxpYyAkZXZhbGRDb25kaXRpb24gPSBmYWxzZTsKCXB1YmxpYyAkdHlwZSA9ICdTZWxlY3Rvcic7CglwdWJsaWMgJGN1cnJlbnRGaWxlSW5mbyA9IGFycmF5KCk7CglwdWJsaWMgJGlzUmVmZXJlbmNlZDsKCXB1YmxpYyAkbWVkaWFFbXB0eTsKCglwdWJsaWMgJGVsZW1lbnRzX2xlbiA9IDA7CgoJcHVibGljICRfb2VsZW1lbnRzOwoJcHVibGljICRfb2VsZW1lbnRzX2xlbjsKCXB1YmxpYyAkY2FjaGVhYmxlID0gdHJ1ZTsKCgkvKioKCSAqIEBwYXJhbSBib29sZWFuICRpc1JlZmVyZW5jZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCAkZWxlbWVudHMsICRleHRlbmRMaXN0ID0gYXJyYXkoKSAsICRjb25kaXRpb24gPSBudWxsLCAkaW5kZXg9bnVsbCwgJGN1cnJlbnRGaWxlSW5mbz1udWxsLCAkaXNSZWZlcmVuY2VkPW51bGwgKXsKCgkJJHRoaXMtPmVsZW1lbnRzID0gJGVsZW1lbnRzOwoJCSR0aGlzLT5lbGVtZW50c19sZW4gPSBjb3VudCgkZWxlbWVudHMpOwoJCSR0aGlzLT5leHRlbmRMaXN0ID0gJGV4dGVuZExpc3Q7CgkJJHRoaXMtPmNvbmRpdGlvbiA9ICRjb25kaXRpb247CgkJaWYoICRjdXJyZW50RmlsZUluZm8gKXsKCQkJJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyA9ICRjdXJyZW50RmlsZUluZm87CgkJfQoJCSR0aGlzLT5pc1JlZmVyZW5jZWQgPSAkaXNSZWZlcmVuY2VkOwoJCWlmKCAhJGNvbmRpdGlvbiApewoJCQkkdGhpcy0+ZXZhbGRDb25kaXRpb24gPSB0cnVlOwoJCX0KCgkJJHRoaXMtPkNhY2hlRWxlbWVudHMoKTsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCR2aXNpdG9yKSB7CgkJJHRoaXMtPmVsZW1lbnRzID0gJHZpc2l0b3ItPnZpc2l0QXJyYXkoJHRoaXMtPmVsZW1lbnRzKTsKCQkkdGhpcy0+ZXh0ZW5kTGlzdCA9ICR2aXNpdG9yLT52aXNpdEFycmF5KCR0aGlzLT5leHRlbmRMaXN0KTsKCQlpZiggJHRoaXMtPmNvbmRpdGlvbiApewoJCQkkdGhpcy0+Y29uZGl0aW9uID0gJHZpc2l0b3ItPnZpc2l0T2JqKCR0aGlzLT5jb25kaXRpb24pOwoJCX0KCgkJaWYoICR2aXNpdG9yIGluc3RhbmNlb2YgTGVzc19WaXNpdG9yX2V4dGVuZEZpbmRlciApewoJCQkkdGhpcy0+Q2FjaGVFbGVtZW50cygpOwoJCX0KCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRGVyaXZlZCggJGVsZW1lbnRzLCAkZXh0ZW5kTGlzdCA9IG51bGwsICRldmFsZENvbmRpdGlvbiA9IG51bGwgKXsKCQkkbmV3U2VsZWN0b3IgPSBuZXcgTGVzc19UcmVlX1NlbGVjdG9yKCAkZWxlbWVudHMsICgkZXh0ZW5kTGlzdCA/ICRleHRlbmRMaXN0IDogJHRoaXMtPmV4dGVuZExpc3QpLCBudWxsLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8sICR0aGlzLT5pc1JlZmVyZW5jZWQpOwoJCSRuZXdTZWxlY3Rvci0+ZXZhbGRDb25kaXRpb24gPSAkZXZhbGRDb25kaXRpb24gPyAkZXZhbGRDb25kaXRpb24gOiAkdGhpcy0+ZXZhbGRDb25kaXRpb247CgkJcmV0dXJuICRuZXdTZWxlY3RvcjsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIG1hdGNoKCAkb3RoZXIgKXsKCgkJaWYoICEkb3RoZXItPl9vZWxlbWVudHMgfHwgKCR0aGlzLT5lbGVtZW50c19sZW4gPCAkb3RoZXItPl9vZWxlbWVudHNfbGVuKSApewoJCQlyZXR1cm4gMDsKCQl9CgoJCWZvciggJGkgPSAwOyAkaSA8ICRvdGhlci0+X29lbGVtZW50c19sZW47ICRpKysgKXsKCQkJaWYoICR0aGlzLT5lbGVtZW50c1skaV0tPnZhbHVlICE9PSAkb3RoZXItPl9vZWxlbWVudHNbJGldKSB7CgkJCQlyZXR1cm4gMDsKCQkJfQoJCX0KCgkJcmV0dXJuICRvdGhlci0+X29lbGVtZW50c19sZW47IC8vIHJldHVybiBudW1iZXIgb2YgbWF0Y2hlZCBlbGVtZW50cwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gQ2FjaGVFbGVtZW50cygpewoKCQkkdGhpcy0+X29lbGVtZW50cyA9IGFycmF5KCk7CgkJJGNzcyA9ICcnOwoKCQlmb3JlYWNoKCR0aGlzLT5lbGVtZW50cyBhcyAkdil7CgoJCQkkY3NzIC49ICR2LT5jb21iaW5hdG9yOwoJCQlpZiggISR2LT52YWx1ZV9pc19vYmplY3QgKXsKCQkJCSRjc3MgLj0gJHYtPnZhbHVlOwoJCQkJY29udGludWU7CgkJCX0KCgkJCWlmKCAhcHJvcGVydHlfZXhpc3RzKCR2LT52YWx1ZSwndmFsdWUnKSB8fCAhaXNfc3RyaW5nKCR2LT52YWx1ZS0+dmFsdWUpICl7CgkJCQkkdGhpcy0+Y2FjaGVhYmxlID0gZmFsc2U7CgkJCQlyZXR1cm47CgkJCX0KCQkJJGNzcyAuPSAkdi0+dmFsdWUtPnZhbHVlOwoJCX0KCgkJJHRoaXMtPl9vZWxlbWVudHNfbGVuID0gcHJlZ19tYXRjaF9hbGwoJy9bLCYjXC5cdy1dKD86W1x3LV18KD86XFxcXC4pKSovJywgJGNzcywgJG1hdGNoZXMpOwoJCWlmKCAkdGhpcy0+X29lbGVtZW50c19sZW4gKXsKCQkJJHRoaXMtPl9vZWxlbWVudHMgPSAkbWF0Y2hlc1swXTsKCgkJCWlmKCAkdGhpcy0+X29lbGVtZW50c1swXSA9PT0gJyYnICl7CgkJCQlhcnJheV9zaGlmdCgkdGhpcy0+X29lbGVtZW50cyk7CgkJCQkkdGhpcy0+X29lbGVtZW50c19sZW4tLTsKCQkJfQoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNKdXN0UGFyZW50U2VsZWN0b3IoKXsKCQlyZXR1cm4gISR0aGlzLT5tZWRpYUVtcHR5ICYmCgkJCWNvdW50KCR0aGlzLT5lbGVtZW50cykgPT09IDEgJiYKCQkJJHRoaXMtPmVsZW1lbnRzWzBdLT52YWx1ZSA9PT0gJyYnICYmCgkJCSgkdGhpcy0+ZWxlbWVudHNbMF0tPmNvbWJpbmF0b3IgPT09ICcgJyB8fCAkdGhpcy0+ZWxlbWVudHNbMF0tPmNvbWJpbmF0b3IgPT09ICcnKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgkZW52KSB7CgoJCSRlbGVtZW50cyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkdGhpcy0+ZWxlbWVudHMgYXMgJGVsKXsKCQkJJGVsZW1lbnRzW10gPSAkZWwtPmNvbXBpbGUoJGVudik7CgkJfQoKCQkkZXh0ZW5kTGlzdCA9IGFycmF5KCk7CgkJZm9yZWFjaCgkdGhpcy0+ZXh0ZW5kTGlzdCBhcyAkZWwpewoJCQkkZXh0ZW5kTGlzdFtdID0gJGVsLT5jb21waWxlKCRlbCk7CgkJfQoKCQkkZXZhbGRDb25kaXRpb24gPSBmYWxzZTsKCQlpZiggJHRoaXMtPmNvbmRpdGlvbiApewoJCQkkZXZhbGRDb25kaXRpb24gPSAkdGhpcy0+Y29uZGl0aW9uLT5jb21waWxlKCRlbnYpOwoJCX0KCgkJcmV0dXJuICR0aGlzLT5jcmVhdGVEZXJpdmVkKCAkZWxlbWVudHMsICRleHRlbmRMaXN0LCAkZXZhbGRDb25kaXRpb24gKTsKCX0KCgoJLyoqCgkgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCgkgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQsICRmaXJzdFNlbGVjdG9yID0gdHJ1ZSApewoKCQlpZiggISRmaXJzdFNlbGVjdG9yICYmICR0aGlzLT5lbGVtZW50c1swXS0+Y29tYmluYXRvciA9PT0gIiIgKXsKCQkJJG91dHB1dC0+YWRkKCcgJywgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbywgJHRoaXMtPmluZGV4KTsKCQl9CgoJCWZvcmVhY2goJHRoaXMtPmVsZW1lbnRzIGFzICRlbGVtZW50KXsKCQkJJGVsZW1lbnQtPmdlbkNTUyggJG91dHB1dCApOwoJCX0KCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFya1JlZmVyZW5jZWQoKXsKCQkkdGhpcy0+aXNSZWZlcmVuY2VkID0gdHJ1ZTsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXNSZWZlcmVuY2VkKCl7CgkJcmV0dXJuICFpc3NldCgkdGhpcy0+Y3VycmVudEZpbGVJbmZvWydyZWZlcmVuY2UnXSkgfHwgISR0aGlzLT5jdXJyZW50RmlsZUluZm9bJ3JlZmVyZW5jZSddIHx8ICR0aGlzLT5pc1JlZmVyZW5jZWQ7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElzT3V0cHV0KCl7CgkJcmV0dXJuICR0aGlzLT5ldmFsZENvbmRpdGlvbjsKCX0KCn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/UnicodeDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBVbmljb2RlRGVzY3JpcHRvcgogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9Vbmljb2RlRGVzY3JpcHRvciBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJHZhbHVlOwoJcHVibGljICR0eXBlID0gJ1VuaWNvZGVEZXNjcmlwdG9yJzsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKXsKCQkkdGhpcy0+dmFsdWUgPSAkdmFsdWU7Cgl9CgogICAgLyoqCiAgICAgKiBAc2VlIExlc3NfVHJlZTo6Z2VuQ1NTCiAgICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZW5DU1MoICRvdXRwdXQgKXsKCQkkb3V0cHV0LT5hZGQoICR0aGlzLT52YWx1ZSApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjb21waWxlKCl7CgkJcmV0dXJuICR0aGlzOwoJfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Unit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBVbml0CiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdHJlZQogKi8KY2xhc3MgTGVzc19UcmVlX1VuaXQgZXh0ZW5kcyBMZXNzX1RyZWV7CgoJdmFyICRudW1lcmF0b3IgPSBhcnJheSgpOwoJdmFyICRkZW5vbWluYXRvciA9IGFycmF5KCk7CglwdWJsaWMgJGJhY2t1cFVuaXQ7CglwdWJsaWMgJHR5cGUgPSAnVW5pdCc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRudW1lcmF0b3IgPSBhcnJheSgpLCAkZGVub21pbmF0b3IgPSBhcnJheSgpLCAkYmFja3VwVW5pdCA9IG51bGwgKXsKCQkkdGhpcy0+bnVtZXJhdG9yID0gJG51bWVyYXRvcjsKCQkkdGhpcy0+ZGVub21pbmF0b3IgPSAkZGVub21pbmF0b3I7CgkJJHRoaXMtPmJhY2t1cFVuaXQgPSAkYmFja3VwVW5pdDsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jbG9uZSgpewoJfQoKICAgIC8qKgogICAgICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgoJCWlmKCAkdGhpcy0+bnVtZXJhdG9yICl7CgkJCSRvdXRwdXQtPmFkZCggJHRoaXMtPm51bWVyYXRvclswXSApOwoJCX1lbHNlaWYoICR0aGlzLT5kZW5vbWluYXRvciApewoJCQkkb3V0cHV0LT5hZGQoICR0aGlzLT5kZW5vbWluYXRvclswXSApOwoJCX1lbHNlaWYoICFMZXNzX1BhcnNlcjo6JG9wdGlvbnNbJ3N0cmljdFVuaXRzJ10gJiYgJHRoaXMtPmJhY2t1cFVuaXQgKXsKCQkJJG91dHB1dC0+YWRkKCAkdGhpcy0+YmFja3VwVW5pdCApOwoJCQlyZXR1cm4gOwoJCX0KCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TdHJpbmcoKXsKCQkkcmV0dXJuU3RyID0gaW1wbG9kZSgnKicsJHRoaXMtPm51bWVyYXRvcik7CgkJZm9yZWFjaCgkdGhpcy0+ZGVub21pbmF0b3IgYXMgJGQpewoJCQkkcmV0dXJuU3RyIC49ICcvJy4kZDsKCQl9CgkJcmV0dXJuICRyZXR1cm5TdHI7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKXsKCQlyZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7Cgl9CgoKCS8qKgoJICogQHBhcmFtIExlc3NfVHJlZV9Vbml0ICRvdGhlcgoJICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZSgkb3RoZXIpIHsKCQlyZXR1cm4gJHRoaXMtPmlzKCAkb3RoZXItPnRvU3RyaW5nKCkgKSA/IDAgOiAtMTsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXMoJHVuaXRTdHJpbmcpewoJCXJldHVybiAkdGhpcy0+dG9TdHJpbmcoKSA9PT0gJHVuaXRTdHJpbmc7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzTGVuZ3RoKCl7CgkJJGNzcyA9ICR0aGlzLT50b0NTUygpOwoJCXJldHVybiAhIXByZWdfbWF0Y2goJy9weHxlbXwlfGlufGNtfG1tfHBjfHB0fGV4LycsJGNzcyk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzQW5nbGUoKSB7CgkJcmV0dXJuIGlzc2V0KCBMZXNzX1RyZWVfVW5pdENvbnZlcnNpb25zOjokYW5nbGVbJHRoaXMtPnRvQ1NTKCldICk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzRW1wdHkoKXsKCQlyZXR1cm4gISR0aGlzLT5udW1lcmF0b3IgJiYgISR0aGlzLT5kZW5vbWluYXRvcjsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTaW5ndWxhcigpIHsKCQlyZXR1cm4gY291bnQoJHRoaXMtPm51bWVyYXRvcikgPD0gMSAmJiAhJHRoaXMtPmRlbm9taW5hdG9yOwoJfQoKCiAgICBwdWJsaWMgZnVuY3Rpb24gdXNlZFVuaXRzKCl7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgoJCWZvcmVhY2goTGVzc19UcmVlX1VuaXRDb252ZXJzaW9uczo6JGdyb3VwcyBhcyAkZ3JvdXBOYW1lKXsKCQkJJGdyb3VwID0gTGVzc19UcmVlX1VuaXRDb252ZXJzaW9uczo6JHskZ3JvdXBOYW1lfTsKCgkJCWZvcmVhY2goJHRoaXMtPm51bWVyYXRvciBhcyAkYXRvbWljVW5pdCl7CgkJCQlpZiggaXNzZXQoJGdyb3VwWyRhdG9taWNVbml0XSkgJiYgIWlzc2V0KCRyZXN1bHRbJGdyb3VwTmFtZV0pICl7CgkJCQkJJHJlc3VsdFskZ3JvdXBOYW1lXSA9ICRhdG9taWNVbml0OwoJCQkJfQoJCQl9CgoJCQlmb3JlYWNoKCR0aGlzLT5kZW5vbWluYXRvciBhcyAkYXRvbWljVW5pdCl7CgkJCQlpZiggaXNzZXQoJGdyb3VwWyRhdG9taWNVbml0XSkgJiYgIWlzc2V0KCRyZXN1bHRbJGdyb3VwTmFtZV0pICl7CgkJCQkJJHJlc3VsdFskZ3JvdXBOYW1lXSA9ICRhdG9taWNVbml0OwoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCl7CgkJJGNvdW50ZXIgPSBhcnJheSgpOwoJCSRiYWNrdXAgPSBudWxsOwoKCQlmb3JlYWNoKCR0aGlzLT5udW1lcmF0b3IgYXMgJGF0b21pY1VuaXQpewoJCQlpZiggISRiYWNrdXAgKXsKCQkJCSRiYWNrdXAgPSAkYXRvbWljVW5pdDsKCQkJfQoJCQkkY291bnRlclskYXRvbWljVW5pdF0gPSAoIGlzc2V0KCRjb3VudGVyWyRhdG9taWNVbml0XSkgPyAkY291bnRlclskYXRvbWljVW5pdF0gOiAwKSArIDE7CgkJfQoKCQlmb3JlYWNoKCR0aGlzLT5kZW5vbWluYXRvciBhcyAkYXRvbWljVW5pdCl7CgkJCWlmKCAhJGJhY2t1cCApewoJCQkJJGJhY2t1cCA9ICRhdG9taWNVbml0OwoJCQl9CgkJCSRjb3VudGVyWyRhdG9taWNVbml0XSA9ICggaXNzZXQoJGNvdW50ZXJbJGF0b21pY1VuaXRdKSA/ICRjb3VudGVyWyRhdG9taWNVbml0XSA6IDApIC0gMTsKCQl9CgoJCSR0aGlzLT5udW1lcmF0b3IgPSBhcnJheSgpOwoJCSR0aGlzLT5kZW5vbWluYXRvciA9IGFycmF5KCk7CgoJCWZvcmVhY2goJGNvdW50ZXIgYXMgJGF0b21pY1VuaXQgPT4gJGNvdW50KXsKCQkJaWYoICRjb3VudCA+IDAgKXsKCQkJCWZvciggJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKyApewoJCQkJCSR0aGlzLT5udW1lcmF0b3JbXSA9ICRhdG9taWNVbml0OwoJCQkJfQoJCQl9ZWxzZWlmKCAkY291bnQgPCAwICl7CgkJCQlmb3IoICRpID0gMDsgJGkgPCAtJGNvdW50OyAkaSsrICl7CgkJCQkJJHRoaXMtPmRlbm9taW5hdG9yW10gPSAkYXRvbWljVW5pdDsKCQkJCX0KCQkJfQoJCX0KCgkJaWYoICEkdGhpcy0+bnVtZXJhdG9yICYmICEkdGhpcy0+ZGVub21pbmF0b3IgJiYgJGJhY2t1cCApewoJCQkkdGhpcy0+YmFja3VwVW5pdCA9ICRiYWNrdXA7CgkJfQoKCQlzb3J0KCR0aGlzLT5udW1lcmF0b3IpOwoJCXNvcnQoJHRoaXMtPmRlbm9taW5hdG9yKTsKCX0KCgp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/UnitConversions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBVbml0Q29udmVyc2lvbnMKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfVW5pdENvbnZlcnNpb25zewoKCXB1YmxpYyBzdGF0aWMgJGdyb3VwcyA9IGFycmF5KCdsZW5ndGgnLCdkdXJhdGlvbicsJ2FuZ2xlJyk7CgoJcHVibGljIHN0YXRpYyAkbGVuZ3RoID0gYXJyYXkoCgkJJ20nPT4gMSwKCQknY20nPT4gMC4wMSwKCQknbW0nPT4gMC4wMDEsCgkJJ2luJz0+IDAuMDI1NCwKCQkncHgnPT4gMC4wMDAyNjQ1ODMsIC8vIDAuMDI1NCAvIDk2LAoJCSdwdCc9PiAwLjAwMDM1Mjc3OCwgLy8gMC4wMjU0IC8gNzIsCgkJJ3BjJz0+IDAuMDA0MjMzMzMzLCAvLyAwLjAyNTQgLyA3MiAqIDEyCgkJKTsKCglwdWJsaWMgc3RhdGljICRkdXJhdGlvbiA9IGFycmF5KAoJCSdzJz0+IDEsCgkJJ21zJz0+IDAuMDAxCgkJKTsKCglwdWJsaWMgc3RhdGljICRhbmdsZSA9IGFycmF5KAoJCSdyYWQnID0+IDAuMTU5MTU0OTQzMDkxOSwJLy8gMS8oMipNX1BJKSwKCQknZGVnJyA9PiAwLjAwMjc3Nzc3OCwgCQkvLyAxLzM2MCwKCQknZ3JhZCc9PiAwLjAwMjUsCQkJLy8gMS80MDAsCgkJJ3R1cm4nPT4gMQoJCSk7Cgp9]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Url.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBVcmwKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB0cmVlCiAqLwpjbGFzcyBMZXNzX1RyZWVfVXJsIGV4dGVuZHMgTGVzc19UcmVlewoKCXB1YmxpYyAkYXR0cnM7CglwdWJsaWMgJHZhbHVlOwoJcHVibGljICRjdXJyZW50RmlsZUluZm87CglwdWJsaWMgJGlzRXZhbGQ7CglwdWJsaWMgJHR5cGUgPSAnVXJsJzsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlLCAkY3VycmVudEZpbGVJbmZvID0gbnVsbCwgJGlzRXZhbGQgPSBudWxsKXsKCQkkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CgkJJHRoaXMtPmN1cnJlbnRGaWxlSW5mbyA9ICRjdXJyZW50RmlsZUluZm87CgkJJHRoaXMtPmlzRXZhbGQgPSAkaXNFdmFsZDsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCAkdmlzaXRvciApewoJCSR0aGlzLT52YWx1ZSA9ICR2aXNpdG9yLT52aXNpdE9iaigkdGhpcy0+dmFsdWUpOwoJfQoKICAgIC8qKgogICAgICogQHNlZSBMZXNzX1RyZWU6OmdlbkNTUwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgkJJG91dHB1dC0+YWRkKCAndXJsKCcgKTsKCQkkdGhpcy0+dmFsdWUtPmdlbkNTUyggJG91dHB1dCApOwoJCSRvdXRwdXQtPmFkZCggJyknICk7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gTGVzc19GdW5jdGlvbnMgJGN0eAoJICovCglwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgkY3R4KXsKCQkkdmFsID0gJHRoaXMtPnZhbHVlLT5jb21waWxlKCRjdHgpOwoKCQlpZiggISR0aGlzLT5pc0V2YWxkICl7CgkJCS8vIEFkZCB0aGUgYmFzZSBwYXRoIGlmIHRoZSBVUkwgaXMgcmVsYXRpdmUKCQkJaWYoIExlc3NfUGFyc2VyOjokb3B0aW9uc1sncmVsYXRpdmVVcmxzJ10KCQkJCSYmICR0aGlzLT5jdXJyZW50RmlsZUluZm8KCQkJCSYmIGlzX3N0cmluZygkdmFsLT52YWx1ZSkKCQkJCSYmIExlc3NfRW52aXJvbm1lbnQ6OmlzUGF0aFJlbGF0aXZlKCR2YWwtPnZhbHVlKQoJCQkpewoJCQkJJHJvb3RwYXRoID0gJHRoaXMtPmN1cnJlbnRGaWxlSW5mb1sndXJpX3Jvb3QnXTsKCQkJCWlmICggISR2YWwtPnF1b3RlICl7CgkJCQkJJHJvb3RwYXRoID0gcHJlZ19yZXBsYWNlKCcvW1woXClcJyJcc10vJywgJ1xcJDEnLCAkcm9vdHBhdGggKTsKCQkJCX0KCQkJCSR2YWwtPnZhbHVlID0gJHJvb3RwYXRoIC4gJHZhbC0+dmFsdWU7CgkJCX0KCgkJCSR2YWwtPnZhbHVlID0gTGVzc19FbnZpcm9ubWVudDo6bm9ybWFsaXplUGF0aCggJHZhbC0+dmFsdWUpOwoJCX0KCgkJLy8gQWRkIGNhY2hlIGJ1c3RlciBpZiBlbmFibGVkCgkJaWYoIExlc3NfUGFyc2VyOjokb3B0aW9uc1sndXJsQXJncyddICl7CgkJCWlmKCAhcHJlZ19tYXRjaCgnL15ccypkYXRhOi8nLCR2YWwtPnZhbHVlKSApewoJCQkJJGRlbGltaXRlciA9IHN0cnBvcygkdmFsLT52YWx1ZSwnPycpID09PSBmYWxzZSA/ICc/JyA6ICcmJzsKCQkJCSR1cmxBcmdzID0gJGRlbGltaXRlciAuIExlc3NfUGFyc2VyOjokb3B0aW9uc1sndXJsQXJncyddOwoJCQkJJGhhc2hfcG9zID0gc3RycG9zKCR2YWwtPnZhbHVlLCcjJyk7CgkJCQlpZiggJGhhc2hfcG9zICE9PSBmYWxzZSApewoJCQkJCSR2YWwtPnZhbHVlID0gc3Vic3RyX3JlcGxhY2UoJHZhbC0+dmFsdWUsJHVybEFyZ3MsICRoYXNoX3BvcywgMCk7CgkJCQl9IGVsc2UgewoJCQkJCSR2YWwtPnZhbHVlIC49ICR1cmxBcmdzOwoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9VUkwoJHZhbCwgJHRoaXMtPmN1cnJlbnRGaWxlSW5mbywgdHJ1ZSk7Cgl9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Value.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBWYWx1ZQogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9WYWx1ZSBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJHR5cGUgPSAnVmFsdWUnOwoJcHVibGljICR2YWx1ZTsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKXsKCQkkdGhpcy0+dmFsdWUgPSAkdmFsdWU7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIGFjY2VwdCgkdmlzaXRvcikgewoJCSR0aGlzLT52YWx1ZSA9ICR2aXNpdG9yLT52aXNpdEFycmF5KCR0aGlzLT52YWx1ZSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJGVudil7CgoJCSRyZXQgPSBhcnJheSgpOwoJCSRpID0gMDsKCQlmb3JlYWNoKCR0aGlzLT52YWx1ZSBhcyAkaSA9PiAkdil7CgkJCSRyZXRbXSA9ICR2LT5jb21waWxlKCRlbnYpOwoJCX0KCQlpZiggJGkgPiAwICl7CgkJCXJldHVybiBuZXcgTGVzc19UcmVlX1ZhbHVlKCRyZXQpOwoJCX0KCQlyZXR1cm4gJHJldFswXTsKCX0KCiAgICAvKioKICAgICAqIEBzZWUgTGVzc19UcmVlOjpnZW5DU1MKICAgICAqLwoJZnVuY3Rpb24gZ2VuQ1NTKCAkb3V0cHV0ICl7CgkJJGxlbiA9IGNvdW50KCR0aGlzLT52YWx1ZSk7CgkJZm9yKCRpID0gMDsgJGkgPCAkbGVuOyAkaSsrICl7CgkJCSR0aGlzLT52YWx1ZVskaV0tPmdlbkNTUyggJG91dHB1dCApOwoJCQlpZiggJGkrMSA8ICRsZW4gKXsKCQkJCSRvdXRwdXQtPmFkZCggTGVzc19FbnZpcm9ubWVudDo6JF9vdXRwdXRNYXBbJywnXSApOwoJCQl9CgkJfQoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Tree/Variable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBWYXJpYWJsZQogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHRyZWUKICovCmNsYXNzIExlc3NfVHJlZV9WYXJpYWJsZSBleHRlbmRzIExlc3NfVHJlZXsKCglwdWJsaWMgJG5hbWU7CglwdWJsaWMgJGluZGV4OwoJcHVibGljICRjdXJyZW50RmlsZUluZm87CglwdWJsaWMgJGV2YWx1YXRpbmcgPSBmYWxzZTsKCXB1YmxpYyAkdHlwZSA9ICdWYXJpYWJsZSc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJGluZGV4ID0gbnVsbCwgJGN1cnJlbnRGaWxlSW5mbyA9IG51bGwpIHsKICAgICAgICAkdGhpcy0+bmFtZSA9ICRuYW1lOwogICAgICAgICR0aGlzLT5pbmRleCA9ICRpbmRleDsKCQkkdGhpcy0+Y3VycmVudEZpbGVJbmZvID0gJGN1cnJlbnRGaWxlSW5mbzsKICAgIH0KCglwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgkZW52KSB7CgoJCWlmKCAkdGhpcy0+bmFtZVsxXSA9PT0gJ0AnICl7CgkJCSR2ID0gbmV3IExlc3NfVHJlZV9WYXJpYWJsZShzdWJzdHIoJHRoaXMtPm5hbWUsIDEpLCAkdGhpcy0+aW5kZXggKyAxLCAkdGhpcy0+Y3VycmVudEZpbGVJbmZvKTsKCQkJJG5hbWUgPSAnQCcgLiAkdi0+Y29tcGlsZSgkZW52KS0+dmFsdWU7CgkJfWVsc2V7CgkJCSRuYW1lID0gJHRoaXMtPm5hbWU7CgkJfQoKCQlpZiAoJHRoaXMtPmV2YWx1YXRpbmcpIHsKCQkJdGhyb3cgbmV3IExlc3NfRXhjZXB0aW9uX0NvbXBpbGVyKCJSZWN1cnNpdmUgdmFyaWFibGUgZGVmaW5pdGlvbiBmb3IgIiAuICRuYW1lLCBudWxsLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8pOwoJCX0KCgkJJHRoaXMtPmV2YWx1YXRpbmcgPSB0cnVlOwoKCQlmb3JlYWNoKCRlbnYtPmZyYW1lcyBhcyAkZnJhbWUpewoJCQlpZiggJHYgPSAkZnJhbWUtPnZhcmlhYmxlKCRuYW1lKSApewoJCQkJJHIgPSAkdi0+dmFsdWUtPmNvbXBpbGUoJGVudik7CgkJCQkkdGhpcy0+ZXZhbHVhdGluZyA9IGZhbHNlOwoJCQkJcmV0dXJuICRyOwoJCQl9CgkJfQoKCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoInZhcmlhYmxlICIgLiAkbmFtZSAuICIgaXMgdW5kZWZpbmVkIGluIGZpbGUgIi4kdGhpcy0+Y3VycmVudEZpbGVJbmZvWyJmaWxlbmFtZSJdLCBudWxsLCAkdGhpcy0+aW5kZXgsICR0aGlzLT5jdXJyZW50RmlsZUluZm8pOwoJfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Version.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBSZWxlYXNlIG51bWJlcnMKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB2ZXJzaW9uCiAqLwpjbGFzcyBMZXNzX1ZlcnNpb257CgoJY29uc3QgdmVyc2lvbiA9ICcxLjcuMC4xMCc7CQkJLy8gVGhlIGN1cnJlbnQgYnVpbGQgbnVtYmVyIG9mIGxlc3MucGhwCgljb25zdCBsZXNzX3ZlcnNpb24gPSAnMS43LjAnOwkJLy8gVGhlIGxlc3MuanMgdmVyc2lvbiB0aGF0IHRoaXMgYnVpbGQgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aAoJY29uc3QgY2FjaGVfdmVyc2lvbiA9ICcxNzAnOwkJLy8gVGhlIHBhcnNlciBjYWNoZSB2ZXJzaW9uCgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Visitor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBWaXNpdG9yCiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdmlzaXRvcgogKi8KY2xhc3MgTGVzc19WaXNpdG9yewoKCXByb3RlY3RlZCAkbWV0aG9kcyA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJF92aXNpdEZuQ2FjaGUgPSBhcnJheSgpOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpewoJCSR0aGlzLT5fdmlzaXRGbkNhY2hlID0gZ2V0X2NsYXNzX21ldGhvZHMoZ2V0X2NsYXNzKCR0aGlzKSk7CgkJJHRoaXMtPl92aXNpdEZuQ2FjaGUgPSBhcnJheV9mbGlwKCR0aGlzLT5fdmlzaXRGbkNhY2hlKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdmlzaXRPYmooICRub2RlICl7CgoJCSRmdW5jTmFtZSA9ICd2aXNpdCcuJG5vZGUtPnR5cGU7CgkJaWYoIGlzc2V0KCR0aGlzLT5fdmlzaXRGbkNhY2hlWyRmdW5jTmFtZV0pICl7CgoJCQkkdmlzaXREZWVwZXIgPSB0cnVlOwoJCQkkdGhpcy0+JGZ1bmNOYW1lKCAkbm9kZSwgJHZpc2l0RGVlcGVyICk7CgoJCQlpZiggJHZpc2l0RGVlcGVyICl7CgkJCQkkbm9kZS0+YWNjZXB0KCR0aGlzKTsKCQkJfQoKCQkJJGZ1bmNOYW1lID0gJGZ1bmNOYW1lIC4gIk91dCI7CgkJCWlmKCBpc3NldCgkdGhpcy0+X3Zpc2l0Rm5DYWNoZVskZnVuY05hbWVdKSApewoJCQkJJHRoaXMtPiRmdW5jTmFtZSggJG5vZGUgKTsKCQkJfQoKCQl9ZWxzZXsKCQkJJG5vZGUtPmFjY2VwdCgkdGhpcyk7CgkJfQoKCQlyZXR1cm4gJG5vZGU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHZpc2l0QXJyYXkoICRub2RlcyApewoKCQlhcnJheV9tYXAoIGFycmF5KCR0aGlzLCd2aXNpdE9iaicpLCAkbm9kZXMpOwoJCXJldHVybiAkbm9kZXM7Cgl9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Visitor/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Visitor/extendFinder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBFeHRlbmQgRmluZGVyIFZpc2l0b3IKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB2aXNpdG9yCiAqLwpjbGFzcyBMZXNzX1Zpc2l0b3JfZXh0ZW5kRmluZGVyIGV4dGVuZHMgTGVzc19WaXNpdG9yewoKCXB1YmxpYyAkY29udGV4dHMgPSBhcnJheSgpOwoJcHVibGljICRhbGxFeHRlbmRzU3RhY2s7CglwdWJsaWMgJGZvdW5kRXh0ZW5kczsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsKCQkkdGhpcy0+Y29udGV4dHMgPSBhcnJheSgpOwoJCSR0aGlzLT5hbGxFeHRlbmRzU3RhY2sgPSBhcnJheShhcnJheSgpKTsKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gTGVzc19UcmVlX1J1bGVzZXQgJHJvb3QKCSAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJ1bigkcm9vdCl7CgkJJHJvb3QgPSAkdGhpcy0+dmlzaXRPYmooJHJvb3QpOwoJCSRyb290LT5hbGxFeHRlbmRzID0mICR0aGlzLT5hbGxFeHRlbmRzU3RhY2tbMF07CgkJcmV0dXJuICRyb290OwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2aXNpdFJ1bGUoJHJ1bGVOb2RlLCAmJHZpc2l0RGVlcGVyICl7CgkJJHZpc2l0RGVlcGVyID0gZmFsc2U7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIHZpc2l0TWl4aW5EZWZpbml0aW9uKCAkbWl4aW5EZWZpbml0aW9uTm9kZSwgJiR2aXNpdERlZXBlciApewoJCSR2aXNpdERlZXBlciA9IGZhbHNlOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2aXNpdFJ1bGVzZXQoJHJ1bGVzZXROb2RlKXsKCgkJaWYoICRydWxlc2V0Tm9kZS0+cm9vdCApewoJCQlyZXR1cm47CgkJfQoKCQkkYWxsU2VsZWN0b3JzRXh0ZW5kTGlzdCA9IGFycmF5KCk7CgoJCS8vIGdldCAmOmV4dGVuZCguYSk7IHJ1bGVzIHdoaWNoIGFwcGx5IHRvIGFsbCBzZWxlY3RvcnMgaW4gdGhpcyBydWxlc2V0CgkJaWYoICRydWxlc2V0Tm9kZS0+cnVsZXMgKXsKCQkJZm9yZWFjaCgkcnVsZXNldE5vZGUtPnJ1bGVzIGFzICRydWxlKXsKCQkJCWlmKCAkcnVsZSBpbnN0YW5jZW9mIExlc3NfVHJlZV9FeHRlbmQgKXsKCQkJCQkkYWxsU2VsZWN0b3JzRXh0ZW5kTGlzdFtdID0gJHJ1bGU7CgkJCQkJJHJ1bGVzZXROb2RlLT5leHRlbmRPbkV2ZXJ5UGF0aCA9IHRydWU7CgkJCQl9CgkJCX0KCQl9CgoKCQkvLyBub3cgZmluZCBldmVyeSBzZWxlY3RvciBhbmQgYXBwbHkgdGhlIGV4dGVuZHMgdGhhdCBhcHBseSB0byBhbGwgZXh0ZW5kcwoJCS8vIGFuZCB0aGUgb25lcyB3aGljaCBhcHBseSB0byBhbiBpbmRpdmlkdWFsIGV4dGVuZAoJCWZvcmVhY2goJHJ1bGVzZXROb2RlLT5wYXRocyBhcyAkc2VsZWN0b3JQYXRoKXsKCQkJJHNlbGVjdG9yID0gZW5kKCRzZWxlY3RvclBhdGgpOyAvLyRzZWxlY3RvclBhdGhbIGNvdW50KCRzZWxlY3RvclBhdGgpLTFdOwoKCQkJJGogPSAwOwoJCQlmb3JlYWNoKCRzZWxlY3Rvci0+ZXh0ZW5kTGlzdCBhcyAkZXh0ZW5kKXsKCQkJCSR0aGlzLT5hbGxFeHRlbmRzU3RhY2tQdXNoKCRydWxlc2V0Tm9kZSwgJHNlbGVjdG9yUGF0aCwgJGV4dGVuZCwgJGopOwoJCQl9CgkJCWZvcmVhY2goJGFsbFNlbGVjdG9yc0V4dGVuZExpc3QgYXMgJGV4dGVuZCl7CgkJCQkkdGhpcy0+YWxsRXh0ZW5kc1N0YWNrUHVzaCgkcnVsZXNldE5vZGUsICRzZWxlY3RvclBhdGgsICRleHRlbmQsICRqKTsKCQkJfQoJCX0KCgkJJHRoaXMtPmNvbnRleHRzW10gPSAkcnVsZXNldE5vZGUtPnNlbGVjdG9yczsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsRXh0ZW5kc1N0YWNrUHVzaCgkcnVsZXNldE5vZGUsICRzZWxlY3RvclBhdGgsICRleHRlbmQsICYkail7CgkJJHRoaXMtPmZvdW5kRXh0ZW5kcyA9IHRydWU7CgkJJGV4dGVuZCA9IGNsb25lICRleHRlbmQ7CgkJJGV4dGVuZC0+ZmluZFNlbGZTZWxlY3RvcnMoICRzZWxlY3RvclBhdGggKTsKCQkkZXh0ZW5kLT5ydWxlc2V0ID0gJHJ1bGVzZXROb2RlOwoJCWlmKCAkaiA9PT0gMCApewoJCQkkZXh0ZW5kLT5maXJzdEV4dGVuZE9uVGhpc1NlbGVjdG9yUGF0aCA9IHRydWU7CgkJfQoKCQkkZW5kX2tleSA9IGNvdW50KCR0aGlzLT5hbGxFeHRlbmRzU3RhY2spLTE7CgkJJHRoaXMtPmFsbEV4dGVuZHNTdGFja1skZW5kX2tleV1bXSA9ICRleHRlbmQ7CgkJJGorKzsKCX0KCgogICAgcHVibGljIGZ1bmN0aW9uIHZpc2l0UnVsZXNldE91dCggJHJ1bGVzZXROb2RlICl7CgkJaWYoICFpc19vYmplY3QoJHJ1bGVzZXROb2RlKSB8fCAhJHJ1bGVzZXROb2RlLT5yb290ICl7CgkJCWFycmF5X3BvcCgkdGhpcy0+Y29udGV4dHMpOwoJCX0KCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmlzaXRNZWRpYSggJG1lZGlhTm9kZSApewoJCSRtZWRpYU5vZGUtPmFsbEV4dGVuZHMgPSBhcnJheSgpOwoJCSR0aGlzLT5hbGxFeHRlbmRzU3RhY2tbXSA9JiAkbWVkaWFOb2RlLT5hbGxFeHRlbmRzOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2aXNpdE1lZGlhT3V0KCl7CgkJYXJyYXlfcG9wKCR0aGlzLT5hbGxFeHRlbmRzU3RhY2spOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2aXNpdERpcmVjdGl2ZSggJGRpcmVjdGl2ZU5vZGUgKXsKCQkkZGlyZWN0aXZlTm9kZS0+YWxsRXh0ZW5kcyA9IGFycmF5KCk7CgkJJHRoaXMtPmFsbEV4dGVuZHNTdGFja1tdID0mICRkaXJlY3RpdmVOb2RlLT5hbGxFeHRlbmRzOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2aXNpdERpcmVjdGl2ZU91dCgpewoJCWFycmF5X3BvcCgkdGhpcy0+YWxsRXh0ZW5kc1N0YWNrKTsKCX0KfQoKCg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Visitor/import.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCmNsYXNzIExlc3NfVmlzaXRvcl9pbXBvcnQgZXh0ZW5kcyBMZXNzX1Zpc2l0b3JSZXBsYWNpbmd7CgoJcHVibGljICRfdmlzaXRvcjsKCXB1YmxpYyAkX2ltcG9ydGVyOwoJcHVibGljICRpbXBvcnRDb3VudDsKCglmdW5jdGlvbiBfX2NvbnN0cnVjdCggJGV2YWxFbnYgKXsKCQkkdGhpcy0+ZW52ID0gJGV2YWxFbnY7CgkJJHRoaXMtPmltcG9ydENvdW50ID0gMDsKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7Cgl9CgoKCWZ1bmN0aW9uIHJ1biggJHJvb3QgKXsKCQkkcm9vdCA9ICR0aGlzLT52aXNpdE9iaigkcm9vdCk7CgkJJHRoaXMtPmlzRmluaXNoZWQgPSB0cnVlOwoKCQkvL2lmKCAkdGhpcy0+aW1wb3J0Q291bnQgPT09IDApIHsKCQkvLwkkdGhpcy0+X2ZpbmlzaCgpOwoJCS8vfQoJfQoKCWZ1bmN0aW9uIHZpc2l0SW1wb3J0KCRpbXBvcnROb2RlLCAmJHZpc2l0RGVlcGVyICl7CgkJJGltcG9ydFZpc2l0b3IgPSAkdGhpczsKCQkkaW5saW5lQ1NTID0gJGltcG9ydE5vZGUtPm9wdGlvbnNbJ2lubGluZSddOwoKCQlpZiggISRpbXBvcnROb2RlLT5jc3MgfHwgJGlubGluZUNTUyApewoJCQkkZXZhbGRJbXBvcnROb2RlID0gJGltcG9ydE5vZGUtPmNvbXBpbGVGb3JJbXBvcnQoJHRoaXMtPmVudik7CgoJCQlpZiggJGV2YWxkSW1wb3J0Tm9kZSAmJiAoISRldmFsZEltcG9ydE5vZGUtPmNzcyB8fCAkaW5saW5lQ1NTKSApewoJCQkJJGltcG9ydE5vZGUgPSAkZXZhbGRJbXBvcnROb2RlOwoJCQkJJHRoaXMtPmltcG9ydENvdW50Kys7CgkJCQkkZW52ID0gY2xvbmUgJHRoaXMtPmVudjsKCgkJCQlpZiggKGlzc2V0KCRpbXBvcnROb2RlLT5vcHRpb25zWydtdWx0aXBsZSddKSAmJiAkaW1wb3J0Tm9kZS0+b3B0aW9uc1snbXVsdGlwbGUnXSkgKXsKCQkJCQkkZW52LT5pbXBvcnRNdWx0aXBsZSA9IHRydWU7CgkJCQl9CgoJCQkJLy9nZXQgcGF0aCAmIHVyaQoJCQkJJHBhdGhfYW5kX3VyaSA9IG51bGw7CgkJCQlpZiggaXNfY2FsbGFibGUoTGVzc19QYXJzZXI6OiRvcHRpb25zWydpbXBvcnRfY2FsbGJhY2snXSkgKXsKCQkJCQkkcGF0aF9hbmRfdXJpID0gY2FsbF91c2VyX2Z1bmMoTGVzc19QYXJzZXI6OiRvcHRpb25zWydpbXBvcnRfY2FsbGJhY2snXSwkaW1wb3J0Tm9kZSk7CgkJCQl9CgoJCQkJaWYoICEkcGF0aF9hbmRfdXJpICl7CgkJCQkJJHBhdGhfYW5kX3VyaSA9ICRpbXBvcnROb2RlLT5QYXRoQW5kVXJpKCk7CgkJCQl9CgoJCQkJaWYoICRwYXRoX2FuZF91cmkgKXsKCQkJCQlsaXN0KCRmdWxsX3BhdGgsICR1cmkpID0gJHBhdGhfYW5kX3VyaTsKCQkJCX1lbHNlewoJCQkJCSRmdWxsX3BhdGggPSAkdXJpID0gJGltcG9ydE5vZGUtPmdldFBhdGgoKTsKCQkJCX0KCgoJCQkJLy9pbXBvcnQgb25jZQoJCQkJaWYoICRpbXBvcnROb2RlLT5za2lwKCAkZnVsbF9wYXRoLCAkZW52KSApewoJCQkJCXJldHVybiBhcnJheSgpOwoJCQkJfQoKCQkJCWlmKCAkaW1wb3J0Tm9kZS0+b3B0aW9uc1snaW5saW5lJ10gKXsKCQkJCQkvL3RvZG8gbmVlZHMgdG8gcmVmZXJlbmNlIGNzcyBmaWxlIG5vdCBpbXBvcnQKCQkJCQkvLyRjb250ZW50cyA9IG5ldyBMZXNzX1RyZWVfQW5vbnltb3VzKCRpbXBvcnROb2RlLT5yb290LCAwLCBhcnJheSgnZmlsZW5hbWUnPT4kaW1wb3J0Tm9kZS0+aW1wb3J0ZWRGaWxlbmFtZSksIHRydWUgKTsKCgkJCQkJTGVzc19QYXJzZXI6OkFkZFBhcnNlZEZpbGUoJGZ1bGxfcGF0aCk7CgkJCQkJJGNvbnRlbnRzID0gbmV3IExlc3NfVHJlZV9Bbm9ueW1vdXMoIGZpbGVfZ2V0X2NvbnRlbnRzKCRmdWxsX3BhdGgpLCAwLCBhcnJheSgpLCB0cnVlICk7CgoJCQkJCWlmKCAkaW1wb3J0Tm9kZS0+ZmVhdHVyZXMgKXsKCQkJCQkJcmV0dXJuIG5ldyBMZXNzX1RyZWVfTWVkaWEoIGFycmF5KCRjb250ZW50cyksICRpbXBvcnROb2RlLT5mZWF0dXJlcy0+dmFsdWUgKTsKCQkJCQl9CgoJCQkJCXJldHVybiBhcnJheSggJGNvbnRlbnRzICk7CgkJCQl9CgoKCQkJCS8vIGNzcyA/CgkJCQlpZiggJGltcG9ydE5vZGUtPmNzcyApewoJCQkJCSRmZWF0dXJlcyA9ICggJGltcG9ydE5vZGUtPmZlYXR1cmVzID8gJGltcG9ydE5vZGUtPmZlYXR1cmVzLT5jb21waWxlKCRlbnYpIDogbnVsbCApOwoJCQkJCXJldHVybiBuZXcgTGVzc19UcmVlX0ltcG9ydCggJGltcG9ydE5vZGUtPmNvbXBpbGVQYXRoKCAkZW52KSwgJGZlYXR1cmVzLCAkaW1wb3J0Tm9kZS0+b3B0aW9ucywgJHRoaXMtPmluZGV4KTsKCQkJCX0KCgkJCQlyZXR1cm4gJGltcG9ydE5vZGUtPlBhcnNlSW1wb3J0KCAkZnVsbF9wYXRoLCAkdXJpLCAkZW52ICk7CgkJCX0KCgkJfQoKCQkkdmlzaXREZWVwZXIgPSBmYWxzZTsKCQlyZXR1cm4gJGltcG9ydE5vZGU7Cgl9CgoKCWZ1bmN0aW9uIHZpc2l0UnVsZSggJHJ1bGVOb2RlLCAmJHZpc2l0RGVlcGVyICl7CgkJJHZpc2l0RGVlcGVyID0gZmFsc2U7CgkJcmV0dXJuICRydWxlTm9kZTsKCX0KCglmdW5jdGlvbiB2aXNpdERpcmVjdGl2ZSgkZGlyZWN0aXZlTm9kZSwgJHZpc2l0QXJncyl7CgkJYXJyYXlfdW5zaGlmdCgkdGhpcy0+ZW52LT5mcmFtZXMsJGRpcmVjdGl2ZU5vZGUpOwoJCXJldHVybiAkZGlyZWN0aXZlTm9kZTsKCX0KCglmdW5jdGlvbiB2aXNpdERpcmVjdGl2ZU91dCgkZGlyZWN0aXZlTm9kZSkgewoJCWFycmF5X3NoaWZ0KCR0aGlzLT5lbnYtPmZyYW1lcyk7Cgl9CgoJZnVuY3Rpb24gdmlzaXRNaXhpbkRlZmluaXRpb24oJG1peGluRGVmaW5pdGlvbk5vZGUsICR2aXNpdEFyZ3MpIHsKCQlhcnJheV91bnNoaWZ0KCR0aGlzLT5lbnYtPmZyYW1lcywkbWl4aW5EZWZpbml0aW9uTm9kZSk7CgkJcmV0dXJuICRtaXhpbkRlZmluaXRpb25Ob2RlOwoJfQoKCWZ1bmN0aW9uIHZpc2l0TWl4aW5EZWZpbml0aW9uT3V0KCRtaXhpbkRlZmluaXRpb25Ob2RlKSB7CgkJYXJyYXlfc2hpZnQoJHRoaXMtPmVudi0+ZnJhbWVzKTsKCX0KCglmdW5jdGlvbiB2aXNpdFJ1bGVzZXQoJHJ1bGVzZXROb2RlLCAkdmlzaXRBcmdzKSB7CgkJYXJyYXlfdW5zaGlmdCgkdGhpcy0+ZW52LT5mcmFtZXMsJHJ1bGVzZXROb2RlKTsKCQlyZXR1cm4gJHJ1bGVzZXROb2RlOwoJfQoKCWZ1bmN0aW9uIHZpc2l0UnVsZXNldE91dCgkcnVsZXNldE5vZGUpIHsKCQlhcnJheV9zaGlmdCgkdGhpcy0+ZW52LT5mcmFtZXMpOwoJfQoKCWZ1bmN0aW9uIHZpc2l0TWVkaWEoJG1lZGlhTm9kZSwgJHZpc2l0QXJncykgewoJCWFycmF5X3Vuc2hpZnQoJHRoaXMtPmVudi0+ZnJhbWVzLCAkbWVkaWFOb2RlLT5ydWxlc2V0KTsKCQlyZXR1cm4gJG1lZGlhTm9kZTsKCX0KCglmdW5jdGlvbiB2aXNpdE1lZGlhT3V0KCRtZWRpYU5vZGUpIHsKCQlhcnJheV9zaGlmdCgkdGhpcy0+ZW52LT5mcmFtZXMpOwoJfQoKfQoqLwoKCg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Visitor/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Visitor/joinSelector.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBKb2luIFNlbGVjdG9yIFZpc2l0b3IKICoKICogQHBhY2thZ2UgTGVzcwogKiBAc3VicGFja2FnZSB2aXNpdG9yCiAqLwpjbGFzcyBMZXNzX1Zpc2l0b3Jfam9pblNlbGVjdG9yIGV4dGVuZHMgTGVzc19WaXNpdG9yewoKCXB1YmxpYyAkY29udGV4dHMgPSBhcnJheSggYXJyYXkoKSApOwoKCS8qKgoJICogQHBhcmFtIExlc3NfVHJlZV9SdWxlc2V0ICRyb290CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBydW4oICRyb290ICl7CgkJcmV0dXJuICR0aGlzLT52aXNpdE9iaigkcm9vdCk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIHZpc2l0UnVsZSggJHJ1bGVOb2RlLCAmJHZpc2l0RGVlcGVyICl7CgkJJHZpc2l0RGVlcGVyID0gZmFsc2U7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIHZpc2l0TWl4aW5EZWZpbml0aW9uKCAkbWl4aW5EZWZpbml0aW9uTm9kZSwgJiR2aXNpdERlZXBlciApewoJCSR2aXNpdERlZXBlciA9IGZhbHNlOwoJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2aXNpdFJ1bGVzZXQoICRydWxlc2V0Tm9kZSApewoKCQkkcGF0aHMgPSBhcnJheSgpOwoKCQlpZiggISRydWxlc2V0Tm9kZS0+cm9vdCApewoJCQkkc2VsZWN0b3JzID0gYXJyYXkoKTsKCgkJCWlmKCAkcnVsZXNldE5vZGUtPnNlbGVjdG9ycyAmJiAkcnVsZXNldE5vZGUtPnNlbGVjdG9ycyApewoJCQkJZm9yZWFjaCgkcnVsZXNldE5vZGUtPnNlbGVjdG9ycyBhcyAkc2VsZWN0b3IpewoJCQkJCWlmKCAkc2VsZWN0b3ItPmdldElzT3V0cHV0KCkgKXsKCQkJCQkJJHNlbGVjdG9yc1tdID0gJHNlbGVjdG9yOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJaWYoICEkc2VsZWN0b3JzICl7CgkJCQkkcnVsZXNldE5vZGUtPnNlbGVjdG9ycyA9IG51bGw7CgkJCQkkcnVsZXNldE5vZGUtPnJ1bGVzID0gbnVsbDsKCQkJfWVsc2V7CgkJCQkkY29udGV4dCA9IGVuZCgkdGhpcy0+Y29udGV4dHMpOyAvLyRjb250ZXh0ID0gJHRoaXMtPmNvbnRleHRzWyBjb3VudCgkdGhpcy0+Y29udGV4dHMpIC0gMV07CgkJCQkkcGF0aHMgPSAkcnVsZXNldE5vZGUtPmpvaW5TZWxlY3RvcnMoICRjb250ZXh0LCAkc2VsZWN0b3JzKTsKCQkJfQoKCQkJJHJ1bGVzZXROb2RlLT5wYXRocyA9ICRwYXRoczsKCQl9CgoJCSR0aGlzLT5jb250ZXh0c1tdID0gJHBhdGhzOyAvL2RpZmZlcmVudCBmcm9tIGxlc3MuanMuIFBsYWNlZCBhZnRlciBqb2luU2VsZWN0b3JzKCkgc28gdGhhdCAkdGhpcy0+Y29udGV4dHMgd2lsbCBnZXQgY29ycmVjdCAkcGF0aHMKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmlzaXRSdWxlc2V0T3V0KCl7CgkJYXJyYXlfcG9wKCR0aGlzLT5jb250ZXh0cyk7Cgl9CgogICAgcHVibGljIGZ1bmN0aW9uIHZpc2l0TWVkaWEoJG1lZGlhTm9kZSkgewoJCSRjb250ZXh0ID0gZW5kKCR0aGlzLT5jb250ZXh0cyk7IC8vJGNvbnRleHQgPSAkdGhpcy0+Y29udGV4dHNbIGNvdW50KCR0aGlzLT5jb250ZXh0cykgLSAxXTsKCgkJaWYoICFjb3VudCgkY29udGV4dCkgfHwgKGlzX29iamVjdCgkY29udGV4dFswXSkgJiYgJGNvbnRleHRbMF0tPm11bHRpTWVkaWEpICl7CgkJCSRtZWRpYU5vZGUtPnJ1bGVzWzBdLT5yb290ID0gdHJ1ZTsKCQl9Cgl9Cgp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Visitor/processExtends.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBQcm9jZXNzIEV4dGVuZHMgVmlzaXRvcgogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHZpc2l0b3IKICovCmNsYXNzIExlc3NfVmlzaXRvcl9wcm9jZXNzRXh0ZW5kcyBleHRlbmRzIExlc3NfVmlzaXRvcnsKCglwdWJsaWMgJGFsbEV4dGVuZHNTdGFjazsKCgkvKioKCSAqIEBwYXJhbSBMZXNzX1RyZWVfUnVsZXNldCAkcm9vdAoJICovCglwdWJsaWMgZnVuY3Rpb24gcnVuKCAkcm9vdCApewoJCSRleHRlbmRGaW5kZXIgPSBuZXcgTGVzc19WaXNpdG9yX2V4dGVuZEZpbmRlcigpOwoJCSRleHRlbmRGaW5kZXItPnJ1biggJHJvb3QgKTsKCQlpZiggISRleHRlbmRGaW5kZXItPmZvdW5kRXh0ZW5kcyl7CgkJCXJldHVybiAkcm9vdDsKCQl9CgoJCSRyb290LT5hbGxFeHRlbmRzID0gJHRoaXMtPmRvRXh0ZW5kQ2hhaW5pbmcoICRyb290LT5hbGxFeHRlbmRzLCAkcm9vdC0+YWxsRXh0ZW5kcyk7CgoJCSR0aGlzLT5hbGxFeHRlbmRzU3RhY2sgPSBhcnJheSgpOwoJCSR0aGlzLT5hbGxFeHRlbmRzU3RhY2tbXSA9ICYkcm9vdC0+YWxsRXh0ZW5kczsKCgkJcmV0dXJuICR0aGlzLT52aXNpdE9iaiggJHJvb3QgKTsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIGRvRXh0ZW5kQ2hhaW5pbmcoICRleHRlbmRzTGlzdCwgJGV4dGVuZHNMaXN0VGFyZ2V0LCAkaXRlcmF0aW9uQ291bnQgPSAwKXsKCQkvLwoJCS8vIGNoYWluaW5nIGlzIGRpZmZlcmVudCBmcm9tIG5vcm1hbCBleHRlbnNpb24uLiBpZiB3ZSBleHRlbmQgYW4gZXh0ZW5kIHRoZW4gd2UgYXJlIG5vdCBqdXN0IGNvcHlpbmcsIGFsdGVyaW5nIGFuZCBwYXN0aW5nCgkJLy8gdGhlIHNlbGVjdG9yIHdlIHdvdWxkIGRvIG5vcm1hbGx5LCBidXQgd2UgYXJlIGFsc28gYWRkaW5nIGFuIGV4dGVuZCB3aXRoIHRoZSBzYW1lIHRhcmdldCBzZWxlY3RvcgoJCS8vIHRoaXMgbWVhbnMgdGhpcyBuZXcgZXh0ZW5kIGNhbiB0aGVuIGdvIGFuZCBhbHRlciBvdGhlciBleHRlbmRzCgkJLy8KCQkvLyB0aGlzIG1ldGhvZCBkZWFscyB3aXRoIGFsbCB0aGUgY2hhaW5pbmcgd29yayAtIHdpdGhvdXQgaXQsIGV4dGVuZCBpcyBmbGF0IGFuZCBkb2Vzbid0IHdvcmsgb24gb3RoZXIgZXh0ZW5kIHNlbGVjdG9ycwoJCS8vIHRoaXMgaXMgYWxzbyB0aGUgbW9zdCBleHBlbnNpdmUuLiBhbmQgYSBtYXRjaCBvbiBvbmUgc2VsZWN0b3IgY2FuIGNhdXNlIGFuIGV4dGVuc2lvbiBvZiBhIHNlbGVjdG9yIHdlIGhhZCBhbHJlYWR5IHByb2Nlc3NlZCBpZgoJCS8vIHdlIGxvb2sgYXQgZWFjaCBzZWxlY3RvciBhdCBhIHRpbWUsIGFzIGlzIGRvbmUgaW4gdmlzaXRSdWxlc2V0CgoJCSRleHRlbmRzVG9BZGQgPSBhcnJheSgpOwoKCgkJLy9sb29wIHRocm91Z2ggY29tcGFyaW5nIGV2ZXJ5IGV4dGVuZCB3aXRoIGV2ZXJ5IHRhcmdldCBleHRlbmQuCgkJLy8gYSB0YXJnZXQgZXh0ZW5kIGlzIHRoZSBvbmUgb24gdGhlIHJ1bGVzZXQgd2UgYXJlIGxvb2tpbmcgYXQgY29weS9lZGl0L3Bhc3RpbmcgaW4gcGxhY2UKCQkvLyBlLmcuIC5hOmV4dGVuZCguYikge30gYW5kIC5iOmV4dGVuZCguYykge30gdGhlbiB0aGUgZmlyc3QgZXh0ZW5kIGV4dGVuZHMgdGhlIHNlY29uZCBvbmUKCQkvLyBhbmQgdGhlIHNlY29uZCBpcyB0aGUgdGFyZ2V0LgoJCS8vIHRoZSBzZXBlcmF0aW9uIGludG8gdHdvIGxpc3RzIGFsbG93cyB1cyB0byBwcm9jZXNzIGEgc3Vic2V0IG9mIGNoYWlucyB3aXRoIGEgYmlnZ2VyIHNldCwgYXMgaXMgdGhlCgkJLy8gY2FzZSB3aGVuIHByb2Nlc3NpbmcgbWVkaWEgcXVlcmllcwoJCWZvciggJGV4dGVuZEluZGV4ID0gMCwgJGV4dGVuZHNMaXN0X2xlbiA9IGNvdW50KCRleHRlbmRzTGlzdCk7ICRleHRlbmRJbmRleCA8ICRleHRlbmRzTGlzdF9sZW47ICRleHRlbmRJbmRleCsrICl7CgkJCWZvciggJHRhcmdldEV4dGVuZEluZGV4ID0gMDsgJHRhcmdldEV4dGVuZEluZGV4IDwgY291bnQoJGV4dGVuZHNMaXN0VGFyZ2V0KTsgJHRhcmdldEV4dGVuZEluZGV4KysgKXsKCgkJCQkkZXh0ZW5kID0gJGV4dGVuZHNMaXN0WyRleHRlbmRJbmRleF07CgkJCQkkdGFyZ2V0RXh0ZW5kID0gJGV4dGVuZHNMaXN0VGFyZ2V0WyR0YXJnZXRFeHRlbmRJbmRleF07CgoJCQkJLy8gbG9vayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcwoJCQkJaWYoIGluX2FycmF5KCR0YXJnZXRFeHRlbmQtPm9iamVjdF9pZCwgJGV4dGVuZC0+cGFyZW50X2lkcyx0cnVlKSApewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoKCQkJCS8vIGZpbmQgYSBtYXRjaCBpbiB0aGUgdGFyZ2V0IGV4dGVuZHMgc2VsZiBzZWxlY3RvciAodGhlIGJpdCBiZWZvcmUgOmV4dGVuZCkKCQkJCSRzZWxlY3RvclBhdGggPSBhcnJheSggJHRhcmdldEV4dGVuZC0+c2VsZlNlbGVjdG9yc1swXSApOwoJCQkJJG1hdGNoZXMgPSAkdGhpcy0+ZmluZE1hdGNoKCAkZXh0ZW5kLCAkc2VsZWN0b3JQYXRoKTsKCgoJCQkJaWYoICRtYXRjaGVzICl7CgoJCQkJCS8vIHdlIGZvdW5kIGEgbWF0Y2gsIHNvIGZvciBlYWNoIHNlbGYgc2VsZWN0b3IuLgoJCQkJCWZvcmVhY2goJGV4dGVuZC0+c2VsZlNlbGVjdG9ycyBhcyAkc2VsZlNlbGVjdG9yICl7CgoKCQkJCQkJLy8gcHJvY2VzcyB0aGUgZXh0ZW5kIGFzIHVzdWFsCgkJCQkJCSRuZXdTZWxlY3RvciA9ICR0aGlzLT5leHRlbmRTZWxlY3RvciggJG1hdGNoZXMsICRzZWxlY3RvclBhdGgsICRzZWxmU2VsZWN0b3IpOwoKCQkJCQkJLy8gYnV0IG5vdyB3ZSBjcmVhdGUgYSBuZXcgZXh0ZW5kIGZyb20gaXQKCQkJCQkJJG5ld0V4dGVuZCA9IG5ldyBMZXNzX1RyZWVfRXh0ZW5kKCAkdGFyZ2V0RXh0ZW5kLT5zZWxlY3RvciwgJHRhcmdldEV4dGVuZC0+b3B0aW9uLCAwKTsKCQkJCQkJJG5ld0V4dGVuZC0+c2VsZlNlbGVjdG9ycyA9ICRuZXdTZWxlY3RvcjsKCgkJCQkJCS8vIGFkZCB0aGUgZXh0ZW5kIG9udG8gdGhlIGxpc3Qgb2YgZXh0ZW5kcyBmb3IgdGhhdCBzZWxlY3RvcgoJCQkJCQllbmQoJG5ld1NlbGVjdG9yKS0+ZXh0ZW5kTGlzdCA9IGFycmF5KCRuZXdFeHRlbmQpOwoJCQkJCQkvLyRuZXdTZWxlY3RvclsgY291bnQoJG5ld1NlbGVjdG9yKS0xXS0+ZXh0ZW5kTGlzdCA9IGFycmF5KCRuZXdFeHRlbmQpOwoKCQkJCQkJLy8gcmVjb3JkIHRoYXQgd2UgbmVlZCB0byBhZGQgaXQuCgkJCQkJCSRleHRlbmRzVG9BZGRbXSA9ICRuZXdFeHRlbmQ7CgkJCQkJCSRuZXdFeHRlbmQtPnJ1bGVzZXQgPSAkdGFyZ2V0RXh0ZW5kLT5ydWxlc2V0OwoKCQkJCQkJLy9yZW1lbWJlciBpdHMgcGFyZW50cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcwoJCQkJCQkkbmV3RXh0ZW5kLT5wYXJlbnRfaWRzID0gYXJyYXlfbWVyZ2UoJG5ld0V4dGVuZC0+cGFyZW50X2lkcywkdGFyZ2V0RXh0ZW5kLT5wYXJlbnRfaWRzLCRleHRlbmQtPnBhcmVudF9pZHMpOwoKCQkJCQkJLy8gb25seSBwcm9jZXNzIHRoZSBzZWxlY3RvciBvbmNlLi4gaWYgd2UgaGF2ZSA6ZXh0ZW5kKC5hLC5iKSB0aGVuIG11bHRpcGxlCgkJCQkJCS8vIGV4dGVuZHMgd2lsbCBsb29rIGF0IHRoZSBzYW1lIHNlbGVjdG9yIHBhdGgsIHNvIHdoZW4gZXh0ZW5kaW5nCgkJCQkJCS8vIHdlIGtub3cgdGhhdCBhbnkgb3RoZXJzIHdpbGwgYmUgZHVwbGljYXRlcyBpbiB0ZXJtcyBvZiB3aGF0IGlzIGFkZGVkIHRvIHRoZSBjc3MKCQkJCQkJaWYoICR0YXJnZXRFeHRlbmQtPmZpcnN0RXh0ZW5kT25UaGlzU2VsZWN0b3JQYXRoICl7CgkJCQkJCQkkbmV3RXh0ZW5kLT5maXJzdEV4dGVuZE9uVGhpc1NlbGVjdG9yUGF0aCA9IHRydWU7CgkJCQkJCQkkdGFyZ2V0RXh0ZW5kLT5ydWxlc2V0LT5wYXRoc1tdID0gJG5ld1NlbGVjdG9yOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlpZiggJGV4dGVuZHNUb0FkZCApewoJCQkvLyB0cnkgdG8gZGV0ZWN0IGNpcmN1bGFyIHJlZmVyZW5jZXMgdG8gc3RvcCBhIHN0YWNrIG92ZXJmbG93LgoJCQkvLyBtYXkgbm8gbG9uZ2VyIGJlIG5lZWRlZC4JCQkkdGhpcy0+ZXh0ZW5kQ2hhaW5Db3VudCsrOwoJCQlpZiggJGl0ZXJhdGlvbkNvdW50ID4gMTAwKSB7CgoJCQkJdHJ5ewoJCQkJCSRzZWxlY3Rvck9uZSA9ICRleHRlbmRzVG9BZGRbMF0tPnNlbGZTZWxlY3RvcnNbMF0tPnRvQ1NTKCk7CgkJCQkJJHNlbGVjdG9yVHdvID0gJGV4dGVuZHNUb0FkZFswXS0+c2VsZWN0b3ItPnRvQ1NTKCk7CgkJCQl9Y2F0Y2goRXhjZXB0aW9uICRlKXsKCQkJCQkkc2VsZWN0b3JPbmUgPSAie3VuYWJsZSB0byBjYWxjdWxhdGV9IjsKCQkJCQkkc2VsZWN0b3JUd28gPSAie3VuYWJsZSB0byBjYWxjdWxhdGV9IjsKCQkJCX0KCgkJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fUGFyc2VyKCJleHRlbmQgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkLiBPbmUgb2YgdGhlIGNpcmN1bGFyIGV4dGVuZHMgaXMgY3VycmVudGx5OiIgLiAkc2VsZWN0b3JPbmUgLiAiOmV4dGVuZCgiIC4gJHNlbGVjdG9yVHdvIC4gIikiKTsKCQkJfQoKCQkJLy8gbm93IHByb2Nlc3MgdGhlIG5ldyBleHRlbmRzIG9uIHRoZSBleGlzdGluZyBydWxlcyBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgYSBleHRlbmRpbmcgYiBleHRlbmRpbmcgYyBlY3RlbmRpbmcgZCBleHRlbmRpbmcgZS4uLgoJCQkkZXh0ZW5kc1RvQWRkID0gJHRoaXMtPmRvRXh0ZW5kQ2hhaW5pbmcoICRleHRlbmRzVG9BZGQsICRleHRlbmRzTGlzdFRhcmdldCwgJGl0ZXJhdGlvbkNvdW50KzEpOwoJCX0KCgkJcmV0dXJuIGFycmF5X21lcmdlKCRleHRlbmRzTGlzdCwgJGV4dGVuZHNUb0FkZCk7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiB2aXNpdFJ1bGUoICRydWxlTm9kZSwgJiR2aXNpdERlZXBlciApewoJCSR2aXNpdERlZXBlciA9IGZhbHNlOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiB2aXNpdE1peGluRGVmaW5pdGlvbiggJG1peGluRGVmaW5pdGlvbk5vZGUsICYkdmlzaXREZWVwZXIgKXsKCQkkdmlzaXREZWVwZXIgPSBmYWxzZTsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gdmlzaXRTZWxlY3RvciggJHNlbGVjdG9yTm9kZSwgJiR2aXNpdERlZXBlciApewoJCSR2aXNpdERlZXBlciA9IGZhbHNlOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiB2aXNpdFJ1bGVzZXQoJHJ1bGVzZXROb2RlKXsKCgoJCWlmKCAkcnVsZXNldE5vZGUtPnJvb3QgKXsKCQkJcmV0dXJuOwoJCX0KCgkJJGFsbEV4dGVuZHMJPSBlbmQoJHRoaXMtPmFsbEV4dGVuZHNTdGFjayk7CgkJJHBhdGhzX2xlbiA9IGNvdW50KCRydWxlc2V0Tm9kZS0+cGF0aHMpOwoKCQkvLyBsb29rIGF0IGVhY2ggc2VsZWN0b3IgcGF0aCBpbiB0aGUgcnVsZXNldCwgZmluZCBhbnkgZXh0ZW5kIG1hdGNoZXMgYW5kIHRoZW4gY29weSwgZmluZCBhbmQgcmVwbGFjZQoJCWZvcmVhY2goJGFsbEV4dGVuZHMgYXMgJGFsbEV4dGVuZCl7CgkJCWZvcigkcGF0aEluZGV4ID0gMDsgJHBhdGhJbmRleCA8ICRwYXRoc19sZW47ICRwYXRoSW5kZXgrKyApewoKCQkJCS8vIGV4dGVuZGluZyBleHRlbmRzIGhhcHBlbnMgaW5pdGlhbGx5LCBiZWZvcmUgdGhlIG1haW4gcGFzcwoJCQkJaWYoIGlzc2V0KCRydWxlc2V0Tm9kZS0+ZXh0ZW5kT25FdmVyeVBhdGgpICYmICRydWxlc2V0Tm9kZS0+ZXh0ZW5kT25FdmVyeVBhdGggKXsKCQkJCQljb250aW51ZTsKCQkJCX0KCgkJCQkkc2VsZWN0b3JQYXRoID0gJHJ1bGVzZXROb2RlLT5wYXRoc1skcGF0aEluZGV4XTsKCgkJCQlpZiggZW5kKCRzZWxlY3RvclBhdGgpLT5leHRlbmRMaXN0ICl7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJJHRoaXMtPkV4dGVuZE1hdGNoKCAkcnVsZXNldE5vZGUsICRhbGxFeHRlbmQsICRzZWxlY3RvclBhdGgpOwoKCQkJfQoJCX0KCX0KCgoJcHJpdmF0ZSBmdW5jdGlvbiBFeHRlbmRNYXRjaCggJHJ1bGVzZXROb2RlLCAkZXh0ZW5kLCAkc2VsZWN0b3JQYXRoICl7CgkJJG1hdGNoZXMgPSAkdGhpcy0+ZmluZE1hdGNoKCRleHRlbmQsICRzZWxlY3RvclBhdGgpOwoKCQlpZiggJG1hdGNoZXMgKXsKCQkJZm9yZWFjaCgkZXh0ZW5kLT5zZWxmU2VsZWN0b3JzIGFzICRzZWxmU2VsZWN0b3IgKXsKCQkJCSRydWxlc2V0Tm9kZS0+cGF0aHNbXSA9ICR0aGlzLT5leHRlbmRTZWxlY3RvcigkbWF0Y2hlcywgJHNlbGVjdG9yUGF0aCwgJHNlbGZTZWxlY3Rvcik7CgkJCX0KCQl9Cgl9CgoKCglwcml2YXRlIGZ1bmN0aW9uIGZpbmRNYXRjaCgkZXh0ZW5kLCAkaGF5c3RhY2tTZWxlY3RvclBhdGggKXsKCgoJCWlmKCAhJHRoaXMtPkhhc01hdGNoZXMoJGV4dGVuZCwgJGhheXN0YWNrU2VsZWN0b3JQYXRoKSApewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCgkJLy8KCQkvLyBsb29rIHRocm91Z2ggdGhlIGhheXN0YWNrIHNlbGVjdG9yIHBhdGggdG8gdHJ5IGFuZCBmaW5kIHRoZSBuZWVkbGUgLSBleHRlbmQuc2VsZWN0b3IKCQkvLyByZXR1cm5zIGFuIGFycmF5IG9mIHNlbGVjdG9yIG1hdGNoZXMgdGhhdCBjYW4gdGhlbiBiZSByZXBsYWNlZAoJCS8vCgkJJG5lZWRsZUVsZW1lbnRzID0gJGV4dGVuZC0+c2VsZWN0b3ItPmVsZW1lbnRzOwoJCSRwb3RlbnRpYWxNYXRjaGVzID0gYXJyYXkoKTsKCQkkcG90ZW50aWFsTWF0Y2hlc19sZW4gPSAwOwoJCSRwb3RlbnRpYWxNYXRjaCA9IG51bGw7CgkJJG1hdGNoZXMgPSBhcnJheSgpOwoKCgoJCS8vIGxvb3AgdGhyb3VnaCB0aGUgaGF5c3RhY2sgZWxlbWVudHMKCQkkaGF5c3RhY2tfcGF0aF9sZW4gPSBjb3VudCgkaGF5c3RhY2tTZWxlY3RvclBhdGgpOwoJCWZvcigkaGF5c3RhY2tTZWxlY3RvckluZGV4ID0gMDsgJGhheXN0YWNrU2VsZWN0b3JJbmRleCA8ICRoYXlzdGFja19wYXRoX2xlbjsgJGhheXN0YWNrU2VsZWN0b3JJbmRleCsrICl7CgkJCSRoYWNrc3RhY2tTZWxlY3RvciA9ICRoYXlzdGFja1NlbGVjdG9yUGF0aFskaGF5c3RhY2tTZWxlY3RvckluZGV4XTsKCgkJCSRoYXlzdGFja19lbGVtZW50c19sZW4gPSBjb3VudCgkaGFja3N0YWNrU2VsZWN0b3ItPmVsZW1lbnRzKTsKCQkJZm9yKCRoYWNrc3RhY2tFbGVtZW50SW5kZXggPSAwOyAkaGFja3N0YWNrRWxlbWVudEluZGV4IDwgJGhheXN0YWNrX2VsZW1lbnRzX2xlbjsgJGhhY2tzdGFja0VsZW1lbnRJbmRleCsrICl7CgoJCQkJJGhheXN0YWNrRWxlbWVudCA9ICRoYWNrc3RhY2tTZWxlY3Rvci0+ZWxlbWVudHNbJGhhY2tzdGFja0VsZW1lbnRJbmRleF07CgoJCQkJLy8gaWYgd2UgYWxsb3cgZWxlbWVudHMgYmVmb3JlIG91ciBtYXRjaCB3ZSBjYW4gYWRkIGEgcG90ZW50aWFsIG1hdGNoIGV2ZXJ5IHRpbWUuIG90aGVyd2lzZSBvbmx5IGF0IHRoZSBmaXJzdCBlbGVtZW50LgoJCQkJaWYoICRleHRlbmQtPmFsbG93QmVmb3JlIHx8ICgkaGF5c3RhY2tTZWxlY3RvckluZGV4ID09PSAwICYmICRoYWNrc3RhY2tFbGVtZW50SW5kZXggPT09IDApICl7CgkJCQkJJHBvdGVudGlhbE1hdGNoZXNbXSA9IGFycmF5KCdwYXRoSW5kZXgnPT4gJGhheXN0YWNrU2VsZWN0b3JJbmRleCwgJ2luZGV4Jz0+ICRoYWNrc3RhY2tFbGVtZW50SW5kZXgsICdtYXRjaGVkJz0+IDAsICdpbml0aWFsQ29tYmluYXRvcic9PiAkaGF5c3RhY2tFbGVtZW50LT5jb21iaW5hdG9yKTsKCQkJCQkkcG90ZW50aWFsTWF0Y2hlc19sZW4rKzsKCQkJCX0KCgkJCQlmb3IoJGkgPSAwOyAkaSA8ICRwb3RlbnRpYWxNYXRjaGVzX2xlbjsgJGkrKyApewoKCQkJCQkkcG90ZW50aWFsTWF0Y2ggPSAmJHBvdGVudGlhbE1hdGNoZXNbJGldOwoJCQkJCSRwb3RlbnRpYWxNYXRjaCA9ICR0aGlzLT5Qb3RlbnRpYWxNYXRjaCggJHBvdGVudGlhbE1hdGNoLCAkbmVlZGxlRWxlbWVudHMsICRoYXlzdGFja0VsZW1lbnQsICRoYWNrc3RhY2tFbGVtZW50SW5kZXggKTsKCgoJCQkJCS8vIGlmIHdlIGFyZSBzdGlsbCB2YWxpZCBhbmQgaGF2ZSBmaW5pc2hlZCwgdGVzdCB3aGV0aGVyIHdlIGhhdmUgZWxlbWVudHMgYWZ0ZXIgYW5kIHdoZXRoZXIgdGhlc2UgYXJlIGFsbG93ZWQKCQkJCQlpZiggJHBvdGVudGlhbE1hdGNoICYmICRwb3RlbnRpYWxNYXRjaFsnbWF0Y2hlZCddID09PSAkZXh0ZW5kLT5zZWxlY3Rvci0+ZWxlbWVudHNfbGVuICl7CgkJCQkJCSRwb3RlbnRpYWxNYXRjaFsnZmluaXNoZWQnXSA9IHRydWU7CgoJCQkJCQlpZiggISRleHRlbmQtPmFsbG93QWZ0ZXIgJiYgKCRoYWNrc3RhY2tFbGVtZW50SW5kZXgrMSA8ICRoYXlzdGFja19lbGVtZW50c19sZW4gfHwgJGhheXN0YWNrU2VsZWN0b3JJbmRleCsxIDwgJGhheXN0YWNrX3BhdGhfbGVuKSApewoJCQkJCQkJJHBvdGVudGlhbE1hdGNoID0gbnVsbDsKCQkJCQkJfQoJCQkJCX0KCgkJCQkJLy8gaWYgbnVsbCB3ZSByZW1vdmUsIGlmIG5vdCwgd2UgYXJlIHN0aWxsIHZhbGlkLCBzbyBlaXRoZXIgcHVzaCBhcyBhIHZhbGlkIG1hdGNoIG9yIGNvbnRpbnVlCgkJCQkJaWYoICRwb3RlbnRpYWxNYXRjaCApewoJCQkJCQlpZiggJHBvdGVudGlhbE1hdGNoWydmaW5pc2hlZCddICl7CgkJCQkJCQkkcG90ZW50aWFsTWF0Y2hbJ2xlbmd0aCddID0gJGV4dGVuZC0+c2VsZWN0b3ItPmVsZW1lbnRzX2xlbjsKCQkJCQkJCSRwb3RlbnRpYWxNYXRjaFsnZW5kUGF0aEluZGV4J10gPSAkaGF5c3RhY2tTZWxlY3RvckluZGV4OwoJCQkJCQkJJHBvdGVudGlhbE1hdGNoWydlbmRQYXRoRWxlbWVudEluZGV4J10gPSAkaGFja3N0YWNrRWxlbWVudEluZGV4ICsgMTsgLy8gaW5kZXggYWZ0ZXIgZW5kIG9mIG1hdGNoCgkJCQkJCQkkcG90ZW50aWFsTWF0Y2hlcyA9IGFycmF5KCk7IC8vIHdlIGRvbid0IGFsbG93IG1hdGNoZXMgdG8gb3ZlcmxhcCwgc28gc3RhcnQgbWF0Y2hpbmcgYWdhaW4KCQkJCQkJCSRwb3RlbnRpYWxNYXRjaGVzX2xlbiA9IDA7CgkJCQkJCQkkbWF0Y2hlc1tdID0gJHBvdGVudGlhbE1hdGNoOwoJCQkJCQl9CgkJCQkJCWNvbnRpbnVlOwoJCQkJCX0KCgkJCQkJYXJyYXlfc3BsaWNlKCRwb3RlbnRpYWxNYXRjaGVzLCAkaSwgMSk7CgkJCQkJJHBvdGVudGlhbE1hdGNoZXNfbGVuLS07CgkJCQkJJGktLTsKCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuICRtYXRjaGVzOwoJfQoKCgkvLyBCZWZvcmUgZ29pbmcgdGhyb3VnaCBhbGwgdGhlIG5lc3RlZCBsb29wcywgbGV0cyBjaGVjayB0byBzZWUgaWYgYSBtYXRjaCBpcyBwb3NzaWJsZQoJLy8gUmVkdWNlcyBCb290c3RyYXAgMy4xIGNvbXBpbGUgdGltZSBmcm9tIH42LjVzIHRvIH41LjZzCglwcml2YXRlIGZ1bmN0aW9uIEhhc01hdGNoZXMoJGV4dGVuZCwgJGhheXN0YWNrU2VsZWN0b3JQYXRoKXsKCgkJaWYoICEkZXh0ZW5kLT5zZWxlY3Rvci0+Y2FjaGVhYmxlICl7CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJJGZpcnN0X2VsID0gJGV4dGVuZC0+c2VsZWN0b3ItPl9vZWxlbWVudHNbMF07CgoJCWZvcmVhY2goJGhheXN0YWNrU2VsZWN0b3JQYXRoIGFzICRoYWNrc3RhY2tTZWxlY3Rvcil7CgkJCWlmKCAhJGhhY2tzdGFja1NlbGVjdG9yLT5jYWNoZWFibGUgKXsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgoJCQlpZiggaW5fYXJyYXkoJGZpcnN0X2VsLCAkaGFja3N0YWNrU2VsZWN0b3ItPl9vZWxlbWVudHMpICl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCgkvKioKCSAqIEBwYXJhbSBpbnRlZ2VyICRoYWNrc3RhY2tFbGVtZW50SW5kZXgKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBQb3RlbnRpYWxNYXRjaCggJHBvdGVudGlhbE1hdGNoLCAkbmVlZGxlRWxlbWVudHMsICRoYXlzdGFja0VsZW1lbnQsICRoYWNrc3RhY2tFbGVtZW50SW5kZXggKXsKCgoJCWlmKCAkcG90ZW50aWFsTWF0Y2hbJ21hdGNoZWQnXSA+IDAgKXsKCgkJCS8vIHNlbGVjdG9ycyBhZGQgIiAiIG9udG8gdGhlIGZpcnN0IGVsZW1lbnQuIFdoZW4gd2UgdXNlICYgaXQgam9pbnMgdGhlIHNlbGVjdG9ycyB0b2dldGhlciwgYnV0IGlmIHdlIGRvbid0CgkJCS8vIHRoZW4gZWFjaCBzZWxlY3RvciBpbiBoYXlzdGFja1NlbGVjdG9yUGF0aCBoYXMgYSBzcGFjZSBiZWZvcmUgaXQgYWRkZWQgaW4gdGhlIHRvQ1NTIHBoYXNlLiBzbyB3ZSBuZWVkIHRvIHdvcmsgb3V0CgkJCS8vIHdoYXQgdGhlIHJlc3VsdGluZyBjb21iaW5hdG9yIHdpbGwgYmUKCQkJJHRhcmdldENvbWJpbmF0b3IgPSAkaGF5c3RhY2tFbGVtZW50LT5jb21iaW5hdG9yOwoJCQlpZiggJHRhcmdldENvbWJpbmF0b3IgPT09ICcnICYmICRoYWNrc3RhY2tFbGVtZW50SW5kZXggPT09IDAgKXsKCQkJCSR0YXJnZXRDb21iaW5hdG9yID0gJyAnOwoJCQl9CgoJCQlpZiggJG5lZWRsZUVsZW1lbnRzWyAkcG90ZW50aWFsTWF0Y2hbJ21hdGNoZWQnXSBdLT5jb21iaW5hdG9yICE9PSAkdGFyZ2V0Q29tYmluYXRvciApewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQl9CgoJCS8vIGlmIHdlIGRvbid0IG1hdGNoLCBudWxsIG91ciBtYXRjaCB0byBpbmRpY2F0ZSBmYWlsdXJlCgkJaWYoICEkdGhpcy0+aXNFbGVtZW50VmFsdWVzRXF1YWwoICRuZWVkbGVFbGVtZW50c1skcG90ZW50aWFsTWF0Y2hbJ21hdGNoZWQnXSBdLT52YWx1ZSwgJGhheXN0YWNrRWxlbWVudC0+dmFsdWUpICl7CgkJCXJldHVybiBudWxsOwoJCX0KCgkJJHBvdGVudGlhbE1hdGNoWydmaW5pc2hlZCddID0gZmFsc2U7CgkJJHBvdGVudGlhbE1hdGNoWydtYXRjaGVkJ10rKzsKCgkJcmV0dXJuICRwb3RlbnRpYWxNYXRjaDsKCX0KCgoJcHJpdmF0ZSBmdW5jdGlvbiBpc0VsZW1lbnRWYWx1ZXNFcXVhbCggJGVsZW1lbnRWYWx1ZTEsICRlbGVtZW50VmFsdWUyICl7CgoJCWlmKCAkZWxlbWVudFZhbHVlMSA9PT0gJGVsZW1lbnRWYWx1ZTIgKXsKCQkJcmV0dXJuIHRydWU7CgkJfQoKCQlpZiggaXNfc3RyaW5nKCRlbGVtZW50VmFsdWUxKSB8fCBpc19zdHJpbmcoJGVsZW1lbnRWYWx1ZTIpICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpZiggJGVsZW1lbnRWYWx1ZTEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfQXR0cmlidXRlICl7CgkJCXJldHVybiAkdGhpcy0+aXNBdHRyaWJ1dGVWYWx1ZXNFcXVhbCggJGVsZW1lbnRWYWx1ZTEsICRlbGVtZW50VmFsdWUyICk7CgkJfQoKCQkkZWxlbWVudFZhbHVlMSA9ICRlbGVtZW50VmFsdWUxLT52YWx1ZTsKCQlpZiggJGVsZW1lbnRWYWx1ZTEgaW5zdGFuY2VvZiBMZXNzX1RyZWVfU2VsZWN0b3IgKXsKCQkJcmV0dXJuICR0aGlzLT5pc1NlbGVjdG9yVmFsdWVzRXF1YWwoICRlbGVtZW50VmFsdWUxLCAkZWxlbWVudFZhbHVlMiApOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCgkvKioKCSAqIEBwYXJhbSBMZXNzX1RyZWVfU2VsZWN0b3IgJGVsZW1lbnRWYWx1ZTEKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBpc1NlbGVjdG9yVmFsdWVzRXF1YWwoICRlbGVtZW50VmFsdWUxLCAkZWxlbWVudFZhbHVlMiApewoKCQkkZWxlbWVudFZhbHVlMiA9ICRlbGVtZW50VmFsdWUyLT52YWx1ZTsKCQlpZiggISgkZWxlbWVudFZhbHVlMiBpbnN0YW5jZW9mIExlc3NfVHJlZV9TZWxlY3RvcikgfHwgJGVsZW1lbnRWYWx1ZTEtPmVsZW1lbnRzX2xlbiAhPT0gJGVsZW1lbnRWYWx1ZTItPmVsZW1lbnRzX2xlbiApewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlmb3IoICRpID0gMDsgJGkgPCAkZWxlbWVudFZhbHVlMS0+ZWxlbWVudHNfbGVuOyAkaSsrICl7CgoJCQlpZiggJGVsZW1lbnRWYWx1ZTEtPmVsZW1lbnRzWyRpXS0+Y29tYmluYXRvciAhPT0gJGVsZW1lbnRWYWx1ZTItPmVsZW1lbnRzWyRpXS0+Y29tYmluYXRvciApewoJCQkJaWYoICRpICE9PSAwIHx8ICgkZWxlbWVudFZhbHVlMS0+ZWxlbWVudHNbJGldLT5jb21iaW5hdG9yIHx8ICcgJykgIT09ICgkZWxlbWVudFZhbHVlMi0+ZWxlbWVudHNbJGldLT5jb21iaW5hdG9yIHx8ICcgJykgKXsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCWlmKCAhJHRoaXMtPmlzRWxlbWVudFZhbHVlc0VxdWFsKCRlbGVtZW50VmFsdWUxLT5lbGVtZW50c1skaV0tPnZhbHVlLCAkZWxlbWVudFZhbHVlMi0+ZWxlbWVudHNbJGldLT52YWx1ZSkgKXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCgkJcmV0dXJuIHRydWU7Cgl9CgoKCS8qKgoJICogQHBhcmFtIExlc3NfVHJlZV9BdHRyaWJ1dGUgJGVsZW1lbnRWYWx1ZTEKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBpc0F0dHJpYnV0ZVZhbHVlc0VxdWFsKCAkZWxlbWVudFZhbHVlMSwgJGVsZW1lbnRWYWx1ZTIgKXsKCgkJaWYoICRlbGVtZW50VmFsdWUxLT5vcCAhPT0gJGVsZW1lbnRWYWx1ZTItPm9wIHx8ICRlbGVtZW50VmFsdWUxLT5rZXkgIT09ICRlbGVtZW50VmFsdWUyLT5rZXkgKXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJaWYoICEkZWxlbWVudFZhbHVlMS0+dmFsdWUgfHwgISRlbGVtZW50VmFsdWUyLT52YWx1ZSApewoJCQlpZiggJGVsZW1lbnRWYWx1ZTEtPnZhbHVlIHx8ICRlbGVtZW50VmFsdWUyLT52YWx1ZSApIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgoJCSRlbGVtZW50VmFsdWUxID0gKCRlbGVtZW50VmFsdWUxLT52YWx1ZS0+dmFsdWUgPyAkZWxlbWVudFZhbHVlMS0+dmFsdWUtPnZhbHVlIDogJGVsZW1lbnRWYWx1ZTEtPnZhbHVlICk7CgkJJGVsZW1lbnRWYWx1ZTIgPSAoJGVsZW1lbnRWYWx1ZTItPnZhbHVlLT52YWx1ZSA/ICRlbGVtZW50VmFsdWUyLT52YWx1ZS0+dmFsdWUgOiAkZWxlbWVudFZhbHVlMi0+dmFsdWUgKTsKCgkJcmV0dXJuICRlbGVtZW50VmFsdWUxID09PSAkZWxlbWVudFZhbHVlMjsKCX0KCgoJcHJpdmF0ZSBmdW5jdGlvbiBleHRlbmRTZWxlY3RvcigkbWF0Y2hlcywgJHNlbGVjdG9yUGF0aCwgJHJlcGxhY2VtZW50U2VsZWN0b3IpewoKCQkvL2ZvciBhIHNldCBvZiBtYXRjaGVzLCByZXBsYWNlIGVhY2ggbWF0Y2ggd2l0aCB0aGUgcmVwbGFjZW1lbnQgc2VsZWN0b3IKCgkJJGN1cnJlbnRTZWxlY3RvclBhdGhJbmRleCA9IDA7CgkJJGN1cnJlbnRTZWxlY3RvclBhdGhFbGVtZW50SW5kZXggPSAwOwoJCSRwYXRoID0gYXJyYXkoKTsKCQkkc2VsZWN0b3JQYXRoX2xlbiA9IGNvdW50KCRzZWxlY3RvclBhdGgpOwoKCQlmb3IoJG1hdGNoSW5kZXggPSAwLCAkbWF0Y2hlc19sZW4gPSBjb3VudCgkbWF0Y2hlcyk7ICRtYXRjaEluZGV4IDwgJG1hdGNoZXNfbGVuOyAkbWF0Y2hJbmRleCsrICl7CgoKCQkJJG1hdGNoID0gJG1hdGNoZXNbJG1hdGNoSW5kZXhdOwoJCQkkc2VsZWN0b3IgPSAkc2VsZWN0b3JQYXRoWyAkbWF0Y2hbJ3BhdGhJbmRleCddIF07CgoJCQkkZmlyc3RFbGVtZW50ID0gbmV3IExlc3NfVHJlZV9FbGVtZW50KAoJCQkJJG1hdGNoWydpbml0aWFsQ29tYmluYXRvciddLAoJCQkJJHJlcGxhY2VtZW50U2VsZWN0b3ItPmVsZW1lbnRzWzBdLT52YWx1ZSwKCQkJCSRyZXBsYWNlbWVudFNlbGVjdG9yLT5lbGVtZW50c1swXS0+aW5kZXgsCgkJCQkkcmVwbGFjZW1lbnRTZWxlY3Rvci0+ZWxlbWVudHNbMF0tPmN1cnJlbnRGaWxlSW5mbwoJCQkpOwoKCQkJaWYoICRtYXRjaFsncGF0aEluZGV4J10gPiAkY3VycmVudFNlbGVjdG9yUGF0aEluZGV4ICYmICRjdXJyZW50U2VsZWN0b3JQYXRoRWxlbWVudEluZGV4ID4gMCApewoJCQkJJGxhc3RfcGF0aCA9IGVuZCgkcGF0aCk7CgkJCQkkbGFzdF9wYXRoLT5lbGVtZW50cyA9IGFycmF5X21lcmdlKCAkbGFzdF9wYXRoLT5lbGVtZW50cywgYXJyYXlfc2xpY2UoICRzZWxlY3RvclBhdGhbJGN1cnJlbnRTZWxlY3RvclBhdGhJbmRleF0tPmVsZW1lbnRzLCAkY3VycmVudFNlbGVjdG9yUGF0aEVsZW1lbnRJbmRleCkpOwoJCQkJJGN1cnJlbnRTZWxlY3RvclBhdGhFbGVtZW50SW5kZXggPSAwOwoJCQkJJGN1cnJlbnRTZWxlY3RvclBhdGhJbmRleCsrOwoJCQl9CgoJCQkkbmV3RWxlbWVudHMgPSBhcnJheV9tZXJnZSgKCQkJCWFycmF5X3NsaWNlKCRzZWxlY3Rvci0+ZWxlbWVudHMsICRjdXJyZW50U2VsZWN0b3JQYXRoRWxlbWVudEluZGV4LCAoJG1hdGNoWydpbmRleCddIC0gJGN1cnJlbnRTZWxlY3RvclBhdGhFbGVtZW50SW5kZXgpICkgLy8gbGFzdCBwYXJhbWV0ZXIgb2YgYXJyYXlfc2xpY2UgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGxhc3QgcGFyYW1ldGVyIG9mIGphdmFzY3JpcHQncyBzbGljZQoJCQkJLCBhcnJheSgkZmlyc3RFbGVtZW50KQoJCQkJLCBhcnJheV9zbGljZSgkcmVwbGFjZW1lbnRTZWxlY3Rvci0+ZWxlbWVudHMsMSkKCQkJCSk7CgoJCQlpZiggJGN1cnJlbnRTZWxlY3RvclBhdGhJbmRleCA9PT0gJG1hdGNoWydwYXRoSW5kZXgnXSAmJiAkbWF0Y2hJbmRleCA+IDAgKXsKCQkJCSRsYXN0X2tleSA9IGNvdW50KCRwYXRoKS0xOwoJCQkJJHBhdGhbJGxhc3Rfa2V5XS0+ZWxlbWVudHMgPSBhcnJheV9tZXJnZSgkcGF0aFskbGFzdF9rZXldLT5lbGVtZW50cywkbmV3RWxlbWVudHMpOwoJCQl9ZWxzZXsKCQkJCSRwYXRoID0gYXJyYXlfbWVyZ2UoICRwYXRoLCBhcnJheV9zbGljZSggJHNlbGVjdG9yUGF0aCwgJGN1cnJlbnRTZWxlY3RvclBhdGhJbmRleCwgJG1hdGNoWydwYXRoSW5kZXgnXSApKTsKCQkJCSRwYXRoW10gPSBuZXcgTGVzc19UcmVlX1NlbGVjdG9yKCAkbmV3RWxlbWVudHMgKTsKCQkJfQoKCQkJJGN1cnJlbnRTZWxlY3RvclBhdGhJbmRleCA9ICRtYXRjaFsnZW5kUGF0aEluZGV4J107CgkJCSRjdXJyZW50U2VsZWN0b3JQYXRoRWxlbWVudEluZGV4ID0gJG1hdGNoWydlbmRQYXRoRWxlbWVudEluZGV4J107CgkJCWlmKCAkY3VycmVudFNlbGVjdG9yUGF0aEVsZW1lbnRJbmRleCA+PSBjb3VudCgkc2VsZWN0b3JQYXRoWyRjdXJyZW50U2VsZWN0b3JQYXRoSW5kZXhdLT5lbGVtZW50cykgKXsKCQkJCSRjdXJyZW50U2VsZWN0b3JQYXRoRWxlbWVudEluZGV4ID0gMDsKCQkJCSRjdXJyZW50U2VsZWN0b3JQYXRoSW5kZXgrKzsKCQkJfQoJCX0KCgkJaWYoICRjdXJyZW50U2VsZWN0b3JQYXRoSW5kZXggPCAkc2VsZWN0b3JQYXRoX2xlbiAmJiAkY3VycmVudFNlbGVjdG9yUGF0aEVsZW1lbnRJbmRleCA+IDAgKXsKCQkJJGxhc3RfcGF0aCA9IGVuZCgkcGF0aCk7CgkJCSRsYXN0X3BhdGgtPmVsZW1lbnRzID0gYXJyYXlfbWVyZ2UoICRsYXN0X3BhdGgtPmVsZW1lbnRzLCBhcnJheV9zbGljZSgkc2VsZWN0b3JQYXRoWyRjdXJyZW50U2VsZWN0b3JQYXRoSW5kZXhdLT5lbGVtZW50cywgJGN1cnJlbnRTZWxlY3RvclBhdGhFbGVtZW50SW5kZXgpKTsKCQkJJGN1cnJlbnRTZWxlY3RvclBhdGhJbmRleCsrOwoJCX0KCgkJJHNsaWNlX2xlbiA9ICRzZWxlY3RvclBhdGhfbGVuIC0gJGN1cnJlbnRTZWxlY3RvclBhdGhJbmRleDsKCQkkcGF0aCA9IGFycmF5X21lcmdlKCRwYXRoLCBhcnJheV9zbGljZSgkc2VsZWN0b3JQYXRoLCAkY3VycmVudFNlbGVjdG9yUGF0aEluZGV4LCAkc2xpY2VfbGVuKSk7CgoJCXJldHVybiAkcGF0aDsKCX0KCgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHZpc2l0TWVkaWEoICRtZWRpYU5vZGUgKXsKCQkkbmV3QWxsRXh0ZW5kcyA9IGFycmF5X21lcmdlKCAkbWVkaWFOb2RlLT5hbGxFeHRlbmRzLCBlbmQoJHRoaXMtPmFsbEV4dGVuZHNTdGFjaykgKTsKCQkkdGhpcy0+YWxsRXh0ZW5kc1N0YWNrW10gPSAkdGhpcy0+ZG9FeHRlbmRDaGFpbmluZygkbmV3QWxsRXh0ZW5kcywgJG1lZGlhTm9kZS0+YWxsRXh0ZW5kcyk7Cgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHZpc2l0TWVkaWFPdXQoKXsKCQlhcnJheV9wb3AoICR0aGlzLT5hbGxFeHRlbmRzU3RhY2sgKTsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gdmlzaXREaXJlY3RpdmUoICRkaXJlY3RpdmVOb2RlICl7CgkJJG5ld0FsbEV4dGVuZHMgPSBhcnJheV9tZXJnZSggJGRpcmVjdGl2ZU5vZGUtPmFsbEV4dGVuZHMsIGVuZCgkdGhpcy0+YWxsRXh0ZW5kc1N0YWNrKSApOwoJCSR0aGlzLT5hbGxFeHRlbmRzU3RhY2tbXSA9ICR0aGlzLT5kb0V4dGVuZENoYWluaW5nKCRuZXdBbGxFeHRlbmRzLCAkZGlyZWN0aXZlTm9kZS0+YWxsRXh0ZW5kcyk7Cgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHZpc2l0RGlyZWN0aXZlT3V0KCl7CgkJYXJyYXlfcG9wKCR0aGlzLT5hbGxFeHRlbmRzU3RhY2spOwoJfQoKfQ==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/Visitor/toCSS.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiB0b0NTUyBWaXNpdG9yCiAqCiAqIEBwYWNrYWdlIExlc3MKICogQHN1YnBhY2thZ2UgdmlzaXRvcgogKi8KY2xhc3MgTGVzc19WaXNpdG9yX3RvQ1NTIGV4dGVuZHMgTGVzc19WaXNpdG9yUmVwbGFjaW5newoKCXByaXZhdGUgJGNoYXJzZXQ7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCl7CgkJcGFyZW50OjpfX2NvbnN0cnVjdCgpOwoJfQoKCS8qKgoJICogQHBhcmFtIExlc3NfVHJlZV9SdWxlc2V0ICRyb290CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBydW4oICRyb290ICl7CgkJcmV0dXJuICR0aGlzLT52aXNpdE9iaigkcm9vdCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHZpc2l0UnVsZSggJHJ1bGVOb2RlICl7CgkJaWYoICRydWxlTm9kZS0+dmFyaWFibGUgKXsKCQkJcmV0dXJuIGFycmF5KCk7CgkJfQoJCXJldHVybiAkcnVsZU5vZGU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHZpc2l0TWl4aW5EZWZpbml0aW9uKCRtaXhpbk5vZGUpewoJCS8vIG1peGluIGRlZmluaXRpb25zIGRvIG5vdCBnZXQgZXZhbCdkIC0gdGhpcyBtZWFucyB0aGV5IGtlZXAgc3RhdGUKCQkvLyBzbyB3ZSBoYXZlIHRvIGNsZWFyIHRoYXQgc3RhdGUgaGVyZSBzbyBpdCBpc24ndCB1c2VkIGlmIHRvQ1NTIGlzIGNhbGxlZCB0d2ljZQoJCSRtaXhpbk5vZGUtPmZyYW1lcyA9IGFycmF5KCk7CgkJcmV0dXJuIGFycmF5KCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHZpc2l0RXh0ZW5kKCl7CgkJcmV0dXJuIGFycmF5KCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHZpc2l0Q29tbWVudCggJGNvbW1lbnROb2RlICl7CgkJaWYoICRjb21tZW50Tm9kZS0+aXNTaWxlbnQoKSApewoJCQlyZXR1cm4gYXJyYXkoKTsKCQl9CgkJcmV0dXJuICRjb21tZW50Tm9kZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdmlzaXRNZWRpYSggJG1lZGlhTm9kZSwgJiR2aXNpdERlZXBlciApewoJCSRtZWRpYU5vZGUtPmFjY2VwdCgkdGhpcyk7CgkJJHZpc2l0RGVlcGVyID0gZmFsc2U7CgoJCWlmKCAhJG1lZGlhTm9kZS0+cnVsZXMgKXsKCQkJcmV0dXJuIGFycmF5KCk7CgkJfQoJCXJldHVybiAkbWVkaWFOb2RlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB2aXNpdERpcmVjdGl2ZSggJGRpcmVjdGl2ZU5vZGUgKXsKCQlpZiggaXNzZXQoJGRpcmVjdGl2ZU5vZGUtPmN1cnJlbnRGaWxlSW5mb1sncmVmZXJlbmNlJ10pICYmICghcHJvcGVydHlfZXhpc3RzKCRkaXJlY3RpdmVOb2RlLCdpc1JlZmVyZW5jZWQnKSB8fCAhJGRpcmVjdGl2ZU5vZGUtPmlzUmVmZXJlbmNlZCkgKXsKCQkJcmV0dXJuIGFycmF5KCk7CgkJfQoJCWlmKCAkZGlyZWN0aXZlTm9kZS0+bmFtZSA9PT0gJ0BjaGFyc2V0JyApewoJCQkvLyBPbmx5IG91dHB1dCB0aGUgZGVidWcgaW5mbyB0b2dldGhlciB3aXRoIHN1YnNlcXVlbnQgQGNoYXJzZXQgZGVmaW5pdGlvbnMKCQkJLy8gYSBjb21tZW50IChvciBAbWVkaWEgc3RhdGVtZW50KSBiZWZvcmUgdGhlIGFjdHVhbCBAY2hhcnNldCBkaXJlY3RpdmUgd291bGQKCQkJLy8gYmUgY29uc2lkZXJlZCBpbGxlZ2FsIGNzcyBhcyBpdCBoYXMgdG8gYmUgb24gdGhlIGZpcnN0IGxpbmUKCQkJaWYoIGlzc2V0KCR0aGlzLT5jaGFyc2V0KSAmJiAkdGhpcy0+Y2hhcnNldCApewoKCQkJCS8vaWYoICRkaXJlY3RpdmVOb2RlLT5kZWJ1Z0luZm8gKXsKCQkJCS8vCSRjb21tZW50ID0gbmV3IExlc3NfVHJlZV9Db21tZW50KCcvKiAnIC4gc3RyX3JlcGxhY2UoIlxuIiwnJywkZGlyZWN0aXZlTm9kZS0+dG9DU1MoKSkuIiAqL1xuIik7CgkJCQkvLwkkY29tbWVudC0+ZGVidWdJbmZvID0gJGRpcmVjdGl2ZU5vZGUtPmRlYnVnSW5mbzsKCQkJCS8vCXJldHVybiAkdGhpcy0+dmlzaXQoJGNvbW1lbnQpOwoJCQkJLy99CgoKCQkJCXJldHVybiBhcnJheSgpOwoJCQl9CgkJCSR0aGlzLT5jaGFyc2V0ID0gdHJ1ZTsKCQl9CgkJcmV0dXJuICRkaXJlY3RpdmVOb2RlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjaGVja1Byb3BlcnRpZXNJblJvb3QoICRydWxlc2V0Tm9kZSApewoKCQlpZiggISRydWxlc2V0Tm9kZS0+Zmlyc3RSb290ICl7CgkJCXJldHVybjsKCQl9CgoJCWZvcmVhY2goJHJ1bGVzZXROb2RlLT5ydWxlcyBhcyAkcnVsZU5vZGUpewoJCQlpZiggJHJ1bGVOb2RlIGluc3RhbmNlb2YgTGVzc19UcmVlX1J1bGUgJiYgISRydWxlTm9kZS0+dmFyaWFibGUgKXsKCQkJCSRtc2cgPSAicHJvcGVydGllcyBtdXN0IGJlIGluc2lkZSBzZWxlY3RvciBibG9ja3MsIHRoZXkgY2Fubm90IGJlIGluIHRoZSByb290LiBJbmRleCAiLiRydWxlTm9kZS0+aW5kZXguKCRydWxlTm9kZS0+Y3VycmVudEZpbGVJbmZvID8gKCcgRmlsZW5hbWU6ICcuJHJ1bGVOb2RlLT5jdXJyZW50RmlsZUluZm9bJ2ZpbGVuYW1lJ10pIDogbnVsbCk7CgkJCQl0aHJvdyBuZXcgTGVzc19FeGNlcHRpb25fQ29tcGlsZXIoJG1zZyk7CgkJCX0KCQl9Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiB2aXNpdFJ1bGVzZXQoICRydWxlc2V0Tm9kZSwgJiR2aXNpdERlZXBlciApewoKCQkkdmlzaXREZWVwZXIgPSBmYWxzZTsKCgkJJHRoaXMtPmNoZWNrUHJvcGVydGllc0luUm9vdCggJHJ1bGVzZXROb2RlICk7CgoJCWlmKCAkcnVsZXNldE5vZGUtPnJvb3QgKXsKCQkJcmV0dXJuICR0aGlzLT52aXNpdFJ1bGVzZXRSb290KCAkcnVsZXNldE5vZGUgKTsKCQl9CgoJCSRydWxlc2V0cyA9IGFycmF5KCk7CgkJJHJ1bGVzZXROb2RlLT5wYXRocyA9ICR0aGlzLT52aXNpdFJ1bGVzZXRQYXRocygkcnVsZXNldE5vZGUpOwoKCgkJLy8gQ29tcGlsZSBydWxlcyBhbmQgcnVsZXNldHMKCQkkbm9kZVJ1bGVDbnQgPSBjb3VudCgkcnVsZXNldE5vZGUtPnJ1bGVzKTsKCQlmb3IoICRpID0gMDsgJGkgPCAkbm9kZVJ1bGVDbnQ7ICl7CgkJCSRydWxlID0gJHJ1bGVzZXROb2RlLT5ydWxlc1skaV07CgoJCQlpZiggcHJvcGVydHlfZXhpc3RzKCRydWxlLCdydWxlcycpICl7CgkJCQkvLyB2aXNpdCBiZWNhdXNlIHdlIGFyZSBtb3ZpbmcgdGhlbSBvdXQgZnJvbSBiZWluZyBhIGNoaWxkCgkJCQkkcnVsZXNldHNbXSA9ICR0aGlzLT52aXNpdE9iaigkcnVsZSk7CgkJCQlhcnJheV9zcGxpY2UoJHJ1bGVzZXROb2RlLT5ydWxlcywkaSwxKTsKCQkJCSRub2RlUnVsZUNudC0tOwoJCQkJY29udGludWU7CgkJCX0KCQkJJGkrKzsKCQl9CgoKCQkvLyBhY2NlcHQgdGhlIHZpc2l0b3IgdG8gcmVtb3ZlIHJ1bGVzIGFuZCByZWZhY3RvciBpdHNlbGYKCQkvLyB0aGVuIHdlIGNhbiBkZWNpZGUgbm93IHdoZXRoZXIgd2Ugd2FudCBpdCBvciBub3QKCQlpZiggJG5vZGVSdWxlQ250ID4gMCApewoJCQkkcnVsZXNldE5vZGUtPmFjY2VwdCgkdGhpcyk7CgoJCQlpZiggJHJ1bGVzZXROb2RlLT5ydWxlcyApewoKCQkJCWlmKCBjb3VudCgkcnVsZXNldE5vZGUtPnJ1bGVzKSA+ICAxICl7CgkJCQkJJHRoaXMtPl9tZXJnZVJ1bGVzKCAkcnVsZXNldE5vZGUtPnJ1bGVzICk7CgkJCQkJJHRoaXMtPl9yZW1vdmVEdXBsaWNhdGVSdWxlcyggJHJ1bGVzZXROb2RlLT5ydWxlcyApOwoJCQkJfQoKCQkJCS8vIG5vdyBkZWNpZGUgd2hldGhlciB3ZSBrZWVwIHRoZSBydWxlc2V0CgkJCQlpZiggJHJ1bGVzZXROb2RlLT5wYXRocyApewoJCQkJCS8vYXJyYXlfdW5zaGlmdCgkcnVsZXNldHMsICRydWxlc2V0Tm9kZSk7CgkJCQkJYXJyYXlfc3BsaWNlKCRydWxlc2V0cywwLDAsYXJyYXkoJHJ1bGVzZXROb2RlKSk7CgkJCQl9CgkJCX0KCgkJfQoKCgkJaWYoIGNvdW50KCRydWxlc2V0cykgPT09IDEgKXsKCQkJcmV0dXJuICRydWxlc2V0c1swXTsKCQl9CgkJcmV0dXJuICRydWxlc2V0czsKCX0KCgoJLyoqCgkgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHZpc2l0aVJ1bGVzZXQKCSAqCgkgKiByZXR1cm4gYXJyYXl8TGVzc19UcmVlX1J1bGVzZXQKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiB2aXNpdFJ1bGVzZXRSb290KCAkcnVsZXNldE5vZGUgKXsKCQkkcnVsZXNldE5vZGUtPmFjY2VwdCggJHRoaXMgKTsKCQlpZiggJHJ1bGVzZXROb2RlLT5maXJzdFJvb3QgfHwgJHJ1bGVzZXROb2RlLT5ydWxlcyApewoJCQlyZXR1cm4gJHJ1bGVzZXROb2RlOwoJCX0KCQlyZXR1cm4gYXJyYXkoKTsKCX0KCgoJLyoqCgkgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHZpc2l0UnVsZXNldCgpCgkgKgoJICogQHJldHVybiBhcnJheQoJICovCglwcml2YXRlIGZ1bmN0aW9uIHZpc2l0UnVsZXNldFBhdGhzKCRydWxlc2V0Tm9kZSl7CgoJCSRwYXRocyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkcnVsZXNldE5vZGUtPnBhdGhzIGFzICRwKXsKCQkJaWYoICRwWzBdLT5lbGVtZW50c1swXS0+Y29tYmluYXRvciA9PT0gJyAnICl7CgkJCQkkcFswXS0+ZWxlbWVudHNbMF0tPmNvbWJpbmF0b3IgPSAnJzsKCQkJfQoKCQkJZm9yZWFjaCgkcCBhcyAkcGkpewoJCQkJaWYoICRwaS0+Z2V0SXNSZWZlcmVuY2VkKCkgJiYgJHBpLT5nZXRJc091dHB1dCgpICl7CgkJCQkJJHBhdGhzW10gPSAkcDsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuICRwYXRoczsKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3JlbW92ZUR1cGxpY2F0ZVJ1bGVzKCAmJHJ1bGVzICl7CgkJLy8gcmVtb3ZlIGR1cGxpY2F0ZXMKCQkkcnVsZUNhY2hlID0gYXJyYXkoKTsKCQlmb3IoICRpID0gY291bnQoJHJ1bGVzKS0xOyAkaSA+PSAwIDsgJGktLSApewoJCQkkcnVsZSA9ICRydWxlc1skaV07CgkJCWlmKCAkcnVsZSBpbnN0YW5jZW9mIExlc3NfVHJlZV9SdWxlIHx8ICRydWxlIGluc3RhbmNlb2YgTGVzc19UcmVlX05hbWVWYWx1ZSApewoKCQkJCWlmKCAhaXNzZXQoJHJ1bGVDYWNoZVskcnVsZS0+bmFtZV0pICl7CgkJCQkJJHJ1bGVDYWNoZVskcnVsZS0+bmFtZV0gPSAkcnVsZTsKCQkJCX1lbHNlewoJCQkJCSRydWxlTGlzdCA9JiAkcnVsZUNhY2hlWyRydWxlLT5uYW1lXTsKCgkJCQkJaWYoICRydWxlTGlzdCBpbnN0YW5jZW9mIExlc3NfVHJlZV9SdWxlIHx8ICRydWxlTGlzdCBpbnN0YW5jZW9mIExlc3NfVHJlZV9OYW1lVmFsdWUgKXsKCQkJCQkJJHJ1bGVMaXN0ID0gJHJ1bGVDYWNoZVskcnVsZS0+bmFtZV0gPSBhcnJheSggJHJ1bGVDYWNoZVskcnVsZS0+bmFtZV0tPnRvQ1NTKCkgKTsKCQkJCQl9CgoJCQkJCSRydWxlQ1NTID0gJHJ1bGUtPnRvQ1NTKCk7CgkJCQkJaWYoIGFycmF5X3NlYXJjaCgkcnVsZUNTUywkcnVsZUxpc3QpICE9PSBmYWxzZSApewoJCQkJCQlhcnJheV9zcGxpY2UoJHJ1bGVzLCRpLDEpOwoJCQkJCX1lbHNlewoJCQkJCQkkcnVsZUxpc3RbXSA9ICRydWxlQ1NTOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gX21lcmdlUnVsZXMoICYkcnVsZXMgKXsKCQkkZ3JvdXBzID0gYXJyYXkoKTsKCgkJLy9vYmooJHJ1bGVzKTsKCgkJJHJ1bGVzX2xlbiA9IGNvdW50KCRydWxlcyk7CgkJZm9yKCAkaSA9IDA7ICRpIDwgJHJ1bGVzX2xlbjsgJGkrKyApewoJCQkkcnVsZSA9ICRydWxlc1skaV07CgoJCQlpZiggKCRydWxlIGluc3RhbmNlb2YgTGVzc19UcmVlX1J1bGUpICYmICRydWxlLT5tZXJnZSApewoKCQkJCSRrZXkgPSAkcnVsZS0+bmFtZTsKCQkJCWlmKCAkcnVsZS0+aW1wb3J0YW50ICl7CgkJCQkJJGtleSAuPSAnLCEnOwoJCQkJfQoKCQkJCWlmKCAhaXNzZXQoJGdyb3Vwc1ska2V5XSkgKXsKCQkJCQkkZ3JvdXBzWyRrZXldID0gYXJyYXkoKTsKCQkJCX1lbHNlewoJCQkJCWFycmF5X3NwbGljZSgkcnVsZXMsICRpLS0sIDEpOwoJCQkJCSRydWxlc19sZW4tLTsKCQkJCX0KCgkJCQkkZ3JvdXBzWyRrZXldW10gPSAkcnVsZTsKCQkJfQoJCX0KCgoJCWZvcmVhY2goJGdyb3VwcyBhcyAkcGFydHMpewoKCQkJaWYoIGNvdW50KCRwYXJ0cykgPiAxICl7CgkJCQkkcnVsZSA9ICRwYXJ0c1swXTsKCQkJCSRzcGFjZWRHcm91cHMgPSBhcnJheSgpOwoJCQkJJGxhc3RTcGFjZWRHcm91cCA9IGFycmF5KCk7CgkJCQkkcGFydHNfbWFwcGVkID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJHBhcnRzIGFzICRwKXsKCQkJCQlpZiggJHAtPm1lcmdlID09PSAnKycgKXsKCQkJCQkJaWYoICRsYXN0U3BhY2VkR3JvdXAgKXsKCQkJCQkJCSRzcGFjZWRHcm91cHNbXSA9IHNlbGY6OnRvRXhwcmVzc2lvbigkbGFzdFNwYWNlZEdyb3VwKTsKCQkJCQkJfQoJCQkJCQkkbGFzdFNwYWNlZEdyb3VwID0gYXJyYXkoKTsKCQkJCQl9CgkJCQkJJGxhc3RTcGFjZWRHcm91cFtdID0gJHA7CgkJCQl9CgoJCQkJJHNwYWNlZEdyb3Vwc1tdID0gc2VsZjo6dG9FeHByZXNzaW9uKCRsYXN0U3BhY2VkR3JvdXApOwoJCQkJJHJ1bGUtPnZhbHVlID0gc2VsZjo6dG9WYWx1ZSgkc3BhY2VkR3JvdXBzKTsKCQkJfQoJCX0KCgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0b0V4cHJlc3Npb24oJHZhbHVlcyl7CgkJJG1hcHBlZCA9IGFycmF5KCk7CgkJZm9yZWFjaCgkdmFsdWVzIGFzICRwKXsKCQkJJG1hcHBlZFtdID0gJHAtPnZhbHVlOwoJCX0KCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9FeHByZXNzaW9uKCAkbWFwcGVkICk7Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0b1ZhbHVlKCR2YWx1ZXMpewoJCS8vcmV0dXJuIG5ldyBMZXNzX1RyZWVfVmFsdWUoJHZhbHVlcyk7ID8/CgoJCSRtYXBwZWQgPSBhcnJheSgpOwoJCWZvcmVhY2goJHZhbHVlcyBhcyAkcCl7CgkJCSRtYXBwZWRbXSA9ICRwOwoJCX0KCQlyZXR1cm4gbmV3IExlc3NfVHJlZV9WYWx1ZSgkbWFwcGVkKTsKCX0KfQoK]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/Less/VisitorReplacing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBSZXBsYWNpbmcgVmlzaXRvcgogKgogKiBAcGFja2FnZSBMZXNzCiAqIEBzdWJwYWNrYWdlIHZpc2l0b3IKICovCmNsYXNzIExlc3NfVmlzaXRvclJlcGxhY2luZyBleHRlbmRzIExlc3NfVmlzaXRvcnsKCglwdWJsaWMgZnVuY3Rpb24gdmlzaXRPYmooICRub2RlICl7CgoJCSRmdW5jTmFtZSA9ICd2aXNpdCcuJG5vZGUtPnR5cGU7CgkJaWYoIGlzc2V0KCR0aGlzLT5fdmlzaXRGbkNhY2hlWyRmdW5jTmFtZV0pICl7CgoJCQkkdmlzaXREZWVwZXIgPSB0cnVlOwoJCQkkbm9kZSA9ICR0aGlzLT4kZnVuY05hbWUoICRub2RlLCAkdmlzaXREZWVwZXIgKTsKCgkJCWlmKCAkbm9kZSApewoJCQkJaWYoICR2aXNpdERlZXBlciAmJiBpc19vYmplY3QoJG5vZGUpICl7CgkJCQkJJG5vZGUtPmFjY2VwdCgkdGhpcyk7CgkJCQl9CgoJCQkJJGZ1bmNOYW1lID0gJGZ1bmNOYW1lIC4gIk91dCI7CgkJCQlpZiggaXNzZXQoJHRoaXMtPl92aXNpdEZuQ2FjaGVbJGZ1bmNOYW1lXSkgKXsKCQkJCQkkdGhpcy0+JGZ1bmNOYW1lKCAkbm9kZSApOwoJCQkJfQoJCQl9CgoJCX1lbHNlewoJCQkkbm9kZS0+YWNjZXB0KCR0aGlzKTsKCQl9CgoJCXJldHVybiAkbm9kZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdmlzaXRBcnJheSggJG5vZGVzICl7CgoJCSRuZXdOb2RlcyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkbm9kZXMgYXMgJG5vZGUpewoJCQkkZXZhbGQgPSAkdGhpcy0+dmlzaXRPYmooJG5vZGUpOwoJCQlpZiggJGV2YWxkICl7CgkJCQlpZiggaXNfYXJyYXkoJGV2YWxkKSApewoJCQkJCXNlbGY6OmZsYXR0ZW4oJGV2YWxkLCRuZXdOb2Rlcyk7CgkJCQl9ZWxzZXsKCQkJCQkkbmV3Tm9kZXNbXSA9ICRldmFsZDsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJG5ld05vZGVzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBmbGF0dGVuKCAkYXJyLCAmJG91dCApewoKCQlmb3JlYWNoKCRhcnIgYXMgJGl0ZW0pewoJCQlpZiggIWlzX2FycmF5KCRpdGVtKSApewoJCQkJJG91dFtdID0gJGl0ZW07CgkJCQljb250aW51ZTsKCQkJfQoKCQkJZm9yZWFjaCgkaXRlbSBhcyAkbmVzdGVkSXRlbSl7CgkJCQlpZiggaXNfYXJyYXkoJG5lc3RlZEl0ZW0pICl7CgkJCQkJc2VsZjo6ZmxhdHRlbiggJG5lc3RlZEl0ZW0sICRvdXQpOwoJCQkJfWVsc2V7CgkJCQkJJG91dFtdID0gJG5lc3RlZEl0ZW07CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiAkb3V0OwoJfQoKfQoKCg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/LessPHPOyejorge/logo.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/preprocessors/SassCommand/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/SassCommand/class.Preprocessor_SassCommand.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIFByZXByb2Nlc3Nvcl9TYXNzQ29tbWFuZCBleHRlbmRzIFByZXByb2Nlc3NvciB7CgoJY29uc3QgRlJJRU5ETFlfTkFNRSA9ICdTYXNzIGNvbXBpbGVyIGZyb20gY29tbWFuZCBsaW5lJzsKCWNvbnN0IERFU0NSSVBUSU9OID0gJ1RoZSBvZmZpY2lhbCBjb21tYW5kIGxpbmUgU0FTUyBjb21waWxhdG9yJzsKCWNvbnN0IEFVVEhPUiA9ICdDb3JlIFNBU1MgdGVhbSc7Cgljb25zdCBXRUJTSVRFID0gJ2h0dHA6Ly93d3cuc2Fzcy1sYW5nLmNvbSc7Cgljb25zdCBOT1RFID0gJ0Zhc3QsIGJ1dCB5b3UgTkVFRCB0aGUgc2FzcyBjb21tYW5kIGxpbmUgdG9vbCBpbnN0YWxsZWQgb24geW91ciBzZXJ2ZXIgdG8gdXNlIGl0IC0gY2hlY2sgdGhlIG9mZmljaWFsIHdlYnNpdGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zIC0gRG9lcyBub3Qgc3VwcG9ydCBhdXRvcHJlZml4ZXInOwoJY29uc3QgTE9HTyA9ICdsb2dvLnBuZyc7CgoKCgkvLyBOb3RlIDogJGNzcyBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIC0gbm8gbmVlZCB0byByZXR1cm4KCXB1YmxpYyBmdW5jdGlvbiBDb21waWxlQ1NTKCYkY3NzPScnKQoJewoJCS8vIFB1dCBpbiBhIGNhY2hlIGZpbGUKCQkkZmlsZSA9IGNtc19qb2luX3BhdGgoVE1QX0NBQ0hFX0xPQ0FUSU9OLCAnY3NzcHJlcHJvY2Vzc29yLnNjc3MnKTsKCQlmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgJGNzcyk7CgoJCWRlYnVnX3RvX2xvZygnV3JpdGUgQ1NTIGZpbGUnIC4gJGNzcyk7CgoJCSRmaWxlX291dHB1dCA9IGNtc19qb2luX3BhdGgoVE1QX0NBQ0hFX0xPQ0FUSU9OLCAnY3NzcHJlcHJvY2Vzc29yX291dC5jc3MnKTsKCgkJLy8gRVhFQyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJCS8vIENvbXBpbGUKCQkkY29tbWFuZCA9ICdzYXNzIC1sIC1FICJVVEYtOCIgJzsgLy8gLWwgd2l0aCBsaW5lIG51bWJlcnMKCiAJCWlmICgkdGhpcy0+bWluaWZ5KQogCQl7CiAJCQkkY29tbWFuZCAuPSAnLS1zdHlsZSBjb21wcmVzc2VkICc7CgkJfQoKCQkvLyBTb3VyY2VtYXAKCQlpZiAoJHRoaXMtPmdlbmVyYXRlX3NvdXJjZW1hcCkKCQkJJGNvbW1hbmQgLj0gJy0tc291cmNlbWFwPWF1dG8gJzsKCQllbHNlCgkJCSRjb21tYW5kIC49ICctLXNvdXJjZW1hcD1ub25lICc7CgoKCQlpZiAoIWVtcHR5KCR0aGlzLT5pbXBvcnRfZGlycykpCgkJewoJCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgkJCSRzZXBhcmF0b3IgPSAnLCc7CgoJCQkkY29tbWFuZCAuPSAnLS1sb2FkLXBhdGggJyAuIGltcGxvZGUoJHNlcGFyYXRvciwgJHRoaXMtPmltcG9ydF9kaXJzKTsKCQl9CgoJCSRjb21tYW5kIC49ICcgJyAuICRmaWxlIC4gJyAnIC4kZmlsZV9vdXRwdXQ7CgoJCS8vIEFzayBmb3IgY29tbWFuZCB0byBzeXN0ZW0KCQkkcmVzdWx0ID0gZXhlYygkY29tbWFuZCk7CgoJCWlmICghZW1wdHkoJHJlc3VsdCkpCgkJCWRlYnVnX3RvX2xvZygnQ1NTUHJlcHJvY2Vzc29yOiAnIC4gJHJlc3VsdCk7CgoJCSRjc3MgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZV9vdXRwdXQpOwoKCQkvLyBSZW1vdmUgY2FjaGUgZmlsZQoJCS8vdW5saW5rKCRmaWxlKTsKCgkJcmV0dXJuIHRydWU7Cgl9CgoKfQoKCgoKPz4K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/SassCommand/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/SassCommand/logo.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAasAAAFACAYAAAACklMsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/JpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ1dWlkOjVEMjA4OTI0OTNCRkRCMTE5MTRBODU5MEQzMTUwOEM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcxNTVCMTJCMkJBRTExRTM4RDJFQjVEMkVEN0FFOUE4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcxNTVCMTJBMkJBRTExRTM4RDJFQjVEMkVEN0FFOUE4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIElsbHVzdHJhdG9yIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZTE1Y2FhMmYtY2FjOC00OGM3LTg0NTEtMTk3MGMzM2VjMGIyIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmUx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]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/class.Preprocessor_ScssPHP.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZShjbXNfam9pbl9wYXRoKF9fRElSX18sICdzY3NzcGhwJywgJ3Njc3MuaW5jLnBocCcpKTsKdXNlIExlYWZvXFNjc3NQaHBcQ29tcGlsZXI7CgpjbGFzcyBQcmVwcm9jZXNzb3JfU2Nzc1BIUCBleHRlbmRzIFByZXByb2Nlc3NvciB7CgoJY29uc3QgRlJJRU5ETFlfTkFNRSA9ICdTY3NzUEhQJzsKCWNvbnN0IERFU0NSSVBUSU9OID0gJ0EgUEhQIC8gU0FTUyBwcmUtcHJvY2Vzc29yJzsKCWNvbnN0IEFVVEhPUiA9ICdMZWFmJzsKCWNvbnN0IFdFQlNJVEUgPSAnaHR0cDovL2xlYWZvLmdpdGh1Yi5pby9zY3NzcGhwLyc7Cgljb25zdCBOT1RFID0gJ0RvZXMgbm90IHN1cHBvcnQgc291cmNlbWFwcyBhbmQgYXV0b3ByZWZpeGVyLiBVc2VmdWwgaWYgc2FzcyBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgc2VydmVyJzsKCWNvbnN0IExPR08gPSAnbG9nby5wbmcnOwoKCglwdWJsaWMgJHBhcnNlcjsKCgoJcHVibGljIGZ1bmN0aW9uIExvYWQoKQoJewoJCXBhcmVudDo6TG9hZCgpOwoKCgkJJHRoaXMtPnBhcnNlciA9IG5ldyBDb21waWxlcigpOwoKCQkvLyBPcHRpb25zCgkJaWYgKCR0aGlzLT5taW5pZnkpCgkJCSR0aGlzLT5wYXJzZXItPnNldEZvcm1hdHRlcignTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXJcQ3J1bmNoZWQnKTsKCgkJLy8gSW1wb3J0IGRpcnMKCQkkdGhpcy0+cGFyc2VyLT5zZXRJbXBvcnRQYXRocygkdGhpcy0+aW1wb3J0X2RpcnMpOwoJfQoKCS8vIE5vdGUgOiAkY3NzIGlzIHBhc3NlZCBieSByZWZlcmVuY2UgLSBubyBuZWVkIHRvIHJldHVybgoJcHVibGljIGZ1bmN0aW9uIENvbXBpbGVDU1MoJiRjc3M9JycpCgl7CgkJdHJ5IHsKCQkJJGNzcyA9ICR0aGlzLT5wYXJzZXItPmNvbXBpbGUoJGNzcyk7CgkJfQoJCWNhdGNoIChleGNlcHRpb24gJGUpIHsKCQkJJGVycm9yX21lc3NhZ2UgPSAkZS0+Z2V0TWVzc2FnZSgpOwoJCQlkZWJ1Z190b19sb2coJGVycm9yX21lc3NhZ2UpOwoJCX0KCgkJcmV0dXJuIHRydWU7Cgl9Cgp9CgoKCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/logo.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/bin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/bin/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/bin/pscss</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9lbnYgcGhwCjw/cGhwCi8qKgogKiBTQ1NTUEhQCiAqCiAqIEBjb3B5cmlnaHQgMjAxMi0yMDE1IExlYWYgQ29yY29yYW4KICoKICogQGxpY2Vuc2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCBNSVQKICoKICogQGxpbmsgaHR0cDovL2xlYWZvLmdpdGh1Yi5pby9zY3NzcGhwCiAqLwoKZXJyb3JfcmVwb3J0aW5nKEVfQUxMKTsKCmlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjQnKSA8IDApIHsKICAgIGRpZSgnUmVxdWlyZXMgUEhQIDUuNCBvciBhYm92ZScpOwp9CgppbmNsdWRlIF9fRElSX18gLiAnLy4uL3Njc3MuaW5jLnBocCc7Cgp1c2UgTGVhZm9cU2Nzc1BocFxDb21waWxlcjsKdXNlIExlYWZvXFNjc3NQaHBcUGFyc2VyOwp1c2UgTGVhZm9cU2Nzc1BocFxWZXJzaW9uOwoKJHN0eWxlID0gbnVsbDsKJGxvYWRQYXRocyA9IG51bGw7CiRwcmVjaXNpb24gPSBudWxsOwokZHVtcFRyZWUgPSBmYWxzZTsKJGlucHV0RmlsZSA9IG51bGw7CiRjaGFuZ2VEaXIgPSBmYWxzZTsKJGRlYnVnSW5mbyA9IGZhbHNlOwokbGluZU51bWJlcnMgPSBmYWxzZTsKJGlnbm9yZUVycm9ycyA9IGZhbHNlOwokZW5jb2RpbmcgPSBmYWxzZTsKCi8qKgogKiBQYXJzZSBhcmd1bWVudAogKgogKiBAcGFyYW0gaW50ZWdlciAkaQogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMKICoKICogQHJldHVybiBzdHJpbmd8bnVsbAogKi8KZnVuY3Rpb24gcGFyc2VBcmd1bWVudCgmJGksICRvcHRpb25zKSB7CiAgICBnbG9iYWwgJGFyZ2M7CiAgICBnbG9iYWwgJGFyZ3Y7CgogICAgaWYgKCEgcHJlZ19tYXRjaCgnL14oPzonIC4gaW1wbG9kZSgnfCcsIChhcnJheSkgJG9wdGlvbnMpIC4gJyk9PyguKikvJywgJGFyZ3ZbJGldLCAkbWF0Y2hlcykpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHN0cmxlbigkbWF0Y2hlc1sxXSkpIHsKICAgICAgICByZXR1cm4gJG1hdGNoZXNbMV07CiAgICB9CgogICAgaWYgKCRpICsgMSA8ICRhcmdjKSB7CiAgICAgICAgJGkrKzsKCiAgICAgICAgcmV0dXJuICRhcmd2WyRpXTsKICAgIH0KfQoKZm9yICgkaSA9IDE7ICRpIDwgJGFyZ2M7ICRpKyspIHsKICAgIGlmICgkYXJndlskaV0gPT09ICctaCcgfHwgJGFyZ3ZbJGldID09PSAnLS1oZWxwJykgewogICAgICAgICRleGUgPSAkYXJndlswXTsKCiAgICAgICAgJEhFTFAgPSA8PDxFT1QKVXNhZ2U6ICRleGUgW29wdGlvbnNdIFtpbnB1dC1maWxlXQoKT3B0aW9ucyBpbmNsdWRlOgoKICAgIC1oLCAtLWhlbHAgICAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKICAgIC0tY29udGludWUtb24tZXJyb3IgQ29udGludWUgY29tcGlsYXRpb24gKGFzIGJlc3QgYXMgcG9zc2libGUpIHdoZW4gZXJyb3IgZW5jb3VudGVyZWQKICAgIC0tZGVidWctaW5mbyAgICAgICAgQW5ub3RhdGUgc2VsZWN0b3JzIHdpdGggQ1NTIHJlZmVycmluZyB0byB0aGUgc291cmNlIGZpbGUgYW5kIGxpbmUgbnVtYmVyCiAgICAtZj1mb3JtYXQgICAgICAgICAgIFNldCB0aGUgb3V0cHV0IGZvcm1hdCAoY29tcGFjdCwgY29tcHJlc3NlZCwgY3J1bmNoZWQsIGV4cGFuZGVkLCBvciBuZXN0ZWQpCiAgICAtaT1wYXRoICAgICAgICAgICAgIFNldCBpbXBvcnQgcGF0aAogICAgLS1pc284ODU5LTEgICAgICAgICBVc2UgaXNvODg1OS0xIGVuY29kaW5nIGluc3RlYWQgb2YgdXRmLTggKGRlZmF1bHQgdXRmLTgpCiAgICAtLWxpbmUtbnVtYmVycyAgICAgIEFubm90YXRlIHNlbGVjdG9ycyB3aXRoIGNvbW1lbnRzIHJlZmVycmluZyB0byB0aGUgc291cmNlIGZpbGUgYW5kIGxpbmUgbnVtYmVyCiAgICAtcD1wcmVjaXNpb24gICAgICAgIFNldCBkZWNpbWFsIG51bWJlciBwcmVjaXNpb24gKGRlZmF1bHQgNSkKICAgIC1UICAgICAgICAgICAgICAgICAgRHVtcCBmb3JtYXR0ZWQgcGFyc2UgdHJlZQogICAgLXYsIC0tdmVyc2lvbiAgICAgICBQcmludCB0aGUgdmVyc2lvbgoKRU9UOwogICAgICAgIGV4aXQoJEhFTFApOwogICAgfQoKICAgIGlmICgkYXJndlskaV0gPT09ICctdicgfHwgJGFyZ3ZbJGldID09PSAnLS12ZXJzaW9uJykgewogICAgICAgIGV4aXQoVmVyc2lvbjo6VkVSU0lPTiAuICJcbiIpOwogICAgfQoKICAgIGlmICgkYXJndlskaV0gPT09ICctLWNvbnRpbnVlLW9uLWVycm9yJykgewogICAgICAgICRpZ25vcmVFcnJvcnMgPSB0cnVlOwogICAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmICgkYXJndlskaV0gPT09ICctLWRlYnVnLWluZm8nKSB7CiAgICAgICAgJGRlYnVnSW5mbyA9IHRydWU7CiAgICAgICAgY29udGludWU7CiAgICB9CgogICAgaWYgKCRhcmd2WyRpXSA9PT0gJy0taXNvODg1OS0xJykgewogICAgICAgICRlbmNvZGluZyA9ICdpc284ODU5LTEnOwogICAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmICgkYXJndlskaV0gPT09ICctLWxpbmUtbnVtYmVycycgfHwgJGFyZ3ZbJGldID09PSAnLS1saW5lLWNvbW1lbnRzJykgewogICAgICAgICRsaW5lTnVtYmVycyA9IHRydWU7CiAgICAgICAgY29udGludWU7CiAgICB9CgogICAgaWYgKCRhcmd2WyRpXSA9PT0gJy1UJykgewogICAgICAgICRkdW1wVHJlZSA9IHRydWU7CiAgICAgICAgY29udGludWU7CiAgICB9CgogICAgJHZhbHVlID0gcGFyc2VBcmd1bWVudCgkaSwgYXJyYXkoJy1mJywgJy0tc3R5bGUnKSk7CgogICAgaWYgKGlzc2V0KCR2YWx1ZSkpIHsKICAgICAgICAkc3R5bGUgPSAkdmFsdWU7CiAgICAgICAgY29udGludWU7CiAgICB9CgogICAgJHZhbHVlID0gcGFyc2VBcmd1bWVudCgkaSwgYXJyYXkoJy1pJywgJy0tbG9hZF9wYXRocycpKTsKCiAgICBpZiAoaXNzZXQoJHZhbHVlKSkgewogICAgICAgICRsb2FkUGF0aHMgPSAkdmFsdWU7CiAgICAgICAgY29udGludWU7CiAgICB9CgogICAgJHZhbHVlID0gcGFyc2VBcmd1bWVudCgkaSwgYXJyYXkoJy1wJywgJy0tcHJlY2lzaW9uJykpOwoKICAgIGlmIChpc3NldCgkdmFsdWUpKSB7CiAgICAgICAgJHByZWNpc2lvbiA9ICR2YWx1ZTsKICAgICAgICBjb250aW51ZTsKICAgIH0KCiAgICBpZiAoZmlsZV9leGlzdHMoJGFyZ3ZbJGldKSkgewogICAgICAgICRpbnB1dEZpbGUgPSAkYXJndlskaV07CiAgICAgICAgY29udGludWU7CiAgICB9Cn0KCgppZiAoJGlucHV0RmlsZSkgewogICAgJGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkaW5wdXRGaWxlKTsKCiAgICAkbmV3V29ya2luZ0RpciA9IGRpcm5hbWUocmVhbHBhdGgoJGlucHV0RmlsZSkpOwogICAgJG9sZFdvcmtpbmdEaXIgPSBnZXRjd2QoKTsKCiAgICBpZiAoJG9sZFdvcmtpbmdEaXIgIT09ICRuZXdXb3JraW5nRGlyKSB7CiAgICAgICAgJGNoYW5nZURpciA9IGNoZGlyKCRuZXdXb3JraW5nRGlyKTsKICAgICAgICAkaW5wdXRGaWxlID0gYmFzZW5hbWUoJGlucHV0RmlsZSk7CiAgICB9Cn0gZWxzZSB7CiAgICAkZGF0YSA9ICcnOwoKICAgIHdoaWxlICghIGZlb2YoU1RESU4pKSB7CiAgICAgICAgJGRhdGEgLj0gZnJlYWQoU1RESU4sIDgxOTIpOwogICAgfQp9CgppZiAoJGR1bXBUcmVlKSB7CiAgICAkcGFyc2VyID0gbmV3IFBhcnNlcigkaW5wdXRGaWxlKTsKCiAgICBwcmludF9yKGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKCRwYXJzZXItPnBhcnNlKCRkYXRhKSksIHRydWUpKTsKCiAgICBleGl0KCk7Cn0KCiRzY3NzID0gbmV3IENvbXBpbGVyKCk7CgppZiAoJGRlYnVnSW5mbyAmJiAkaW5wdXRGaWxlKSB7CiAgICAkc2Nzcy0+c2V0TGluZU51bWJlclN0eWxlKENvbXBpbGVyOjpERUJVR19JTkZPKTsKfQoKaWYgKCRsaW5lTnVtYmVycyAmJiAkaW5wdXRGaWxlKSB7CiAgICAkc2Nzcy0+c2V0TGluZU51bWJlclN0eWxlKENvbXBpbGVyOjpMSU5FX0NPTU1FTlRTKTsKfQoKaWYgKCRpZ25vcmVFcnJvcnMpIHsKICAgICRzY3NzLT5zZXRJZ25vcmVFcnJvcnMoJGlnbm9yZUVycm9ycyk7Cn0KCmlmICgkbG9hZFBhdGhzKSB7CiAgICAkc2Nzcy0+c2V0SW1wb3J0UGF0aHMoZXhwbG9kZShQQVRIX1NFUEFSQVRPUiwgJGxvYWRQYXRocykpOwp9CgppZiAoJHByZWNpc2lvbikgewogICAgJHNjc3MtPnNldE51bWJlclByZWNpc2lvbigkcHJlY2lzaW9uKTsKfQoKaWYgKCRzdHlsZSkgewogICAgJHNjc3MtPnNldEZvcm1hdHRlcignTGVhZm9cXFNjc3NQaHBcXEZvcm1hdHRlclxcJyAuIHVjZmlyc3QoJHN0eWxlKSk7Cn0KCmlmICgkZW5jb2RpbmcpIHsKICAgICRzY3NzLT5zZXRFbmNvZGluZygkZW5jb2RpbmcpOwp9CgplY2hvICRzY3NzLT5jb21waWxlKCRkYXRhLCAkaW5wdXRGaWxlKTsKCmlmICgkY2hhbmdlRGlyKSB7CiAgICBjaGRpcigkb2xkV29ya2luZ0Rpcik7Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibGVhZm8vc2Nzc3BocCIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJzY3NzcGhwIGlzIGEgY29tcGlsZXIgZm9yIFNDU1Mgd3JpdHRlbiBpbiBQSFAuIiwKICAgICJrZXl3b3JkcyI6IFsiY3NzIiwgInN0eWxlc2hlZXQiLCAic2NzcyIsICJzYXNzIiwgImxlc3MiXSwKICAgICJob21lcGFnZSI6ICJodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAvIiwKICAgICJsaWNlbnNlIjogWwogICAgICAgICJNSVQiCiAgICBdLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJMZWFmIENvcmNvcmFuIiwKICAgICAgICAgICAgImVtYWlsIjogImxlYWZvdEBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2xlYWZvLm5ldCIKICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsgIkxlYWZvXFxTY3NzUGhwXFwiOiAic3JjLyIgfQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogeyAiTGVhZm9cXFNjc3NQaHBcXFRlc3RcXCI6ICJ0ZXN0cy8iIH0KICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49NS40LjAiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIn4yLjUiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAifjMuNyIsCiAgICAgICAgImtoZXJnZS9ib3giOiAifjIuNSIKICAgIH0sCiAgICAiYmluIjogWyJiaW4vcHNjc3MiXSwKICAgICJhcmNoaXZlIjogewogICAgICAgICJleGNsdWRlIjogWwogICAgICAgICAgICAiL01ha2VmaWxlIiwKICAgICAgICAgICAgIi8uZ2l0YXR0cmlidXRlcyIsCiAgICAgICAgICAgICIvLmdpdGlnbm9yZSIsCiAgICAgICAgICAgICIvLnRyYXZpcy55bWwiLAogICAgICAgICAgICAiL2JveC5qc29uLmRpc3QiLAogICAgICAgICAgICAiL3BocHVuaXQueG1sLmRpc3QiLAogICAgICAgICAgICAiL3Rlc3RzIgogICAgICAgIF0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/LICENSE.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE1IExlYWYgQ29yY29yYW4sIGh0dHA6Ly9sZWFmby5naXRodWIuaW8vc2Nzc3BocAogClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQpMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgpXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBzY3NzcGhwCiMjIyA8aHR0cDovL2xlYWZvLmdpdGh1Yi5pby9zY3NzcGhwPgoKWyFbQnVpbGRdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9sZWFmby9zY3NzcGhwLnN2Zz9icmFuY2g9bWFzdGVyKV0oaHR0cDovL3RyYXZpcy1jaS5vcmcvbGVhZm8vc2Nzc3BocCkKWyFbTGljZW5zZV0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9sZWFmby9zY3NzcGhwL2xpY2Vuc2Uuc3ZnKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2xlYWZvL3Njc3NwaHApCgpgc2Nzc3BocGAgaXMgYSBjb21waWxlciBmb3IgU0NTUyB3cml0dGVuIGluIFBIUC4KCkNoZWNrb3V0IHRoZSBob21lcGFnZSwgPGh0dHA6Ly9sZWFmby5naXRodWIuaW8vc2Nzc3BocD4sIGZvciBkaXJlY3Rpb25zIG9uIGhvdyB0byB1c2UuCgojIyBSdW5uaW5nIFRlc3RzCgpgc2Nzc3BocGAgdXNlcyBbUEhQVW5pdF0oaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL3BocHVuaXQpIGZvciB0ZXN0aW5nLgoKUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB0byBydW4gZXZlcnkgdGVzdDoKCiAgICB2ZW5kb3IvYmluL3BocHVuaXQgdGVzdHMKClRoZXJlIGFyZSBzZXZlcmFsIHRlc3RzIGluIHRoZSBgdGVzdHMvYCBkaXJlY3Rvcnk6CgoqIGBBcGlUZXN0LnBocGAgY29udGFpbnMgdmFyaW91cyB1bml0IHRlc3RzIHRoYXQgdGVzdCB0aGUgUEhQIGludGVyZmFjZS4KKiBgRXhjZXB0aW9uVGVzdC5waHBgIGNvbnRhaW5zIHVuaXQgdGVzdHMgdGhhdCB0ZXN0IGZvciBleGNlcHRpb25zIHRocm93biBieSB0aGUgcGFyc2VyIGFuZCBjb21waWxlci4KKiBgRmFpbGluZ1Rlc3QucGhwYCBjb250YWlucyB0ZXN0cyByZXBvcnRlZCBpbiBHaXRodWIgaXNzdWVzIHRoYXQgZGVtb25zdHJhdGUgY29tcGF0aWJpbGl0eSBidWdzLgoqIGBJbnB1dFRlc3QucGhwYCBjb21waWxlcyBldmVyeSBgLnNjc3NgIGZpbGUgaW4gdGhlIGB0ZXN0cy9pbnB1dHNgIGRpcmVjdG9yeQogIHRoZW4gY29tcGFyZXMgdG8gdGhlIHJlc3BlY3RpdmUgYC5jc3NgIGZpbGUgaW4gdGhlIGB0ZXN0cy9vdXRwdXRzYCBkaXJlY3RvcnkuCiogYFNjc3NUZXN0LnBocGAgZXh0cmFjdHMgKHJ1YnkpIGBzY3NzYCB0ZXN0cyBmcm9tIHRoZSBgdGVzdHMvc2Nzc190ZXN0LnJiYCBmaWxlLgoqIGBTZXJ2ZXJUZXN0LnBocGAgY29udGFpbnMgZnVuY3Rpb25hbCB0ZXN0cyBmb3IgdGhlIGBTZXJ2ZXJgIGNsYXNzLgoKV2hlbiBjaGFuZ2luZyBhbnkgb2YgdGhlIHRlc3RzIGluIGB0ZXN0cy9pbnB1dHNgLCB0aGUgdGVzdHMgd2lsbCBtb3N0IGxpa2VseQpmYWlsIGJlY2F1c2UgdGhlIG91dHB1dCBoYXMgY2hhbmdlZC4gT25jZSB5b3UgdmVyaWZ5IHRoYXQgdGhlIG91dHB1dCBpcyBjb3JyZWN0CnlvdSBjYW4gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byByZWJ1aWxkIGFsbCB0aGUgdGVzdHM6CgogICAgQlVJTEQ9MSB2ZW5kb3IvYmluL3BocHVuaXQgdGVzdHMKClRoaXMgd2lsbCBjb21waWxlIGFsbCB0aGUgdGVzdHMsIGFuZCBzYXZlIHJlc3VsdHMgaW50byBgdGVzdHMvb3V0cHV0c2AuCgpUbyBlbmFibGUgdGhlIGBzY3NzYCBjb21wYXRpYmlsaXR5IHRlc3RzOgoKICAgIFRFU1RfU0NTU19DT01QQVQ9MSB2ZW5kb3IvYmluL3BocHVuaXQgdGVzdHMKCiMjIENvZGluZyBTdGFuZGFyZAoKYHNjc3NwaHBgIHNvdXJjZSBjb25mb3JtcyB0byBbUFNSMl0oaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTIvKS4KClJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gY2hlY2sgdGhlIGNvZGUgZm9yICJzbmlmZnMiLgoKICAgIHZlbmRvci9iaW4vcGhwY3MgLS1zdGFuZGFyZD1QU1IyIGJpbiBzcmMgdGVzdHMK]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/scss.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzUuNCcpIDwgMCkgewogICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ3Njc3NwaHAgcmVxdWlyZXMgUEhQIDUuNCBvciBhYm92ZScpOwp9CgppZiAoISBjbGFzc19leGlzdHMoJ3Njc3NjJywgZmFsc2UpKSB7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0Jhc2UvUmFuZ2UucGhwJzsKICAgIGluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQmxvY2sucGhwJzsKICAgIGluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29sb3JzLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbXBpbGVyLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbXBpbGVyL0Vudmlyb25tZW50LnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0V4Y2VwdGlvbi9Db21waWxlckV4Y2VwdGlvbi5waHAnOwogICAgaW5jbHVkZV9vbmNlIF9fRElSX18gLiAnL3NyYy9FeGNlcHRpb24vUGFyc2VyRXhjZXB0aW9uLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0V4Y2VwdGlvbi9TZXJ2ZXJFeGNlcHRpb24ucGhwJzsKICAgIGluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRm9ybWF0dGVyLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0Zvcm1hdHRlci9Db21wYWN0LnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0Zvcm1hdHRlci9Db21wcmVzc2VkLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0Zvcm1hdHRlci9DcnVuY2hlZC5waHAnOwogICAgaW5jbHVkZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Gb3JtYXR0ZXIvRGVidWcucGhwJzsKICAgIGluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRm9ybWF0dGVyL0V4cGFuZGVkLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL0Zvcm1hdHRlci9OZXN0ZWQucGhwJzsKICAgIGluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRm9ybWF0dGVyL091dHB1dEJsb2NrLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUucGhwJzsKICAgIGluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9OdW1iZXIucGhwJzsKICAgIGluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyc2VyLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUucGhwJzsKICAgIGluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVXRpbC5waHAnOwogICAgaW5jbHVkZV9vbmNlIF9fRElSX18gLiAnL3NyYy9WZXJzaW9uLnBocCc7CiAgICBpbmNsdWRlX29uY2UgX19ESVJfXyAuICcvc3JjL1NlcnZlci5waHAnOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Base/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Base/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Base/Range.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDE1IExlYWYgQ29yY29yYW4KICoKICogQGxpY2Vuc2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCBNSVQKICoKICogQGxpbmsgaHR0cDovL2xlYWZvLmdpdGh1Yi5pby9zY3NzcGhwCiAqLwoKbmFtZXNwYWNlIExlYWZvXFNjc3NQaHBcQmFzZTsKCi8qKgogKiBSYW5nZQogKgogKiBAYXV0aG9yIEFudGhvbiBQYW5nIDxhbnRob24ucGFuZ0BnbWFpbC5jb20+CiAqLwpjbGFzcyBSYW5nZQp7CiAgICBwdWJsaWMgJGZpcnN0OwogICAgcHVibGljICRsYXN0OwoKICAgIC8qKgogICAgICogSW5pdGlhbGl6ZSByYW5nZQogICAgICoKICAgICAqIEBwYXJhbSBpbnRlZ2VyfGZsb2F0ICRmaXJzdAogICAgICogQHBhcmFtIGludGVnZXJ8ZmxvYXQgJGxhc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaXJzdCwgJGxhc3QpCiAgICB7CiAgICAgICAgJHRoaXMtPmZpcnN0ID0gJGZpcnN0OwogICAgICAgICR0aGlzLT5sYXN0ID0gJGxhc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IGZvciBpbmNsdXNpb24gaW4gcmFuZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlcnxmbG9hdCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluY2x1ZGVzKCR2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gJHZhbHVlID49ICR0aGlzLT5maXJzdCAmJiAkdmFsdWUgPD0gJHRoaXMtPmxhc3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Block.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCi8qKgogKiBCbG9jawogKgogKiBAYXV0aG9yIEFudGhvbiBQYW5nIDxhbnRob24ucGFuZ0BnbWFpbC5jb20+CiAqLwpjbGFzcyBCbG9jawp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgXExlYWZvXFNjc3NQaHBcQmxvY2sKICAgICAqLwogICAgcHVibGljICRwYXJlbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgcHVibGljICRzb3VyY2VJbmRleDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgJHNvdXJjZUxpbmU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgcHVibGljICRzb3VyY2VDb2x1bW47CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkc2VsZWN0b3JzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJGNvbW1lbnRzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJGNoaWxkcmVuOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Colors.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCi8qKgogKiBDU1MgQ29sb3JzCiAqCiAqIEBhdXRob3IgTGVhZiBDb3Jjb3JhbiA8bGVhZm90QGdtYWlsLmNvbT4KICovCmNsYXNzIENvbG9ycwp7CiAgICAvKioKICAgICAqIENTUyBDb2xvcnMKICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGNzc0NvbG9ycyA9IFsKICAgICAgICAnYWxpY2VibHVlJyA9PiAnMjQwLDI0OCwyNTUnLAogICAgICAgICdhbnRpcXVld2hpdGUnID0+ICcyNTAsMjM1LDIxNScsCiAgICAgICAgJ2FxdWEnID0+ICcwLDI1NSwyNTUnLAogICAgICAgICdhcXVhbWFyaW5lJyA9PiAnMTI3LDI1NSwyMTInLAogICAgICAgICdhenVyZScgPT4gJzI0MCwyNTUsMjU1JywKICAgICAgICAnYmVpZ2UnID0+ICcyNDUsMjQ1LDIyMCcsCiAgICAgICAgJ2Jpc3F1ZScgPT4gJzI1NSwyMjgsMTk2JywKICAgICAgICAnYmxhY2snID0+ICcwLDAsMCcsCiAgICAgICAgJ2JsYW5jaGVkYWxtb25kJyA9PiAnMjU1LDIzNSwyMDUnLAogICAgICAgICdibHVlJyA9PiAnMCwwLDI1NScsCiAgICAgICAgJ2JsdWV2aW9sZXQnID0+ICcxMzgsNDMsMjI2JywKICAgICAgICAnYnJvd24nID0+ICcxNjUsNDIsNDInLAogICAgICAgICdidXJseXdvb2QnID0+ICcyMjIsMTg0LDEzNScsCiAgICAgICAgJ2NhZGV0Ymx1ZScgPT4gJzk1LDE1OCwxNjAnLAogICAgICAgICdjaGFydHJldXNlJyA9PiAnMTI3LDI1NSwwJywKICAgICAgICAnY2hvY29sYXRlJyA9PiAnMjEwLDEwNSwzMCcsCiAgICAgICAgJ2NvcmFsJyA9PiAnMjU1LDEyNyw4MCcsCiAgICAgICAgJ2Nvcm5mbG93ZXJibHVlJyA9PiAnMTAwLDE0OSwyMzcnLAogICAgICAgICdjb3Juc2lsaycgPT4gJzI1NSwyNDgsMjIwJywKICAgICAgICAnY3JpbXNvbicgPT4gJzIyMCwyMCw2MCcsCiAgICAgICAgJ2N5YW4nID0+ICcwLDI1NSwyNTUnLAogICAgICAgICdkYXJrYmx1ZScgPT4gJzAsMCwxMzknLAogICAgICAgICdkYXJrY3lhbicgPT4gJzAsMTM5LDEzOScsCiAgICAgICAgJ2Rhcmtnb2xkZW5yb2QnID0+ICcxODQsMTM0LDExJywKICAgICAgICAnZGFya2dyYXknID0+ICcxNjksMTY5LDE2OScsCiAgICAgICAgJ2RhcmtncmVlbicgPT4gJzAsMTAwLDAnLAogICAgICAgICdkYXJrZ3JleScgPT4gJzE2OSwxNjksMTY5JywKICAgICAgICAnZGFya2toYWtpJyA9PiAnMTg5LDE4MywxMDcnLAogICAgICAgICdkYXJrbWFnZW50YScgPT4gJzEzOSwwLDEzOScsCiAgICAgICAgJ2RhcmtvbGl2ZWdyZWVuJyA9PiAnODUsMTA3LDQ3JywKICAgICAgICAnZGFya29yYW5nZScgPT4gJzI1NSwxNDAsMCcsCiAgICAgICAgJ2RhcmtvcmNoaWQnID0+ICcxNTMsNTAsMjA0JywKICAgICAgICAnZGFya3JlZCcgPT4gJzEzOSwwLDAnLAogICAgICAgICdkYXJrc2FsbW9uJyA9PiAnMjMzLDE1MCwxMjInLAogICAgICAgICdkYXJrc2VhZ3JlZW4nID0+ICcxNDMsMTg4LDE0MycsCiAgICAgICAgJ2RhcmtzbGF0ZWJsdWUnID0+ICc3Miw2MSwxMzknLAogICAgICAgICdkYXJrc2xhdGVncmF5JyA9PiAnNDcsNzksNzknLAogICAgICAgICdkYXJrc2xhdGVncmV5JyA9PiAnNDcsNzksNzknLAogICAgICAgICdkYXJrdHVycXVvaXNlJyA9PiAnMCwyMDYsMjA5JywKICAgICAgICAnZGFya3Zpb2xldCcgPT4gJzE0OCwwLDIxMScsCiAgICAgICAgJ2RlZXBwaW5rJyA9PiAnMjU1LDIwLDE0NycsCiAgICAgICAgJ2RlZXBza3libHVlJyA9PiAnMCwxOTEsMjU1JywKICAgICAgICAnZGltZ3JheScgPT4gJzEwNSwxMDUsMTA1JywKICAgICAgICAnZGltZ3JleScgPT4gJzEwNSwxMDUsMTA1JywKICAgICAgICAnZG9kZ2VyYmx1ZScgPT4gJzMwLDE0NCwyNTUnLAogICAgICAgICdmaXJlYnJpY2snID0+ICcxNzgsMzQsMzQnLAogICAgICAgICdmbG9yYWx3aGl0ZScgPT4gJzI1NSwyNTAsMjQwJywKICAgICAgICAnZm9yZXN0Z3JlZW4nID0+ICczNCwxMzksMzQnLAogICAgICAgICdmdWNoc2lhJyA9PiAnMjU1LDAsMjU1JywKICAgICAgICAnZ2FpbnNib3JvJyA9PiAnMjIwLDIyMCwyMjAnLAogICAgICAgICdnaG9zdHdoaXRlJyA9PiAnMjQ4LDI0OCwyNTUnLAogICAgICAgICdnb2xkJyA9PiAnMjU1LDIxNSwwJywKICAgICAgICAnZ29sZGVucm9kJyA9PiAnMjE4LDE2NSwzMicsCiAgICAgICAgJ2dyYXknID0+ICcxMjgsMTI4LDEyOCcsCiAgICAgICAgJ2dyZWVuJyA9PiAnMCwxMjgsMCcsCiAgICAgICAgJ2dyZWVueWVsbG93JyA9PiAnMTczLDI1NSw0NycsCiAgICAgICAgJ2dyZXknID0+ICcxMjgsMTI4LDEyOCcsCiAgICAgICAgJ2hvbmV5ZGV3JyA9PiAnMjQwLDI1NSwyNDAnLAogICAgICAgICdob3RwaW5rJyA9PiAnMjU1LDEwNSwxODAnLAogICAgICAgICdpbmRpYW5yZWQnID0+ICcyMDUsOTIsOTInLAogICAgICAgICdpbmRpZ28nID0+ICc3NSwwLDEzMCcsCiAgICAgICAgJ2l2b3J5JyA9PiAnMjU1LDI1NSwyNDAnLAogICAgICAgICdraGFraScgPT4gJzI0MCwyMzAsMTQwJywKICAgICAgICAnbGF2ZW5kZXInID0+ICcyMzAsMjMwLDI1MCcsCiAgICAgICAgJ2xhdmVuZGVyYmx1c2gnID0+ICcyNTUsMjQwLDI0NScsCiAgICAgICAgJ2xhd25ncmVlbicgPT4gJzEyNCwyNTIsMCcsCiAgICAgICAgJ2xlbW9uY2hpZmZvbicgPT4gJzI1NSwyNTAsMjA1JywKICAgICAgICAnbGlnaHRibHVlJyA9PiAnMTczLDIxNiwyMzAnLAogICAgICAgICdsaWdodGNvcmFsJyA9PiAnMjQwLDEyOCwxMjgnLAogICAgICAgICdsaWdodGN5YW4nID0+ICcyMjQsMjU1LDI1NScsCiAgICAgICAgJ2xpZ2h0Z29sZGVucm9keWVsbG93JyA9PiAnMjUwLDI1MCwyMTAnLAogICAgICAgICdsaWdodGdyYXknID0+ICcyMTEsMjExLDIxMScsCiAgICAgICAgJ2xpZ2h0Z3JlZW4nID0+ICcxNDQsMjM4LDE0NCcsCiAgICAgICAgJ2xpZ2h0Z3JleScgPT4gJzIxMSwyMTEsMjExJywKICAgICAgICAnbGlnaHRwaW5rJyA9PiAnMjU1LDE4MiwxOTMnLAogICAgICAgICdsaWdodHNhbG1vbicgPT4gJzI1NSwxNjAsMTIyJywKICAgICAgICAnbGlnaHRzZWFncmVlbicgPT4gJzMyLDE3OCwxNzAnLAogICAgICAgICdsaWdodHNreWJsdWUnID0+ICcxMzUsMjA2LDI1MCcsCiAgICAgICAgJ2xpZ2h0c2xhdGVncmF5JyA9PiAnMTE5LDEzNiwxNTMnLAogICAgICAgICdsaWdodHNsYXRlZ3JleScgPT4gJzExOSwxMzYsMTUzJywKICAgICAgICAnbGlnaHRzdGVlbGJsdWUnID0+ICcxNzYsMTk2LDIyMicsCiAgICAgICAgJ2xpZ2h0eWVsbG93JyA9PiAnMjU1LDI1NSwyMjQnLAogICAgICAgICdsaW1lJyA9PiAnMCwyNTUsMCcsCiAgICAgICAgJ2xpbWVncmVlbicgPT4gJzUwLDIwNSw1MCcsCiAgICAgICAgJ2xpbmVuJyA9PiAnMjUwLDI0MCwyMzAnLAogICAgICAgICdtYWdlbnRhJyA9PiAnMjU1LDAsMjU1JywKICAgICAgICAnbWFyb29uJyA9PiAnMTI4LDAsMCcsCiAgICAgICAgJ21lZGl1bWFxdWFtYXJpbmUnID0+ICcxMDIsMjA1LDE3MCcsCiAgICAgICAgJ21lZGl1bWJsdWUnID0+ICcwLDAsMjA1JywKICAgICAgICAnbWVkaXVtb3JjaGlkJyA9PiAnMTg2LDg1LDIxMScsCiAgICAgICAgJ21lZGl1bXB1cnBsZScgPT4gJzE0NywxMTIsMjE5JywKICAgICAgICAnbWVkaXVtc2VhZ3JlZW4nID0+ICc2MCwxNzksMTEzJywKICAgICAgICAnbWVkaXVtc2xhdGVibHVlJyA9PiAnMTIzLDEwNCwyMzgnLAogICAgICAgICdtZWRpdW1zcHJpbmdncmVlbicgPT4gJzAsMjUwLDE1NCcsCiAgICAgICAgJ21lZGl1bXR1cnF1b2lzZScgPT4gJzcyLDIwOSwyMDQnLAogICAgICAgICdtZWRpdW12aW9sZXRyZWQnID0+ICcxOTksMjEsMTMzJywKICAgICAgICAnbWlkbmlnaHRibHVlJyA9PiAnMjUsMjUsMTEyJywKICAgICAgICAnbWludGNyZWFtJyA9PiAnMjQ1LDI1NSwyNTAnLAogICAgICAgICdtaXN0eXJvc2UnID0+ICcyNTUsMjI4LDIyNScsCiAgICAgICAgJ21vY2Nhc2luJyA9PiAnMjU1LDIyOCwxODEnLAogICAgICAgICduYXZham93aGl0ZScgPT4gJzI1NSwyMjIsMTczJywKICAgICAgICAnbmF2eScgPT4gJzAsMCwxMjgnLAogICAgICAgICdvbGRsYWNlJyA9PiAnMjUzLDI0NSwyMzAnLAogICAgICAgICdvbGl2ZScgPT4gJzEyOCwxMjgsMCcsCiAgICAgICAgJ29saXZlZHJhYicgPT4gJzEwNywxNDIsMzUnLAogICAgICAgICdvcmFuZ2UnID0+ICcyNTUsMTY1LDAnLAogICAgICAgICdvcmFuZ2VyZWQnID0+ICcyNTUsNjksMCcsCiAgICAgICAgJ29yY2hpZCcgPT4gJzIxOCwxMTIsMjE0JywKICAgICAgICAncGFsZWdvbGRlbnJvZCcgPT4gJzIzOCwyMzIsMTcwJywKICAgICAgICAncGFsZWdyZWVuJyA9PiAnMTUyLDI1MSwxNTInLAogICAgICAgICdwYWxldHVycXVvaXNlJyA9PiAnMTc1LDIzOCwyMzgnLAogICAgICAgICdwYWxldmlvbGV0cmVkJyA9PiAnMjE5LDExMiwxNDcnLAogICAgICAgICdwYXBheWF3aGlwJyA9PiAnMjU1LDIzOSwyMTMnLAogICAgICAgICdwZWFjaHB1ZmYnID0+ICcyNTUsMjE4LDE4NScsCiAgICAgICAgJ3BlcnUnID0+ICcyMDUsMTMzLDYzJywKICAgICAgICAncGluaycgPT4gJzI1NSwxOTIsMjAzJywKICAgICAgICAncGx1bScgPT4gJzIyMSwxNjAsMjIxJywKICAgICAgICAncG93ZGVyYmx1ZScgPT4gJzE3NiwyMjQsMjMwJywKICAgICAgICAncHVycGxlJyA9PiAnMTI4LDAsMTI4JywKICAgICAgICAncmViZWNjYXB1cnBsZScgPT4gJzEwMiw1MSwxNTMnLAogICAgICAgICdyZWQnID0+ICcyNTUsMCwwJywKICAgICAgICAncm9zeWJyb3duJyA9PiAnMTg4LDE0MywxNDMnLAogICAgICAgICdyb3lhbGJsdWUnID0+ICc2NSwxMDUsMjI1JywKICAgICAgICAnc2FkZGxlYnJvd24nID0+ICcxMzksNjksMTknLAogICAgICAgICdzYWxtb24nID0+ICcyNTAsMTI4LDExNCcsCiAgICAgICAgJ3NhbmR5YnJvd24nID0+ICcyNDQsMTY0LDk2JywKICAgICAgICAnc2VhZ3JlZW4nID0+ICc0NiwxMzksODcnLAogICAgICAgICdzZWFzaGVsbCcgPT4gJzI1NSwyNDUsMjM4JywKICAgICAgICAnc2llbm5hJyA9PiAnMTYwLDgyLDQ1JywKICAgICAgICAnc2lsdmVyJyA9PiAnMTkyLDE5MiwxOTInLAogICAgICAgICdza3libHVlJyA9PiAnMTM1LDIwNiwyMzUnLAogICAgICAgICdzbGF0ZWJsdWUnID0+ICcxMDYsOTAsMjA1JywKICAgICAgICAnc2xhdGVncmF5JyA9PiAnMTEyLDEyOCwxNDQnLAogICAgICAgICdzbGF0ZWdyZXknID0+ICcxMTIsMTI4LDE0NCcsCiAgICAgICAgJ3Nub3cnID0+ICcyNTUsMjUwLDI1MCcsCiAgICAgICAgJ3NwcmluZ2dyZWVuJyA9PiAnMCwyNTUsMTI3JywKICAgICAgICAnc3RlZWxibHVlJyA9PiAnNzAsMTMwLDE4MCcsCiAgICAgICAgJ3RhbicgPT4gJzIxMCwxODAsMTQwJywKICAgICAgICAndGVhbCcgPT4gJzAsMTI4LDEyOCcsCiAgICAgICAgJ3RoaXN0bGUnID0+ICcyMTYsMTkxLDIxNicsCiAgICAgICAgJ3RvbWF0bycgPT4gJzI1NSw5OSw3MScsCiAgICAgICAgJ3RyYW5zcGFyZW50JyA9PiAnMCwwLDAsMCcsCiAgICAgICAgJ3R1cnF1b2lzZScgPT4gJzY0LDIyNCwyMDgnLAogICAgICAgICd2aW9sZXQnID0+ICcyMzgsMTMwLDIzOCcsCiAgICAgICAgJ3doZWF0JyA9PiAnMjQ1LDIyMiwxNzknLAogICAgICAgICd3aGl0ZScgPT4gJzI1NSwyNTUsMjU1JywKICAgICAgICAnd2hpdGVzbW9rZScgPT4gJzI0NSwyNDUsMjQ1JywKICAgICAgICAneWVsbG93JyA9PiAnMjU1LDI1NSwwJywKICAgICAgICAneWVsbG93Z3JlZW4nID0+ICcxNTQsMjA1LDUwJywKICAgIF07Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Compiler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCnVzZSBMZWFmb1xTY3NzUGhwXEJhc2VcUmFuZ2U7CnVzZSBMZWFmb1xTY3NzUGhwXEJsb2NrOwp1c2UgTGVhZm9cU2Nzc1BocFxDb2xvcnM7CnVzZSBMZWFmb1xTY3NzUGhwXENvbXBpbGVyXEVudmlyb25tZW50Owp1c2UgTGVhZm9cU2Nzc1BocFxFeGNlcHRpb25cQ29tcGlsZXJFeGNlcHRpb247CnVzZSBMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jazsKdXNlIExlYWZvXFNjc3NQaHBcTm9kZTsKdXNlIExlYWZvXFNjc3NQaHBcVHlwZTsKdXNlIExlYWZvXFNjc3NQaHBcUGFyc2VyOwp1c2UgTGVhZm9cU2Nzc1BocFxVdGlsOwoKLyoqCiAqIFRoZSBzY3NzIGNvbXBpbGVyIGFuZCBwYXJzZXIuCiAqCiAqIENvbnZlcnRpbmcgU0NTUyB0byBDU1MgaXMgYSB0aHJlZSBzdGFnZSBwcm9jZXNzLiBUaGUgaW5jb21pbmcgZmlsZSBpcyBwYXJzZWQKICogYnkgYFBhcnNlcmAgaW50byBhIHN5bnRheCB0cmVlLCB0aGVuIGl0IGlzIGNvbXBpbGVkIGludG8gYW5vdGhlciB0cmVlCiAqIHJlcHJlc2VudGluZyB0aGUgQ1NTIHN0cnVjdHVyZSBieSBgQ29tcGlsZXJgLiBUaGUgQ1NTIHRyZWUgaXMgZmVkIGludG8gYQogKiBmb3JtYXR0ZXIsIGxpa2UgYEZvcm1hdHRlcmAgd2hpY2ggdGhlbiBvdXRwdXRzIENTUyBhcyBhIHN0cmluZy4KICoKICogRHVyaW5nIHRoZSBmaXJzdCBjb21waWxlLCBhbGwgdmFsdWVzIGFyZSAqcmVkdWNlZCosIHdoaWNoIG1lYW5zIHRoYXQgdGhlaXIKICogdHlwZXMgYXJlIGJyb3VnaHQgdG8gdGhlIGxvd2VzdCBmb3JtIGJlZm9yZSBiZWluZyBkdW1wIGFzIHN0cmluZ3MuIFRoaXMKICogaGFuZGxlcyBtYXRoIGVxdWF0aW9ucywgdmFyaWFibGUgZGVyZWZlcmVuY2VzLCBhbmQgdGhlIGxpa2UuCiAqCiAqIFRoZSBgY29tcGlsZWAgZnVuY3Rpb24gb2YgYENvbXBpbGVyYCBpcyB0aGUgZW50cnkgcG9pbnQuCiAqCiAqIEluIHN1bW1hcnk6CiAqCiAqIFRoZSBgQ29tcGlsZXJgIGNsYXNzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHBhcnNlciwgZmVlZHMgaXQgU0NTUyBjb2RlLAogKiB0aGVuIHRyYW5zZm9ybXMgdGhlIHJlc3VsdGluZyB0cmVlIHRvIGEgQ1NTIHRyZWUuIFRoaXMgY2xhc3MgYWxzbyBob2xkcyB0aGUKICogZXZhbHVhdGlvbiBjb250ZXh0LCBzdWNoIGFzIGFsbCBhdmFpbGFibGUgbWl4aW5zIGFuZCB2YXJpYWJsZXMgYXQgYW55IGdpdmVuCiAqIHRpbWUuCiAqCiAqIFRoZSBgUGFyc2VyYCBjbGFzcyBpcyBvbmx5IGNvbmNlcm5lZCB3aXRoIHBhcnNpbmcgaXRzIGlucHV0LgogKgogKiBUaGUgYEZvcm1hdHRlcmAgdGFrZXMgYSBDU1MgdHJlZSwgYW5kIGR1bXBzIGl0IHRvIGEgZm9ybWF0dGVkIHN0cmluZywKICogaGFuZGxpbmcgdGhpbmdzIGxpa2UgaW5kZW50YXRpb24uCiAqLwoKLyoqCiAqIFNDU1MgY29tcGlsZXIKICoKICogQGF1dGhvciBMZWFmIENvcmNvcmFuIDxsZWFmb3RAZ21haWwuY29tPgogKi8KY2xhc3MgQ29tcGlsZXIKewogICAgY29uc3QgTElORV9DT01NRU5UUyA9IDE7CiAgICBjb25zdCBERUJVR19JTkZPICAgID0gMjsKCiAgICBjb25zdCBXSVRIX1JVTEUgICAgID0gMTsKICAgIGNvbnN0IFdJVEhfTUVESUEgICAgPSAyOwogICAgY29uc3QgV0lUSF9TVVBQT1JUUyA9IDQ7CiAgICBjb25zdCBXSVRIX0FMTCAgICAgID0gNzsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgc3RhdGljIHByb3RlY3RlZCAkb3BlcmF0b3JOYW1lcyA9IFsKICAgICAgICAnKycgICA9PiAnYWRkJywKICAgICAgICAnLScgICA9PiAnc3ViJywKICAgICAgICAnKicgICA9PiAnbXVsJywKICAgICAgICAnLycgICA9PiAnZGl2JywKICAgICAgICAnJScgICA9PiAnbW9kJywKCiAgICAgICAgJz09JyAgPT4gJ2VxJywKICAgICAgICAnIT0nICA9PiAnbmVxJywKICAgICAgICAnPCcgICA9PiAnbHQnLAogICAgICAgICc+JyAgID0+ICdndCcsCgogICAgICAgICc8PScgID0+ICdsdGUnLAogICAgICAgICc+PScgID0+ICdndGUnLAogICAgICAgICc8PT4nID0+ICdjbXAnLAogICAgXTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgc3RhdGljIHByb3RlY3RlZCAkbmFtZXNwYWNlcyA9IFsKICAgICAgICAnc3BlY2lhbCcgID0+ICclJywKICAgICAgICAnbWl4aW4nICAgID0+ICdAJywKICAgICAgICAnZnVuY3Rpb24nID0+ICdeJywKICAgIF07CgogICAgc3RhdGljIHB1YmxpYyAkdHJ1ZSA9IFtUeXBlOjpUX0tFWVdPUkQsICd0cnVlJ107CiAgICBzdGF0aWMgcHVibGljICRmYWxzZSA9IFtUeXBlOjpUX0tFWVdPUkQsICdmYWxzZSddOwogICAgc3RhdGljIHB1YmxpYyAkbnVsbCA9IFtUeXBlOjpUX05VTExdOwogICAgc3RhdGljIHB1YmxpYyAkbnVsbFN0cmluZyA9IFtUeXBlOjpUX1NUUklORywgJycsIFtdXTsKICAgIHN0YXRpYyBwdWJsaWMgJGRlZmF1bHRWYWx1ZSA9IFtUeXBlOjpUX0tFWVdPUkQsICcnXTsKICAgIHN0YXRpYyBwdWJsaWMgJHNlbGZTZWxlY3RvciA9IFtUeXBlOjpUX1NFTEZdOwogICAgc3RhdGljIHB1YmxpYyAkZW1wdHlMaXN0ID0gW1R5cGU6OlRfTElTVCwgJycsIFtdXTsKICAgIHN0YXRpYyBwdWJsaWMgJGVtcHR5TWFwID0gW1R5cGU6OlRfTUFQLCBbXSwgW11dOwogICAgc3RhdGljIHB1YmxpYyAkZW1wdHlTdHJpbmcgPSBbVHlwZTo6VF9TVFJJTkcsICciJywgW11dOwogICAgc3RhdGljIHB1YmxpYyAkd2l0aCA9IFtUeXBlOjpUX0tFWVdPUkQsICd3aXRoJ107CiAgICBzdGF0aWMgcHVibGljICR3aXRob3V0ID0gW1R5cGU6OlRfS0VZV09SRCwgJ3dpdGhvdXQnXTsKCiAgICBwcm90ZWN0ZWQgJGltcG9ydFBhdGhzID0gWycnXTsKICAgIHByb3RlY3RlZCAkaW1wb3J0Q2FjaGUgPSBbXTsKICAgIHByb3RlY3RlZCAkaW1wb3J0ZWRGaWxlcyA9IFtdOwogICAgcHJvdGVjdGVkICR1c2VyRnVuY3Rpb25zID0gW107CiAgICBwcm90ZWN0ZWQgJHJlZ2lzdGVyZWRWYXJzID0gW107CiAgICBwcm90ZWN0ZWQgJHJlZ2lzdGVyZWRGZWF0dXJlcyA9IFsKICAgICAgICAnZXh0ZW5kLXNlbGVjdG9yLXBzZXVkb2NsYXNzJyA9PiBmYWxzZSwKICAgICAgICAnYXQtZXJyb3InICAgICAgICAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgICd1bml0cy1sZXZlbC0zJyAgICAgICAgICAgICAgID0+IGZhbHNlLAogICAgICAgICdnbG9iYWwtdmFyaWFibGUtc2hhZG93aW5nJyAgID0+IGZhbHNlLAogICAgXTsKCiAgICBwcm90ZWN0ZWQgJGVuY29kaW5nID0gbnVsbDsKICAgIHByb3RlY3RlZCAkbGluZU51bWJlclN0eWxlID0gbnVsbDsKCiAgICBwcm90ZWN0ZWQgJGZvcm1hdHRlciA9ICdMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxOZXN0ZWQnOwoKICAgIHByb3RlY3RlZCAkcm9vdEVudjsKICAgIHByb3RlY3RlZCAkcm9vdEJsb2NrOwoKICAgIHByaXZhdGUgJGluZGVudExldmVsOwogICAgcHJpdmF0ZSAkY29tbWVudHNTZWVuOwogICAgcHJpdmF0ZSAkZXh0ZW5kczsKICAgIHByaXZhdGUgJGV4dGVuZHNNYXA7CiAgICBwcml2YXRlICRwYXJzZWRGaWxlczsKICAgIHByaXZhdGUgJGVudjsKICAgIHByaXZhdGUgJHNjb3BlOwogICAgcHJpdmF0ZSAkcGFyc2VyOwogICAgcHJpdmF0ZSAkc291cmNlTmFtZXM7CiAgICBwcml2YXRlICRzb3VyY2VJbmRleDsKICAgIHByaXZhdGUgJHNvdXJjZUxpbmU7CiAgICBwcml2YXRlICRzb3VyY2VDb2x1bW47CiAgICBwcml2YXRlICRzdG9yZUVudjsKICAgIHByaXZhdGUgJGNoYXJzZXRTZWVuOwogICAgcHJpdmF0ZSAkc3RkZXJyOwogICAgcHJpdmF0ZSAkc2hvdWxkRXZhbHVhdGU7CiAgICBwcml2YXRlICRpZ25vcmVFcnJvcnM7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5wYXJzZWRGaWxlcyA9IFtdOwogICAgICAgICR0aGlzLT5zb3VyY2VOYW1lcyA9IFtdOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSBzY3NzCiAgICAgKgogICAgICogQGFwaQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvZGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgkY29kZSwgJHBhdGggPSBudWxsKQogICAgewogICAgICAgICRsb2NhbGUgPSBzZXRsb2NhbGUoTENfTlVNRVJJQywgMCk7CiAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsICdDJyk7CgogICAgICAgICR0aGlzLT5pbmRlbnRMZXZlbCAgICA9IC0xOwogICAgICAgICR0aGlzLT5jb21tZW50c1NlZW4gICA9IFtdOwogICAgICAgICR0aGlzLT5leHRlbmRzICAgICAgICA9IFtdOwogICAgICAgICR0aGlzLT5leHRlbmRzTWFwICAgICA9IFtdOwogICAgICAgICR0aGlzLT5zb3VyY2VJbmRleCAgICA9IG51bGw7CiAgICAgICAgJHRoaXMtPnNvdXJjZUxpbmUgICAgID0gbnVsbDsKICAgICAgICAkdGhpcy0+c291cmNlQ29sdW1uICAgPSBudWxsOwogICAgICAgICR0aGlzLT5lbnYgICAgICAgICAgICA9IG51bGw7CiAgICAgICAgJHRoaXMtPnNjb3BlICAgICAgICAgID0gbnVsbDsKICAgICAgICAkdGhpcy0+c3RvcmVFbnYgICAgICAgPSBudWxsOwogICAgICAgICR0aGlzLT5jaGFyc2V0U2VlbiAgICA9IG51bGw7CiAgICAgICAgJHRoaXMtPnNob3VsZEV2YWx1YXRlID0gbnVsbDsKICAgICAgICAkdGhpcy0+c3RkZXJyICAgICAgICAgPSBmb3BlbigncGhwOi8vc3RkZXJyJywgJ3cnKTsKCiAgICAgICAgJHRoaXMtPnBhcnNlciA9ICR0aGlzLT5wYXJzZXJGYWN0b3J5KCRwYXRoKTsKICAgICAgICAkdHJlZSA9ICR0aGlzLT5wYXJzZXItPnBhcnNlKCRjb2RlKTsKICAgICAgICAkdGhpcy0+cGFyc2VyID0gbnVsbDsKCiAgICAgICAgJHRoaXMtPmZvcm1hdHRlciA9IG5ldyAkdGhpcy0+Zm9ybWF0dGVyKCk7CiAgICAgICAgJHRoaXMtPnJvb3RCbG9jayA9IG51bGw7CiAgICAgICAgJHRoaXMtPnJvb3RFbnYgICA9ICR0aGlzLT5wdXNoRW52KCR0cmVlKTsKCiAgICAgICAgJHRoaXMtPmluamVjdFZhcmlhYmxlcygkdGhpcy0+cmVnaXN0ZXJlZFZhcnMpOwogICAgICAgICR0aGlzLT5jb21waWxlUm9vdCgkdHJlZSk7CiAgICAgICAgJHRoaXMtPnBvcEVudigpOwoKICAgICAgICAkb3V0ID0gJHRoaXMtPmZvcm1hdHRlci0+Zm9ybWF0KCR0aGlzLT5zY29wZSk7CgogICAgICAgIHNldGxvY2FsZShMQ19OVU1FUklDLCAkbG9jYWxlKTsKCiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbnN0YW50aWF0ZSBwYXJzZXIKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKgogICAgICogQHJldHVybiBcTGVhZm9cU2Nzc1BocFxQYXJzZXIKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZXJGYWN0b3J5KCRwYXRoKQogICAgewogICAgICAgICRwYXJzZXIgPSBuZXcgUGFyc2VyKCRwYXRoLCBjb3VudCgkdGhpcy0+c291cmNlTmFtZXMpLCAkdGhpcy0+ZW5jb2RpbmcpOwoKICAgICAgICAkdGhpcy0+c291cmNlTmFtZXNbXSA9ICRwYXRoOwogICAgICAgICR0aGlzLT5hZGRQYXJzZWRGaWxlKCRwYXRoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBJcyBzZWxmIGV4dGVuZD8KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHRhcmdldAogICAgICogQHBhcmFtIGFycmF5ICRvcmlnaW4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzU2VsZkV4dGVuZCgkdGFyZ2V0LCAkb3JpZ2luKQogICAgewogICAgICAgIGZvcmVhY2ggKCRvcmlnaW4gYXMgJHNlbCkgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHRhcmdldCwgJHNlbCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXNoIGV4dGVuZHMKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICR0YXJnZXQKICAgICAqIEBwYXJhbSBhcnJheSAgICAgJG9yaWdpbgogICAgICogQHBhcmFtIFxzdGRDbGFzcyAkYmxvY2sKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHB1c2hFeHRlbmRzKCR0YXJnZXQsICRvcmlnaW4sICRibG9jaykKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzU2VsZkV4dGVuZCgkdGFyZ2V0LCAkb3JpZ2luKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkaSA9IGNvdW50KCR0aGlzLT5leHRlbmRzKTsKICAgICAgICAkdGhpcy0+ZXh0ZW5kc1tdID0gWyR0YXJnZXQsICRvcmlnaW4sICRibG9ja107CgogICAgICAgIGZvcmVhY2ggKCR0YXJnZXQgYXMgJHBhcnQpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5leHRlbmRzTWFwWyRwYXJ0XSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5leHRlbmRzTWFwWyRwYXJ0XVtdID0gJGk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZXh0ZW5kc01hcFskcGFydF0gPSBbJGldOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTWFrZSBvdXRwdXQgYmxvY2sKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRzZWxlY3RvcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFxMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jawogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbWFrZU91dHB1dEJsb2NrKCR0eXBlLCAkc2VsZWN0b3JzID0gbnVsbCkKICAgIHsKICAgICAgICAkb3V0ID0gbmV3IE91dHB1dEJsb2NrOwogICAgICAgICRvdXQtPnR5cGUgICAgICA9ICR0eXBlOwogICAgICAgICRvdXQtPmxpbmVzICAgICA9IFtdOwogICAgICAgICRvdXQtPmNoaWxkcmVuICA9IFtdOwogICAgICAgICRvdXQtPnBhcmVudCAgICA9ICR0aGlzLT5zY29wZTsKICAgICAgICAkb3V0LT5zZWxlY3RvcnMgPSAkc2VsZWN0b3JzOwogICAgICAgICRvdXQtPmRlcHRoICAgICA9ICR0aGlzLT5lbnYtPmRlcHRoOwoKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBpbGUgcm9vdAogICAgICoKICAgICAqIEBwYXJhbSBcTGVhZm9cU2Nzc1BocFxCbG9jayAkcm9vdEJsb2NrCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb21waWxlUm9vdChCbG9jayAkcm9vdEJsb2NrKQogICAgewogICAgICAgICR0aGlzLT5yb290QmxvY2sgPSAkdGhpcy0+c2NvcGUgPSAkdGhpcy0+bWFrZU91dHB1dEJsb2NrKFR5cGU6OlRfUk9PVCk7CgogICAgICAgICR0aGlzLT5jb21waWxlQ2hpbGRyZW5Ob1JldHVybigkcm9vdEJsb2NrLT5jaGlsZHJlbiwgJHRoaXMtPnNjb3BlKTsKICAgICAgICAkdGhpcy0+ZmxhdHRlblNlbGVjdG9ycygkdGhpcy0+c2NvcGUpOwogICAgICAgICR0aGlzLT5taXNzaW5nU2VsZWN0b3JzKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXBvcnQgbWlzc2luZyBzZWxlY3RvcnMKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG1pc3NpbmdTZWxlY3RvcnMoKQogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5leHRlbmRzIGFzICRleHRlbmQpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRleHRlbmRbM10pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGlzdCgkdGFyZ2V0LCAkb3JpZ2luLCAkYmxvY2spID0gJGV4dGVuZDsKCiAgICAgICAgICAgIC8vIGlnbm9yZSBpZiAhb3B0aW9uYWwKICAgICAgICAgICAgaWYgKCRibG9ja1syXSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0YXJnZXQgPSBpbXBsb2RlKCcgJywgJHRhcmdldCk7CiAgICAgICAgICAgICRvcmlnaW4gPSAkdGhpcy0+Y29sbGFwc2VTZWxlY3RvcnMoJG9yaWdpbik7CgogICAgICAgICAgICAkdGhpcy0+c291cmNlTGluZSA9ICRibG9ja1tQYXJzZXI6OlNPVVJDRV9MSU5FXTsKICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoIlwiJG9yaWdpblwiIGZhaWxlZCB0byBAZXh0ZW5kIFwiJHRhcmdldFwiLiBUaGUgc2VsZWN0b3IgXCIkdGFyZ2V0XCIgd2FzIG5vdCBmb3VuZC4iKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGbGF0dGVuIHNlbGVjdG9ycwogICAgICoKICAgICAqIEBwYXJhbSBcTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXJcT3V0cHV0QmxvY2sgJGJsb2NrCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnRLZXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZsYXR0ZW5TZWxlY3RvcnMoT3V0cHV0QmxvY2sgJGJsb2NrLCAkcGFyZW50S2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJGJsb2NrLT5zZWxlY3RvcnMpIHsKICAgICAgICAgICAgJHNlbGVjdG9ycyA9IFtdOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGJsb2NrLT5zZWxlY3RvcnMgYXMgJHMpIHsKICAgICAgICAgICAgICAgICRzZWxlY3RvcnNbXSA9ICRzOwoKICAgICAgICAgICAgICAgIGlmICghIGlzX2FycmF5KCRzKSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIGNoZWNrIGV4dGVuZHMKICAgICAgICAgICAgICAgIGlmICghIGVtcHR5KCR0aGlzLT5leHRlbmRzTWFwKSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYXRjaEV4dGVuZHMoJHMsICRzZWxlY3RvcnMpOwoKICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlcwogICAgICAgICAgICAgICAgICAgIGFycmF5X3dhbGsoJHNlbGVjdG9ycywgZnVuY3Rpb24gKCYkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gc2VyaWFsaXplKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICRzZWxlY3RvcnMgPSBhcnJheV91bmlxdWUoJHNlbGVjdG9ycyk7CgogICAgICAgICAgICAgICAgICAgIGFycmF5X3dhbGsoJHNlbGVjdG9ycywgZnVuY3Rpb24gKCYkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gdW5zZXJpYWxpemUoJHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGJsb2NrLT5zZWxlY3RvcnMgPSBbXTsKICAgICAgICAgICAgJHBsYWNlaG9sZGVyU2VsZWN0b3IgPSBmYWxzZTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRzZWxlY3RvcnMgYXMgJHNlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmhhc1NlbGVjdG9yUGxhY2Vob2xkZXIoJHNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICAgICRwbGFjZWhvbGRlclNlbGVjdG9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkYmxvY2stPnNlbGVjdG9yc1tdID0gJHRoaXMtPmNvbXBpbGVTZWxlY3Rvcigkc2VsZWN0b3IpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHBsYWNlaG9sZGVyU2VsZWN0b3IgJiYgMCA9PT0gY291bnQoJGJsb2NrLT5zZWxlY3RvcnMpICYmIG51bGwgIT09ICRwYXJlbnRLZXkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRibG9jay0+cGFyZW50LT5jaGlsZHJlblskcGFyZW50S2V5XSk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkYmxvY2stPmNoaWxkcmVuIGFzICRrZXkgPT4gJGNoaWxkKSB7CiAgICAgICAgICAgICR0aGlzLT5mbGF0dGVuU2VsZWN0b3JzKCRjaGlsZCwgJGtleSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTWF0Y2ggZXh0ZW5kcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgICRzZWxlY3RvcgogICAgICogQHBhcmFtIGFycmF5ICAgJG91dAogICAgICogQHBhcmFtIGludGVnZXIgJGZyb20KICAgICAqIEBwYXJhbSBib29sZWFuICRpbml0aWFsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBtYXRjaEV4dGVuZHMoJHNlbGVjdG9yLCAmJG91dCwgJGZyb20gPSAwLCAkaW5pdGlhbCA9IHRydWUpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHNlbGVjdG9yIGFzICRpID0+ICRwYXJ0KSB7CiAgICAgICAgICAgIGlmICgkaSA8ICRmcm9tKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0aGlzLT5tYXRjaEV4dGVuZHNTaW5nbGUoJHBhcnQsICRvcmlnaW4pKSB7CiAgICAgICAgICAgICAgICAkYmVmb3JlID0gYXJyYXlfc2xpY2UoJHNlbGVjdG9yLCAwLCAkaSk7CiAgICAgICAgICAgICAgICAkYWZ0ZXIgPSBhcnJheV9zbGljZSgkc2VsZWN0b3IsICRpICsgMSk7CiAgICAgICAgICAgICAgICAkcyA9IGNvdW50KCRiZWZvcmUpOwoKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRvcmlnaW4gYXMgJG5ldykgewogICAgICAgICAgICAgICAgICAgICRrID0gMDsKCiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHNoYXJlZCBwYXJ0cwogICAgICAgICAgICAgICAgICAgIGlmICgkaW5pdGlhbCkgewogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJGsgPCAkcyAmJiBpc3NldCgkbmV3WyRrXSkgJiYgJGJlZm9yZVska10gPT09ICRuZXdbJGtdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaysrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgICRiZWZvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICRrID4gMCA/IGFycmF5X3NsaWNlKCRuZXcsICRrKSA6ICRuZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICRhZnRlcgogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0ID09PSAkc2VsZWN0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkb3V0W10gPSAkcmVzdWx0OwoKICAgICAgICAgICAgICAgICAgICAvLyByZWN1cnNpdmVseSBjaGVjayBmb3IgbW9yZSBtYXRjaGVzCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1hdGNoRXh0ZW5kcygkcmVzdWx0LCAkb3V0LCAkaSwgZmFsc2UpOwoKICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RvciBzZXF1ZW5jZSBtZXJnaW5nCiAgICAgICAgICAgICAgICAgICAgaWYgKCEgZW1wdHkoJGJlZm9yZSkgJiYgY291bnQoJG5ldykgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQyID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9zbGljZSgkbmV3LCAwLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkayA+IDAgPyBhcnJheV9zbGljZSgkYmVmb3JlLCAkaykgOiAkYmVmb3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfc2xpY2UoJG5ldywgLTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAkb3V0W10gPSAkcmVzdWx0MjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXRjaCBleHRlbmRzIHNpbmdsZQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcmF3U2luZ2xlCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dE9yaWdpbgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbWF0Y2hFeHRlbmRzU2luZ2xlKCRyYXdTaW5nbGUsICYkb3V0T3JpZ2luKQogICAgewogICAgICAgICRjb3VudHMgPSBbXTsKICAgICAgICAkc2luZ2xlID0gW107CgogICAgICAgIGZvcmVhY2ggKCRyYXdTaW5nbGUgYXMgJHBhcnQpIHsKICAgICAgICAgICAgLy8gbWF0Y2hlcyBOdW1iZXIKICAgICAgICAgICAgaWYgKCEgaXNfc3RyaW5nKCRwYXJ0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISBwcmVnX21hdGNoKCcvXltcWy46IyVdLycsICRwYXJ0KSAmJiBjb3VudCgkc2luZ2xlKSkgewogICAgICAgICAgICAgICAgJHNpbmdsZVtjb3VudCgkc2luZ2xlKSAtIDFdIC49ICRwYXJ0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHNpbmdsZVtdID0gJHBhcnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRzaW5nbGUgYXMgJHBhcnQpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5leHRlbmRzTWFwWyRwYXJ0XSkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5leHRlbmRzTWFwWyRwYXJ0XSBhcyAkaWR4KSB7CiAgICAgICAgICAgICAgICAgICAgJGNvdW50c1skaWR4XSA9IGlzc2V0KCRjb3VudHNbJGlkeF0pID8gJGNvdW50c1skaWR4XSArIDEgOiAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkb3V0T3JpZ2luID0gW107CiAgICAgICAgJGZvdW5kID0gZmFsc2U7CgogICAgICAgIGZvcmVhY2ggKCRjb3VudHMgYXMgJGlkeCA9PiAkY291bnQpIHsKICAgICAgICAgICAgbGlzdCgkdGFyZ2V0LCAkb3JpZ2luLCAvKiAkYmxvY2sgKi8pID0gJHRoaXMtPmV4dGVuZHNbJGlkeF07CgogICAgICAgICAgICAvLyBjaGVjayBjb3VudAogICAgICAgICAgICBpZiAoJGNvdW50ICE9PSBjb3VudCgkdGFyZ2V0KSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5leHRlbmRzWyRpZHhdWzNdID0gdHJ1ZTsKCiAgICAgICAgICAgICRyZW0gPSBhcnJheV9kaWZmKCRzaW5nbGUsICR0YXJnZXQpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJG9yaWdpbiBhcyAkaiA9PiAkbmV3KSB7CiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGluZmluaXRlIGxvb3Agd2hlbiB0YXJnZXQgZXh0ZW5kcyBpdHNlbGYKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+aXNTZWxmRXh0ZW5kKCRzaW5nbGUsICRvcmlnaW4pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjb21iaW5lZCA9ICR0aGlzLT5jb21iaW5lU2VsZWN0b3JTaW5nbGUoZW5kKCRuZXcpLCAkcmVtKTsKCiAgICAgICAgICAgICAgICBpZiAoY291bnQoYXJyYXlfZGlmZigkY29tYmluZWQsICRvcmlnaW5bJGpdW2NvdW50KCRvcmlnaW5bJGpdKSAtIDFdKSkpIHsKICAgICAgICAgICAgICAgICAgICAkb3JpZ2luWyRqXVtjb3VudCgkb3JpZ2luWyRqXSkgLSAxXSA9ICRjb21iaW5lZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG91dE9yaWdpbiA9IGFycmF5X21lcmdlKCRvdXRPcmlnaW4sICRvcmlnaW4pOwoKICAgICAgICAgICAgJGZvdW5kID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZm91bmQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21iaW5lIHNlbGVjdG9yIHNpbmdsZQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkYmFzZQogICAgICogQHBhcmFtIGFycmF5ICRvdGhlcgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbWJpbmVTZWxlY3RvclNpbmdsZSgkYmFzZSwgJG90aGVyKQogICAgewogICAgICAgICR0YWcgPSBbXTsKICAgICAgICAkb3V0ID0gW107CiAgICAgICAgJHdhc1RhZyA9IHRydWU7CgogICAgICAgIGZvcmVhY2ggKFskYmFzZSwgJG90aGVyXSBhcyAkc2luZ2xlKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzaW5nbGUgYXMgJHBhcnQpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvXltcWy46I10vJywgJHBhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJG91dFtdID0gJHBhcnQ7CiAgICAgICAgICAgICAgICAgICAgJHdhc1RhZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eW15fLV0vJywgJHBhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRhZ1tdID0gJHBhcnQ7CiAgICAgICAgICAgICAgICAgICAgJHdhc1RhZyA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHdhc1RhZykgewogICAgICAgICAgICAgICAgICAgICR0YWdbY291bnQoJHRhZykgLSAxXSAuPSAkcGFydDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG91dFtjb3VudCgkb3V0KSAtIDFdIC49ICRwYXJ0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY291bnQoJHRhZykpIHsKICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkb3V0LCAkdGFnWzBdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSBtZWRpYQogICAgICoKICAgICAqIEBwYXJhbSBcTGVhZm9cU2Nzc1BocFxCbG9jayAkbWVkaWEKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbXBpbGVNZWRpYShCbG9jayAkbWVkaWEpCiAgICB7CiAgICAgICAgJHRoaXMtPnB1c2hFbnYoJG1lZGlhKTsKCiAgICAgICAgJG1lZGlhUXVlcnkgPSAkdGhpcy0+Y29tcGlsZU1lZGlhUXVlcnkoJHRoaXMtPm11bHRpcGx5TWVkaWEoJHRoaXMtPmVudikpOwoKICAgICAgICBpZiAoISBlbXB0eSgkbWVkaWFRdWVyeSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNjb3BlID0gJHRoaXMtPm1ha2VPdXRwdXRCbG9jayhUeXBlOjpUX01FRElBLCBbJG1lZGlhUXVlcnldKTsKCiAgICAgICAgICAgICRwYXJlbnRTY29wZSA9ICR0aGlzLT5tZWRpYVBhcmVudCgkdGhpcy0+c2NvcGUpOwogICAgICAgICAgICAkcGFyZW50U2NvcGUtPmNoaWxkcmVuW10gPSAkdGhpcy0+c2NvcGU7CgogICAgICAgICAgICAvLyB0b3AgbGV2ZWwgcHJvcGVydGllcyBpbiBhIG1lZGlhIGNhdXNlIGl0IHRvIGJlIHdyYXBwZWQKICAgICAgICAgICAgJG5lZWRzV3JhcCA9IGZhbHNlOwoKICAgICAgICAgICAgZm9yZWFjaCAoJG1lZGlhLT5jaGlsZHJlbiBhcyAkY2hpbGQpIHsKICAgICAgICAgICAgICAgICR0eXBlID0gJGNoaWxkWzBdOwoKICAgICAgICAgICAgICAgIGlmICgkdHlwZSAhPT0gVHlwZTo6VF9CTE9DSyAmJgogICAgICAgICAgICAgICAgICAgICR0eXBlICE9PSBUeXBlOjpUX01FRElBICYmCiAgICAgICAgICAgICAgICAgICAgJHR5cGUgIT09IFR5cGU6OlRfRElSRUNUSVZFICYmCiAgICAgICAgICAgICAgICAgICAgJHR5cGUgIT09IFR5cGU6OlRfSU1QT1JUCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkbmVlZHNXcmFwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRuZWVkc1dyYXApIHsKICAgICAgICAgICAgICAgICR3cmFwcGVkID0gbmV3IEJsb2NrOwogICAgICAgICAgICAgICAgJHdyYXBwZWQtPnNvdXJjZUluZGV4ICA9ICRtZWRpYS0+c291cmNlSW5kZXg7CiAgICAgICAgICAgICAgICAkd3JhcHBlZC0+c291cmNlTGluZSAgID0gJG1lZGlhLT5zb3VyY2VMaW5lOwogICAgICAgICAgICAgICAgJHdyYXBwZWQtPnNvdXJjZUNvbHVtbiA9ICRtZWRpYS0+c291cmNlQ29sdW1uOwogICAgICAgICAgICAgICAgJHdyYXBwZWQtPnNlbGVjdG9ycyAgICA9IFtdOwogICAgICAgICAgICAgICAgJHdyYXBwZWQtPmNvbW1lbnRzICAgICA9IFtdOwogICAgICAgICAgICAgICAgJHdyYXBwZWQtPnBhcmVudCAgICAgICA9ICRtZWRpYTsKICAgICAgICAgICAgICAgICR3cmFwcGVkLT5jaGlsZHJlbiAgICAgPSAkbWVkaWEtPmNoaWxkcmVuOwoKICAgICAgICAgICAgICAgICRtZWRpYS0+Y2hpbGRyZW4gPSBbW1R5cGU6OlRfQkxPQ0ssICR3cmFwcGVkXV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5jb21waWxlQ2hpbGRyZW5Ob1JldHVybigkbWVkaWEtPmNoaWxkcmVuLCAkdGhpcy0+c2NvcGUpOwoKICAgICAgICAgICAgJHRoaXMtPnNjb3BlID0gJHRoaXMtPnNjb3BlLT5wYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cG9wRW52KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNZWRpYSBwYXJlbnQKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcRm9ybWF0dGVyXE91dHB1dEJsb2NrICRzY29wZQogICAgICoKICAgICAqIEByZXR1cm4gXExlYWZvXFNjc3NQaHBcRm9ybWF0dGVyXE91dHB1dEJsb2NrCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBtZWRpYVBhcmVudChPdXRwdXRCbG9jayAkc2NvcGUpCiAgICB7CiAgICAgICAgd2hpbGUgKCEgZW1wdHkoJHNjb3BlLT5wYXJlbnQpKSB7CiAgICAgICAgICAgIGlmICghIGVtcHR5KCRzY29wZS0+dHlwZSkgJiYgJHNjb3BlLT50eXBlICE9PSBUeXBlOjpUX01FRElBKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNjb3BlID0gJHNjb3BlLT5wYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNjb3BlOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSBkaXJlY3RpdmUKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQmxvY2sgJGJsb2NrCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb21waWxlRGlyZWN0aXZlKEJsb2NrICRibG9jaykKICAgIHsKICAgICAgICAkcyA9ICdAJyAuICRibG9jay0+bmFtZTsKCiAgICAgICAgaWYgKCEgZW1wdHkoJGJsb2NrLT52YWx1ZSkpIHsKICAgICAgICAgICAgJHMgLj0gJyAnIC4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkYmxvY2stPnZhbHVlKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYmxvY2stPm5hbWUgPT09ICdrZXlmcmFtZXMnIHx8IHN1YnN0cigkYmxvY2stPm5hbWUsIC0xMCkgPT09ICcta2V5ZnJhbWVzJykgewogICAgICAgICAgICAkdGhpcy0+Y29tcGlsZUtleWZyYW1lQmxvY2soJGJsb2NrLCBbJHNdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y29tcGlsZU5lc3RlZEJsb2NrKCRibG9jaywgWyRzXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSBhdC1yb290CiAgICAgKgogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXEJsb2NrICRibG9jawogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29tcGlsZUF0Um9vdChCbG9jayAkYmxvY2spCiAgICB7CiAgICAgICAgJGVudiAgICAgPSAkdGhpcy0+cHVzaEVudigkYmxvY2spOwogICAgICAgICRlbnZzICAgID0gJHRoaXMtPmNvbXBhY3RFbnYoJGVudik7CiAgICAgICAgJHdpdGhvdXQgPSBpc3NldCgkYmxvY2stPndpdGgpID8gJHRoaXMtPmNvbXBpbGVXaXRoKCRibG9jay0+d2l0aCkgOiBzZWxmOjpXSVRIX1JVTEU7CgogICAgICAgIC8vIHdyYXAgaW5saW5lIHNlbGVjdG9yCiAgICAgICAgaWYgKCRibG9jay0+c2VsZWN0b3IpIHsKICAgICAgICAgICAgJHdyYXBwZWQgPSBuZXcgQmxvY2s7CiAgICAgICAgICAgICR3cmFwcGVkLT5zb3VyY2VJbmRleCAgPSAkYmxvY2stPnNvdXJjZUluZGV4OwogICAgICAgICAgICAkd3JhcHBlZC0+c291cmNlTGluZSAgID0gJGJsb2NrLT5zb3VyY2VMaW5lOwogICAgICAgICAgICAkd3JhcHBlZC0+c291cmNlQ29sdW1uID0gJGJsb2NrLT5zb3VyY2VDb2x1bW47CiAgICAgICAgICAgICR3cmFwcGVkLT5zZWxlY3RvcnMgICAgPSAkYmxvY2stPnNlbGVjdG9yOwogICAgICAgICAgICAkd3JhcHBlZC0+Y29tbWVudHMgICAgID0gW107CiAgICAgICAgICAgICR3cmFwcGVkLT5wYXJlbnQgICAgICAgPSAkYmxvY2s7CiAgICAgICAgICAgICR3cmFwcGVkLT5jaGlsZHJlbiAgICAgPSAkYmxvY2stPmNoaWxkcmVuOwoKICAgICAgICAgICAgJGJsb2NrLT5jaGlsZHJlbiA9IFtbVHlwZTo6VF9CTE9DSywgJHdyYXBwZWRdXTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5lbnYgPSAkdGhpcy0+ZmlsdGVyV2l0aG91dCgkZW52cywgJHdpdGhvdXQpOwogICAgICAgICRuZXdCbG9jayAgPSAkdGhpcy0+c3BsaWNlVHJlZSgkZW52cywgJGJsb2NrLCAkd2l0aG91dCk7CgogICAgICAgICRzYXZlU2NvcGUgICA9ICR0aGlzLT5zY29wZTsKICAgICAgICAkdGhpcy0+c2NvcGUgPSAkdGhpcy0+cm9vdEJsb2NrOwoKICAgICAgICAkdGhpcy0+Y29tcGlsZUNoaWxkKCRuZXdCbG9jaywgJHRoaXMtPnNjb3BlKTsKCiAgICAgICAgJHRoaXMtPnNjb3BlID0gJHNhdmVTY29wZTsKICAgICAgICAkdGhpcy0+ZW52ICAgPSAkdGhpcy0+ZXh0cmFjdEVudigkZW52cyk7CgogICAgICAgICR0aGlzLT5wb3BFbnYoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGljZSBwYXJzZSB0cmVlCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICRlbnZzCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQmxvY2sgJGJsb2NrCiAgICAgKiBAcGFyYW0gaW50ZWdlciAgICAgICAgICAgICAgJHdpdGhvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc3BsaWNlVHJlZSgkZW52cywgQmxvY2sgJGJsb2NrLCAkd2l0aG91dCkKICAgIHsKICAgICAgICAkbmV3QmxvY2sgPSBudWxsOwoKICAgICAgICBmb3JlYWNoICgkZW52cyBhcyAkZSkgewogICAgICAgICAgICBpZiAoISBpc3NldCgkZS0+YmxvY2spKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRlLT5ibG9jayA9PT0gJGJsb2NrKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRlLT5ibG9jay0+dHlwZSkgJiYgJGUtPmJsb2NrLT50eXBlID09PSBUeXBlOjpUX0FUX1JPT1QpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGUtPmJsb2NrICYmICR0aGlzLT5pc1dpdGhvdXQoJHdpdGhvdXQsICRlLT5ibG9jaykpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYiA9IG5ldyBCbG9jazsKICAgICAgICAgICAgJGItPnNvdXJjZUluZGV4ICA9ICRlLT5ibG9jay0+c291cmNlSW5kZXg7CiAgICAgICAgICAgICRiLT5zb3VyY2VMaW5lICAgPSAkZS0+YmxvY2stPnNvdXJjZUxpbmU7CiAgICAgICAgICAgICRiLT5zb3VyY2VDb2x1bW4gPSAkZS0+YmxvY2stPnNvdXJjZUNvbHVtbjsKICAgICAgICAgICAgJGItPnNlbGVjdG9ycyAgICA9IFtdOwogICAgICAgICAgICAkYi0+Y29tbWVudHMgICAgID0gJGUtPmJsb2NrLT5jb21tZW50czsKICAgICAgICAgICAgJGItPnBhcmVudCAgICAgICA9IG51bGw7CgogICAgICAgICAgICBpZiAoJG5ld0Jsb2NrKSB7CiAgICAgICAgICAgICAgICAkdHlwZSA9IGlzc2V0KCRuZXdCbG9jay0+dHlwZSkgPyAkbmV3QmxvY2stPnR5cGUgOiBUeXBlOjpUX0JMT0NLOwoKICAgICAgICAgICAgICAgICRiLT5jaGlsZHJlbiA9IFtbJHR5cGUsICRuZXdCbG9ja11dOwoKICAgICAgICAgICAgICAgICRuZXdCbG9jay0+cGFyZW50ID0gJGI7CiAgICAgICAgICAgIH0gZWxzZWlmIChjb3VudCgkYmxvY2stPmNoaWxkcmVuKSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGJsb2NrLT5jaGlsZHJlbiBhcyAkY2hpbGQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGNoaWxkWzBdID09PSBUeXBlOjpUX0JMT0NLKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGlsZFsxXS0+cGFyZW50ID0gJGI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRiLT5jaGlsZHJlbiA9ICRibG9jay0+Y2hpbGRyZW47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkZS0+YmxvY2stPnR5cGUpKSB7CiAgICAgICAgICAgICAgICAkYi0+dHlwZSA9ICRlLT5ibG9jay0+dHlwZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRlLT5ibG9jay0+bmFtZSkpIHsKICAgICAgICAgICAgICAgICRiLT5uYW1lID0gJGUtPmJsb2NrLT5uYW1lOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJGUtPmJsb2NrLT5xdWVyeUxpc3QpKSB7CiAgICAgICAgICAgICAgICAkYi0+cXVlcnlMaXN0ID0gJGUtPmJsb2NrLT5xdWVyeUxpc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkZS0+YmxvY2stPnZhbHVlKSkgewogICAgICAgICAgICAgICAgJGItPnZhbHVlID0gJGUtPmJsb2NrLT52YWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG5ld0Jsb2NrID0gJGI7CiAgICAgICAgfQoKICAgICAgICAkdHlwZSA9IGlzc2V0KCRuZXdCbG9jay0+dHlwZSkgPyAkbmV3QmxvY2stPnR5cGUgOiBUeXBlOjpUX0JMT0NLOwoKICAgICAgICByZXR1cm4gWyR0eXBlLCAkbmV3QmxvY2tdOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSBAYXQtcm9vdCdzIHdpdGg6IGluY2x1c2lvbiAvIHdpdGhvdXQ6IGV4Y2x1c2lvbiBpbnRvIGZpbHRlciBmbGFncwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkd2l0aAogICAgICoKICAgICAqIEByZXR1cm4gaW50ZWdlcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNvbXBpbGVXaXRoKCR3aXRoKQogICAgewogICAgICAgIHN0YXRpYyAkbWFwcGluZyA9IFsKICAgICAgICAgICAgJ3J1bGUnICAgICA9PiBzZWxmOjpXSVRIX1JVTEUsCiAgICAgICAgICAgICdtZWRpYScgICAgPT4gc2VsZjo6V0lUSF9NRURJQSwKICAgICAgICAgICAgJ3N1cHBvcnRzJyA9PiBzZWxmOjpXSVRIX1NVUFBPUlRTLAogICAgICAgICAgICAnYWxsJyAgICAgID0+IHNlbGY6OldJVEhfQUxMLAogICAgICAgIF07CgogICAgICAgIC8vIGV4Y2x1ZGUgc2VsZWN0b3JzIGJ5IGRlZmF1bHQKICAgICAgICAkd2l0aG91dCA9IHNlbGY6OldJVEhfUlVMRTsKCiAgICAgICAgaWYgKCR0aGlzLT5saWJNYXBIYXNLZXkoWyR3aXRoLCBzZWxmOjokd2l0aF0pKSB7CiAgICAgICAgICAgICR3aXRob3V0ID0gc2VsZjo6V0lUSF9BTEw7CgogICAgICAgICAgICAkbGlzdCA9ICR0aGlzLT5jb2VyY2VMaXN0KCR0aGlzLT5saWJNYXBHZXQoWyR3aXRoLCBzZWxmOjokd2l0aF0pKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRsaXN0WzJdIGFzICRpdGVtKSB7CiAgICAgICAgICAgICAgICAka2V5d29yZCA9ICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkdGhpcy0+Y29lcmNlU3RyaW5nKCRpdGVtKSk7CgogICAgICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJGtleXdvcmQsICRtYXBwaW5nKSkgewogICAgICAgICAgICAgICAgICAgICR3aXRob3V0ICY9IH4oJG1hcHBpbmdbJGtleXdvcmRdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5saWJNYXBIYXNLZXkoWyR3aXRoLCBzZWxmOjokd2l0aG91dF0pKSB7CiAgICAgICAgICAgICR3aXRob3V0ID0gMDsKCiAgICAgICAgICAgICRsaXN0ID0gJHRoaXMtPmNvZXJjZUxpc3QoJHRoaXMtPmxpYk1hcEdldChbJHdpdGgsIHNlbGY6OiR3aXRob3V0XSkpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGxpc3RbMl0gYXMgJGl0ZW0pIHsKICAgICAgICAgICAgICAgICRrZXl3b3JkID0gJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCR0aGlzLT5jb2VyY2VTdHJpbmcoJGl0ZW0pKTsKCiAgICAgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygka2V5d29yZCwgJG1hcHBpbmcpKSB7CiAgICAgICAgICAgICAgICAgICAgJHdpdGhvdXQgfD0gJG1hcHBpbmdbJGtleXdvcmRdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHdpdGhvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXIgZW52IHN0YWNrCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgJGVudnMKICAgICAqIEBwYXJhbSBpbnRlZ2VyICR3aXRob3V0CiAgICAgKgogICAgICogQHJldHVybiBcTGVhZm9cU2Nzc1BocFxDb21waWxlclxFbnZpcm9ubWVudAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlcldpdGhvdXQoJGVudnMsICR3aXRob3V0KQogICAgewogICAgICAgICRmaWx0ZXJlZCA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkZW52cyBhcyAkZSkgewogICAgICAgICAgICBpZiAoJGUtPmJsb2NrICYmICR0aGlzLT5pc1dpdGhvdXQoJHdpdGhvdXQsICRlLT5ibG9jaykpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZmlsdGVyZWRbXSA9ICRlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRyYWN0RW52KCRmaWx0ZXJlZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXIgV0lUSCBydWxlcwogICAgICoKICAgICAqIEBwYXJhbSBpbnRlZ2VyICAgICAgICAgICAgICAkd2l0aG91dAogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXEJsb2NrICRibG9jawogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzV2l0aG91dCgkd2l0aG91dCwgQmxvY2sgJGJsb2NrKQogICAgewogICAgICAgIGlmICgoKCR3aXRob3V0ICYgc2VsZjo6V0lUSF9SVUxFKSAmJiBpc3NldCgkYmxvY2stPnNlbGVjdG9ycykpIHx8CiAgICAgICAgICAgICgoJHdpdGhvdXQgJiBzZWxmOjpXSVRIX01FRElBKSAmJgogICAgICAgICAgICAgICAgaXNzZXQoJGJsb2NrLT50eXBlKSAmJiAkYmxvY2stPnR5cGUgPT09IFR5cGU6OlRfTUVESUEpIHx8CiAgICAgICAgICAgICgoJHdpdGhvdXQgJiBzZWxmOjpXSVRIX1NVUFBPUlRTKSAmJgogICAgICAgICAgICAgICAgaXNzZXQoJGJsb2NrLT50eXBlKSAmJiAkYmxvY2stPnR5cGUgPT09IFR5cGU6OlRfRElSRUNUSVZFICYmCiAgICAgICAgICAgICAgICBpc3NldCgkYmxvY2stPm5hbWUpICYmICRibG9jay0+bmFtZSA9PT0gJ3N1cHBvcnRzJykKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21waWxlIGtleWZyYW1lIGJsb2NrCiAgICAgKgogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXEJsb2NrICRibG9jawogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICRzZWxlY3RvcnMKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbXBpbGVLZXlmcmFtZUJsb2NrKEJsb2NrICRibG9jaywgJHNlbGVjdG9ycykKICAgIHsKICAgICAgICAkZW52ID0gJHRoaXMtPnB1c2hFbnYoJGJsb2NrKTsKCiAgICAgICAgJGVudnMgPSAkdGhpcy0+Y29tcGFjdEVudigkZW52KTsKCiAgICAgICAgJHRoaXMtPmVudiA9ICR0aGlzLT5leHRyYWN0RW52KGFycmF5X2ZpbHRlcigkZW52cywgZnVuY3Rpb24gKEVudmlyb25tZW50ICRlKSB7CiAgICAgICAgICAgIHJldHVybiAhIGlzc2V0KCRlLT5ibG9jay0+c2VsZWN0b3JzKTsKICAgICAgICB9KSk7CgogICAgICAgICR0aGlzLT5zY29wZSA9ICR0aGlzLT5tYWtlT3V0cHV0QmxvY2soJGJsb2NrLT50eXBlLCAkc2VsZWN0b3JzKTsKICAgICAgICAkdGhpcy0+c2NvcGUtPmRlcHRoID0gMTsKICAgICAgICAkdGhpcy0+c2NvcGUtPnBhcmVudC0+Y2hpbGRyZW5bXSA9ICR0aGlzLT5zY29wZTsKCiAgICAgICAgJHRoaXMtPmNvbXBpbGVDaGlsZHJlbk5vUmV0dXJuKCRibG9jay0+Y2hpbGRyZW4sICR0aGlzLT5zY29wZSk7CgogICAgICAgICR0aGlzLT5zY29wZSA9ICR0aGlzLT5zY29wZS0+cGFyZW50OwogICAgICAgICR0aGlzLT5lbnYgICA9ICR0aGlzLT5leHRyYWN0RW52KCRlbnZzKTsKCiAgICAgICAgJHRoaXMtPnBvcEVudigpOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSBuZXN0ZWQgYmxvY2sKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQmxvY2sgJGJsb2NrCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAgJHNlbGVjdG9ycwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29tcGlsZU5lc3RlZEJsb2NrKEJsb2NrICRibG9jaywgJHNlbGVjdG9ycykKICAgIHsKICAgICAgICAkdGhpcy0+cHVzaEVudigkYmxvY2spOwoKICAgICAgICAkdGhpcy0+c2NvcGUgPSAkdGhpcy0+bWFrZU91dHB1dEJsb2NrKCRibG9jay0+dHlwZSwgJHNlbGVjdG9ycyk7CiAgICAgICAgJHRoaXMtPnNjb3BlLT5wYXJlbnQtPmNoaWxkcmVuW10gPSAkdGhpcy0+c2NvcGU7CgogICAgICAgICR0aGlzLT5jb21waWxlQ2hpbGRyZW5Ob1JldHVybigkYmxvY2stPmNoaWxkcmVuLCAkdGhpcy0+c2NvcGUpOwoKICAgICAgICAkdGhpcy0+c2NvcGUgPSAkdGhpcy0+c2NvcGUtPnBhcmVudDsKCiAgICAgICAgJHRoaXMtPnBvcEVudigpOwogICAgfQoKICAgIC8qKgogICAgICogUmVjdXJzaXZlbHkgY29tcGlsZXMgYSBibG9jay4KICAgICAqCiAgICAgKiBBIGJsb2NrIGlzIGFuYWxvZ291cyB0byBhIENTUyBibG9jayBpbiBtb3N0IGNhc2VzLiBBIHNpbmdsZSBTQ1NTIGRvY3VtZW50CiAgICAgKiBpcyBlbmNhcHN1bGF0ZWQgaW4gYSBibG9jayB3aGVuIHBhcnNlZCwgYnV0IGl0IGRvZXMgbm90IGhhdmUgcGFyZW50IHRhZ3MKICAgICAqIHNvIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXBwZWFyIG9uIHRoZSByb290IGxldmVsIHdoZW4gY29tcGlsZWQuCiAgICAgKgogICAgICogQmxvY2tzIGFyZSBtYWRlIHVwIG9mIHNlbGVjdG9ycyBhbmQgY2hpbGRyZW4uCiAgICAgKgogICAgICogVGhlIGNoaWxkcmVuIG9mIGEgYmxvY2sgYXJlIGp1c3QgYWxsIHRoZSBibG9ja3MgdGhhdCBhcmUgZGVmaW5lZCB3aXRoaW4uCiAgICAgKgogICAgICogQ29tcGlsaW5nIHRoZSBibG9jayBpbnZvbHZlcyBwdXNoaW5nIGEgZnJlc2ggZW52aXJvbm1lbnQgb24gdGhlIHN0YWNrLAogICAgICogYW5kIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBwcm9wcywgY29tcGlsaW5nIGVhY2ggb25lLgogICAgICoKICAgICAqIEBzZWUgQ29tcGlsZXI6OmNvbXBpbGVDaGlsZCgpCiAgICAgKgogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXEJsb2NrICRibG9jawogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29tcGlsZUJsb2NrKEJsb2NrICRibG9jaykKICAgIHsKICAgICAgICAkZW52ID0gJHRoaXMtPnB1c2hFbnYoJGJsb2NrKTsKICAgICAgICAkZW52LT5zZWxlY3RvcnMgPSAkdGhpcy0+ZXZhbFNlbGVjdG9ycygkYmxvY2stPnNlbGVjdG9ycyk7CgogICAgICAgICRvdXQgPSAkdGhpcy0+bWFrZU91dHB1dEJsb2NrKG51bGwpOwoKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmxpbmVOdW1iZXJTdHlsZSkgJiYgY291bnQoJGVudi0+c2VsZWN0b3JzKSAmJiBjb3VudCgkYmxvY2stPmNoaWxkcmVuKSkgewogICAgICAgICAgICAkYW5ub3RhdGlvbiA9ICR0aGlzLT5tYWtlT3V0cHV0QmxvY2soVHlwZTo6VF9DT01NRU5UKTsKICAgICAgICAgICAgJGFubm90YXRpb24tPmRlcHRoID0gMDsKCiAgICAgICAgICAgICRmaWxlID0gJHRoaXMtPnNvdXJjZU5hbWVzWyRibG9jay0+c291cmNlSW5kZXhdOwogICAgICAgICAgICAkbGluZSA9ICRibG9jay0+c291cmNlTGluZTsKCiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPmxpbmVOdW1iZXJTdHlsZSkgewogICAgICAgICAgICAgICAgY2FzZSBzZWxmOjpMSU5FX0NPTU1FTlRTOgogICAgICAgICAgICAgICAgICAgICRhbm5vdGF0aW9uLT5saW5lc1tdID0gJy8qIGxpbmUgJyAuICRsaW5lIC4gJywgJyAuICRmaWxlIC4gJyAqLyc7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBzZWxmOjpERUJVR19JTkZPOgogICAgICAgICAgICAgICAgICAgICRhbm5vdGF0aW9uLT5saW5lc1tdID0gJ0BtZWRpYSAtc2Fzcy1kZWJ1Zy1pbmZve2ZpbGVuYW1le2ZvbnQtZmFtaWx5OiInIC4gJGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcifWxpbmV7Zm9udC1mYW1pbHk6JyAuICRsaW5lIC4gJ319JzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnNjb3BlLT5jaGlsZHJlbltdID0gJGFubm90YXRpb247CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2NvcGUtPmNoaWxkcmVuW10gPSAkb3V0OwoKICAgICAgICBpZiAoY291bnQoJGJsb2NrLT5jaGlsZHJlbikpIHsKICAgICAgICAgICAgJG91dC0+c2VsZWN0b3JzID0gJHRoaXMtPm11bHRpcGx5U2VsZWN0b3JzKCRlbnYpOwoKICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVDaGlsZHJlbk5vUmV0dXJuKCRibG9jay0+Y2hpbGRyZW4sICRvdXQpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmZvcm1hdHRlci0+c3RyaXBTZW1pY29sb24oJG91dC0+bGluZXMpOwoKICAgICAgICAkdGhpcy0+cG9wRW52KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21waWxlIHJvb3QgbGV2ZWwgY29tbWVudAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkYmxvY2sKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbXBpbGVDb21tZW50KCRibG9jaykKICAgIHsKICAgICAgICAkb3V0ID0gJHRoaXMtPm1ha2VPdXRwdXRCbG9jayhUeXBlOjpUX0NPTU1FTlQpOwogICAgICAgICRvdXQtPmxpbmVzW10gPSAkYmxvY2tbMV07CiAgICAgICAgJHRoaXMtPnNjb3BlLT5jaGlsZHJlbltdID0gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEV2YWx1YXRlIHNlbGVjdG9ycwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc2VsZWN0b3JzCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZXZhbFNlbGVjdG9ycygkc2VsZWN0b3JzKQogICAgewogICAgICAgICR0aGlzLT5zaG91bGRFdmFsdWF0ZSA9IGZhbHNlOwoKICAgICAgICAkc2VsZWN0b3JzID0gYXJyYXlfbWFwKFskdGhpcywgJ2V2YWxTZWxlY3RvciddLCAkc2VsZWN0b3JzKTsKCiAgICAgICAgLy8gYWZ0ZXIgZXZhbHVhdGluZyBpbnRlcnBvbGF0ZXMsIHdlIG1pZ2h0IG5lZWQgYSBzZWNvbmQgcGFzcwogICAgICAgIGlmICgkdGhpcy0+c2hvdWxkRXZhbHVhdGUpIHsKICAgICAgICAgICAgJGJ1ZmZlciA9ICR0aGlzLT5jb2xsYXBzZVNlbGVjdG9ycygkc2VsZWN0b3JzKTsKICAgICAgICAgICAgJHBhcnNlciA9ICR0aGlzLT5wYXJzZXJGYWN0b3J5KF9fTUVUSE9EX18pOwoKICAgICAgICAgICAgaWYgKCRwYXJzZXItPnBhcnNlU2VsZWN0b3IoJGJ1ZmZlciwgJG5ld1NlbGVjdG9ycykpIHsKICAgICAgICAgICAgICAgICRzZWxlY3RvcnMgPSBhcnJheV9tYXAoWyR0aGlzLCAnZXZhbFNlbGVjdG9yJ10sICRuZXdTZWxlY3RvcnMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlbGVjdG9yczsKICAgIH0KCiAgICAvKioKICAgICAqIEV2YWx1YXRlIHNlbGVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzZWxlY3RvcgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGV2YWxTZWxlY3Rvcigkc2VsZWN0b3IpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcChbJHRoaXMsICdldmFsU2VsZWN0b3JQYXJ0J10sICRzZWxlY3Rvcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZSBzZWxlY3RvciBwYXJ0OyByZXBsYWNlcyBhbGwgdGhlIGludGVycG9sYXRlcywgc3RyaXBwaW5nIHF1b3RlcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFydAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGV2YWxTZWxlY3RvclBhcnQoJHBhcnQpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHBhcnQgYXMgJiRwKSB7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkcCkgJiYgKCRwWzBdID09PSBUeXBlOjpUX0lOVEVSUE9MQVRFIHx8ICRwWzBdID09PSBUeXBlOjpUX1NUUklORykpIHsKICAgICAgICAgICAgICAgICRwID0gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkcCk7CgogICAgICAgICAgICAgICAgLy8gZm9yY2UgcmUtZXZhbHVhdGlvbgogICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkcCwgJyYnKSAhPT0gZmFsc2UgfHwgc3RycG9zKCRwLCAnLCcpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zaG91bGRFdmFsdWF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmIChpc19zdHJpbmcoJHApICYmIHN0cmxlbigkcCkgPj0gMiAmJgogICAgICAgICAgICAgICAgKCRmaXJzdCA9ICRwWzBdKSAmJiAoJGZpcnN0ID09PSAnIicgfHwgJGZpcnN0ID09PSAiJyIpICYmCiAgICAgICAgICAgICAgICBzdWJzdHIoJHAsIC0xKSA9PT0gJGZpcnN0CiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHAgPSBzdWJzdHIoJHAsIDEsIC0xKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5mbGF0dGVuU2VsZWN0b3JTaW5nbGUoJHBhcnQpOwogICAgfQoKICAgIC8qKgogICAgICogQ29sbGFwc2Ugc2VsZWN0b3JzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzZWxlY3RvcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29sbGFwc2VTZWxlY3RvcnMoJHNlbGVjdG9ycykKICAgIHsKICAgICAgICAkcGFydHMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJHNlbGVjdG9ycyBhcyAkc2VsZWN0b3IpIHsKICAgICAgICAgICAgJG91dHB1dCA9ICcnOwoKICAgICAgICAgICAgYXJyYXlfd2Fsa19yZWN1cnNpdmUoCiAgICAgICAgICAgICAgICAkc2VsZWN0b3IsCiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAka2V5KSB1c2UgKCYkb3V0cHV0KSB7CiAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAkdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkcGFydHNbXSA9ICRvdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCAnLCAkcGFydHMpOwogICAgfQoKICAgIC8qKgogICAgICogRmxhdHRlbiBzZWxlY3RvciBzaW5nbGU7IGpvaW5zIHRvZ2V0aGVyIC5jbGFzc2VzIGFuZCAjaWRzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzaW5nbGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmbGF0dGVuU2VsZWN0b3JTaW5nbGUoJHNpbmdsZSkKICAgIHsKICAgICAgICAkam9pbmVkID0gW107CgogICAgICAgIGZvcmVhY2ggKCRzaW5nbGUgYXMgJHBhcnQpIHsKICAgICAgICAgICAgaWYgKGVtcHR5KCRqb2luZWQpIHx8CiAgICAgICAgICAgICAgICAhIGlzX3N0cmluZygkcGFydCkgfHwKICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goJy9bXFsuOiMlXS8nLCAkcGFydCkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkam9pbmVkW10gPSAkcGFydDsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNfYXJyYXkoZW5kKCRqb2luZWQpKSkgewogICAgICAgICAgICAgICAgJGpvaW5lZFtdID0gJHBhcnQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkam9pbmVkW2NvdW50KCRqb2luZWQpIC0gMV0gLj0gJHBhcnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkam9pbmVkOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSBzZWxlY3RvciB0byBzdHJpbmc7IHNlbGYoJikgc2hvdWxkIGhhdmUgYmVlbiByZXBsYWNlZCBieSBub3cKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHNlbGVjdG9yCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbXBpbGVTZWxlY3Rvcigkc2VsZWN0b3IpCiAgICB7CiAgICAgICAgaWYgKCEgaXNfYXJyYXkoJHNlbGVjdG9yKSkgewogICAgICAgICAgICByZXR1cm4gJHNlbGVjdG9yOyAvLyBtZWRpYSBhbmQgdGhlIGxpa2UKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbXBsb2RlKAogICAgICAgICAgICAnICcsCiAgICAgICAgICAgIGFycmF5X21hcCgKICAgICAgICAgICAgICAgIFskdGhpcywgJ2NvbXBpbGVTZWxlY3RvclBhcnQnXSwKICAgICAgICAgICAgICAgICRzZWxlY3RvcgogICAgICAgICAgICApCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBpbGUgc2VsZWN0b3IgcGFydAogICAgICoKICAgICAqIEBwYXJhbSBhcmFyeSAkcGllY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29tcGlsZVNlbGVjdG9yUGFydCgkcGllY2UpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHBpZWNlIGFzICYkcCkgewogICAgICAgICAgICBpZiAoISBpc19hcnJheSgkcCkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzd2l0Y2ggKCRwWzBdKSB7CiAgICAgICAgICAgICAgICBjYXNlIFR5cGU6OlRfU0VMRjoKICAgICAgICAgICAgICAgICAgICAkcCA9ICcmJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICRwID0gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkcCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbXBsb2RlKCRwaWVjZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBIYXMgc2VsZWN0b3IgcGxhY2Vob2xkZXI/CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzZWxlY3RvcgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaGFzU2VsZWN0b3JQbGFjZWhvbGRlcigkc2VsZWN0b3IpCiAgICB7CiAgICAgICAgaWYgKCEgaXNfYXJyYXkoJHNlbGVjdG9yKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkc2VsZWN0b3IgYXMgJHBhcnRzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgICAgICAgICAgaWYgKHN0cmxlbigkcGFydCkgJiYgJyUnID09PSAkcGFydFswXSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21waWxlIGNoaWxkcmVuIGFuZCByZXR1cm4gcmVzdWx0CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RtcwogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jayAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29tcGlsZUNoaWxkcmVuKCRzdG1zLCBPdXRwdXRCbG9jayAkb3V0KQogICAgewogICAgICAgIGZvcmVhY2ggKCRzdG1zIGFzICRzdG0pIHsKICAgICAgICAgICAgJHJldCA9ICR0aGlzLT5jb21waWxlQ2hpbGQoJHN0bSwgJG91dCk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJHJldCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkcmV0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSBjaGlsZHJlbiBhbmQgdGhyb3cgZXhjZXB0aW9uIGlmIHVuZXhwZWN0ZWQgQHJldHVybgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0bXMKICAgICAqIEBwYXJhbSBcTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXJcT3V0cHV0QmxvY2sgJG91dAogICAgICoKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29tcGlsZUNoaWxkcmVuTm9SZXR1cm4oJHN0bXMsIE91dHB1dEJsb2NrICRvdXQpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHN0bXMgYXMgJHN0bSkgewogICAgICAgICAgICAkcmV0ID0gJHRoaXMtPmNvbXBpbGVDaGlsZCgkc3RtLCAkb3V0KTsKCiAgICAgICAgICAgIGlmIChpc3NldCgkcmV0KSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoJ0ByZXR1cm4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoaW4gYSBmdW5jdGlvbicpOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENvbXBpbGUgbWVkaWEgcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXJ5TGlzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb21waWxlTWVkaWFRdWVyeSgkcXVlcnlMaXN0KQogICAgewogICAgICAgICRvdXQgPSAnQG1lZGlhJzsKICAgICAgICAkZmlyc3QgPSB0cnVlOwoKICAgICAgICBmb3JlYWNoICgkcXVlcnlMaXN0IGFzICRxdWVyeSkgewogICAgICAgICAgICAkdHlwZSA9IG51bGw7CiAgICAgICAgICAgICRwYXJ0cyA9IFtdOwoKICAgICAgICAgICAgZm9yZWFjaCAoJHF1ZXJ5IGFzICRxKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKCRxWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBlOjpUX01FRElBX1RZUEU6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdGhpcy0+bWVyZ2VNZWRpYVR5cGVzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X21hcChbJHRoaXMsICdjb21waWxlVmFsdWUnXSwgYXJyYXlfc2xpY2UoJHEsIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHR5cGUpKSB7IC8vIG1lcmdlIGZhaWxlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBhcnJheV9tYXAoWyR0aGlzLCAnY29tcGlsZVZhbHVlJ10sIGFycmF5X3NsaWNlKCRxLCAxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9NRURJQV9FWFBSRVNTSU9OOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHFbMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICcoJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkcVsxXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5mb3JtYXR0ZXItPmFzc2lnblNlcGFyYXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkcVsyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcpJzsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkdGhpcy0+Y29tcGlsZVZhbHVlKCRxWzFdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJyknOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlIFR5cGU6OlRfTUVESUFfVkFMVUU6CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkcVsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHR5cGUpIHsKICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJHBhcnRzLCBpbXBsb2RlKCcgJywgYXJyYXlfZmlsdGVyKCR0eXBlKSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISBlbXB0eSgkcGFydHMpKSB7CiAgICAgICAgICAgICAgICBpZiAoJGZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgJGZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAnICc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRvdXQgLj0gJHRoaXMtPmZvcm1hdHRlci0+dGFnU2VwYXJhdG9yOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRvdXQgLj0gaW1wbG9kZSgnIGFuZCAnLCAkcGFydHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIE1lcmdlIG1lZGlhIHR5cGVzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR0eXBlMQogICAgICogQHBhcmFtIGFycmF5ICR0eXBlMgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbWVyZ2VNZWRpYVR5cGVzKCR0eXBlMSwgJHR5cGUyKQogICAgewogICAgICAgIGlmIChlbXB0eSgkdHlwZTEpKSB7CiAgICAgICAgICAgIHJldHVybiAkdHlwZTI7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJHR5cGUyKSkgewogICAgICAgICAgICByZXR1cm4gJHR5cGUxOwogICAgICAgIH0KCiAgICAgICAgJG0xID0gJyc7CiAgICAgICAgJHQxID0gJyc7CgogICAgICAgIGlmIChjb3VudCgkdHlwZTEpID4gMSkgewogICAgICAgICAgICAkbTE9IHN0cnRvbG93ZXIoJHR5cGUxWzBdKTsKICAgICAgICAgICAgJHQxPSBzdHJ0b2xvd2VyKCR0eXBlMVsxXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHQxID0gc3RydG9sb3dlcigkdHlwZTFbMF0pOwogICAgICAgIH0KCiAgICAgICAgJG0yID0gJyc7CiAgICAgICAgJHQyID0gJyc7CgogICAgICAgIGlmIChjb3VudCgkdHlwZTIpID4gMSkgewogICAgICAgICAgICAkbTIgPSBzdHJ0b2xvd2VyKCR0eXBlMlswXSk7CiAgICAgICAgICAgICR0MiA9IHN0cnRvbG93ZXIoJHR5cGUyWzFdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdDIgPSBzdHJ0b2xvd2VyKCR0eXBlMlswXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoKCRtMSA9PT0gVHlwZTo6VF9OT1QpIF4gKCRtMiA9PT0gVHlwZTo6VF9OT1QpKSB7CiAgICAgICAgICAgIGlmICgkdDEgPT09ICR0MikgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAkbTEgPT09IFR5cGU6OlRfTk9UID8gJG0yIDogJG0xLAogICAgICAgICAgICAgICAgJG0xID09PSBUeXBlOjpUX05PVCA/ICR0MiA6ICR0MSwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgIGlmICgkbTEgPT09IFR5cGU6OlRfTk9UICYmICRtMiA9PT0gVHlwZTo6VF9OT1QpIHsKICAgICAgICAgICAgLy8gQ1NTIGhhcyBubyB3YXkgb2YgcmVwcmVzZW50aW5nICJuZWl0aGVyIHNjcmVlbiBub3IgcHJpbnQiCiAgICAgICAgICAgIGlmICgkdDEgIT09ICR0MikgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBbVHlwZTo6VF9OT1QsICR0MV07CiAgICAgICAgfQoKICAgICAgICBpZiAoJHQxICE9PSAkdDIpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyB0MSA9PSB0MiwgbmVpdGhlciBtMSBub3IgbTIgYXJlICJub3QiCiAgICAgICAgcmV0dXJuIFtlbXB0eSgkbTEpPyAkbTIgOiAkbTEsICR0MV07CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21waWxlIGltcG9ydDsgcmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSB3YXMgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgaW1wb3J0ZWQKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAkcmF3UGF0aAogICAgICogQHBhcmFtIGFycmF5ICAgJG91dAogICAgICogQHBhcmFtIGJvb2xlYW4gJG9uY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbXBpbGVJbXBvcnQoJHJhd1BhdGgsICRvdXQsICRvbmNlID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCRyYXdQYXRoWzBdID09PSBUeXBlOjpUX1NUUklORykgewogICAgICAgICAgICAkcGF0aCA9ICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkcmF3UGF0aCk7CgogICAgICAgICAgICBpZiAoJHBhdGggPSAkdGhpcy0+ZmluZEltcG9ydCgkcGF0aCkpIHsKICAgICAgICAgICAgICAgIGlmICghICRvbmNlIHx8ICEgaW5fYXJyYXkoJHBhdGgsICR0aGlzLT5pbXBvcnRlZEZpbGVzKSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5pbXBvcnRGaWxlKCRwYXRoLCAkb3V0KTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aW1wb3J0ZWRGaWxlc1tdID0gJHBhdGg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmF3UGF0aFswXSA9PT0gVHlwZTo6VF9MSVNUKSB7CiAgICAgICAgICAgIC8vIGhhbmRsZSBhIGxpc3Qgb2Ygc3RyaW5ncwogICAgICAgICAgICBpZiAoY291bnQoJHJhd1BhdGhbMl0pID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKCRyYXdQYXRoWzJdIGFzICRwYXRoKSB7CiAgICAgICAgICAgICAgICBpZiAoJHBhdGhbMF0gIT09IFR5cGU6OlRfU1RSSU5HKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoICgkcmF3UGF0aFsyXSBhcyAkcGF0aCkgewogICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVJbXBvcnQoJHBhdGgsICRvdXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBpbGUgY2hpbGQ7IHJldHVybnMgYSB2YWx1ZSB0byBoYWx0IGV4ZWN1dGlvbgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoaWxkCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcRm9ybWF0dGVyXE91dHB1dEJsb2NrICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb21waWxlQ2hpbGQoJGNoaWxkLCBPdXRwdXRCbG9jayAkb3V0KQogICAgewogICAgICAgICR0aGlzLT5zb3VyY2VJbmRleCAgPSBpc3NldCgkY2hpbGRbUGFyc2VyOjpTT1VSQ0VfSU5ERVhdKSA/ICRjaGlsZFtQYXJzZXI6OlNPVVJDRV9JTkRFWF0gOiBudWxsOwogICAgICAgICR0aGlzLT5zb3VyY2VMaW5lICAgPSBpc3NldCgkY2hpbGRbUGFyc2VyOjpTT1VSQ0VfTElORV0pID8gJGNoaWxkW1BhcnNlcjo6U09VUkNFX0xJTkVdIDogLTE7CiAgICAgICAgJHRoaXMtPnNvdXJjZUNvbHVtbiA9IGlzc2V0KCRjaGlsZFtQYXJzZXI6OlNPVVJDRV9DT0xVTU5dKSA/ICRjaGlsZFtQYXJzZXI6OlNPVVJDRV9DT0xVTU5dIDogLTE7CgogICAgICAgIHN3aXRjaCAoJGNoaWxkWzBdKSB7CiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9TQ1NTUEhQX0lNUE9SVF9PTkNFOgogICAgICAgICAgICAgICAgbGlzdCgsICRyYXdQYXRoKSA9ICRjaGlsZDsKCiAgICAgICAgICAgICAgICAkcmF3UGF0aCA9ICR0aGlzLT5yZWR1Y2UoJHJhd1BhdGgpOwoKICAgICAgICAgICAgICAgIGlmICghICR0aGlzLT5jb21waWxlSW1wb3J0KCRyYXdQYXRoLCAkb3V0LCB0cnVlKSkgewogICAgICAgICAgICAgICAgICAgICRvdXQtPmxpbmVzW10gPSAnQGltcG9ydCAnIC4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkcmF3UGF0aCkgLiAnOyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9JTVBPUlQ6CiAgICAgICAgICAgICAgICBsaXN0KCwgJHJhd1BhdGgpID0gJGNoaWxkOwoKICAgICAgICAgICAgICAgICRyYXdQYXRoID0gJHRoaXMtPnJlZHVjZSgkcmF3UGF0aCk7CgogICAgICAgICAgICAgICAgaWYgKCEgJHRoaXMtPmNvbXBpbGVJbXBvcnQoJHJhd1BhdGgsICRvdXQpKSB7CiAgICAgICAgICAgICAgICAgICAgJG91dC0+bGluZXNbXSA9ICdAaW1wb3J0ICcgLiAkdGhpcy0+Y29tcGlsZVZhbHVlKCRyYXdQYXRoKSAuICc7JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0RJUkVDVElWRToKICAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlRGlyZWN0aXZlKCRjaGlsZFsxXSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9BVF9ST09UOgogICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVBdFJvb3QoJGNoaWxkWzFdKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX01FRElBOgogICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVNZWRpYSgkY2hpbGRbMV0pOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfQkxPQ0s6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y29tcGlsZUJsb2NrKCRjaGlsZFsxXSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9DSEFSU0VUOgogICAgICAgICAgICAgICAgaWYgKCEgJHRoaXMtPmNoYXJzZXRTZWVuKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNoYXJzZXRTZWVuID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgJG91dC0+bGluZXNbXSA9ICdAY2hhcnNldCAnIC4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkY2hpbGRbMV0pIC4gJzsnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfQVNTSUdOOgogICAgICAgICAgICAgICAgbGlzdCgsICRuYW1lLCAkdmFsdWUpID0gJGNoaWxkOwoKICAgICAgICAgICAgICAgIGlmICgkbmFtZVswXSA9PT0gVHlwZTo6VF9WQVJJQUJMRSkgewogICAgICAgICAgICAgICAgICAgICRmbGFnID0gaXNzZXQoJGNoaWxkWzNdKSA/ICRjaGlsZFszXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgJGlzRGVmYXVsdCA9ICRmbGFnID09PSAnIWRlZmF1bHQnOwogICAgICAgICAgICAgICAgICAgICRpc0dsb2JhbCA9ICRmbGFnID09PSAnIWdsb2JhbCc7CgogICAgICAgICAgICAgICAgICAgIGlmICgkaXNHbG9iYWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldCgkbmFtZVsxXSwgJHRoaXMtPnJlZHVjZSgkdmFsdWUpLCBmYWxzZSwgJHRoaXMtPnJvb3RFbnYpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRzaG91bGRTZXQgPSAkaXNEZWZhdWx0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICgoJHJlc3VsdCA9ICR0aGlzLT5nZXQoJG5hbWVbMV0sIGZhbHNlKSkgPT09IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHJlc3VsdCA9PT0gc2VsZjo6JG51bGwpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoISAkaXNEZWZhdWx0IHx8ICRzaG91bGRTZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldCgkbmFtZVsxXSwgJHRoaXMtPnJlZHVjZSgkdmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGNvbXBpbGVkTmFtZSA9ICR0aGlzLT5jb21waWxlVmFsdWUoJG5hbWUpOwoKICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzaG9ydGhhbmQgc3ludGF4OiBzaXplIC8gbGluZS1oZWlnaHQKICAgICAgICAgICAgICAgIGlmICgkY29tcGlsZWROYW1lID09PSAnZm9udCcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHZhbHVlWzBdID09PSBUeXBlOjpUX0VYUFJFU1NJT04gJiYgJHZhbHVlWzFdID09PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gJHRoaXMtPmV4cFRvU3RyaW5nKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2YWx1ZVswXSA9PT0gVHlwZTo6VF9MSVNUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZVsyXSBhcyAmJGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaXRlbVswXSA9PT0gVHlwZTo6VF9FWFBSRVNTSU9OICYmICRpdGVtWzFdID09PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbSA9ICR0aGlzLT5leHBUb1N0cmluZygkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gaWYgdGhlIHZhbHVlIHJlZHVjZXMgdG8gbnVsbCBmcm9tIHNvbWV0aGluZyBlbHNlIHRoZW4KICAgICAgICAgICAgICAgIC8vIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgZGlzY2FyZGVkCiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlWzBdICE9PSBUeXBlOjpUX05VTEwpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+cmVkdWNlKCR2YWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkdmFsdWVbMF0gPT09IFR5cGU6OlRfTlVMTCB8fCAkdmFsdWUgPT09IHNlbGY6OiRudWxsU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkY29tcGlsZWRWYWx1ZSA9ICR0aGlzLT5jb21waWxlVmFsdWUoJHZhbHVlKTsKCiAgICAgICAgICAgICAgICAkb3V0LT5saW5lc1tdID0gJHRoaXMtPmZvcm1hdHRlci0+cHJvcGVydHkoCiAgICAgICAgICAgICAgICAgICAgJGNvbXBpbGVkTmFtZSwKICAgICAgICAgICAgICAgICAgICAkY29tcGlsZWRWYWx1ZQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0NPTU1FTlQ6CiAgICAgICAgICAgICAgICBpZiAoJG91dC0+dHlwZSA9PT0gVHlwZTo6VF9ST09UKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVDb21tZW50KCRjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJG91dC0+bGluZXNbXSA9ICRjaGlsZFsxXTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX01JWElOOgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfRlVOQ1RJT046CiAgICAgICAgICAgICAgICBsaXN0KCwgJGJsb2NrKSA9ICRjaGlsZDsKCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0KHNlbGY6OiRuYW1lc3BhY2VzWyRibG9jay0+dHlwZV0gLiAkYmxvY2stPm5hbWUsICRibG9jayk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9FWFRFTkQ6CiAgICAgICAgICAgICAgICBsaXN0KCwgJHNlbGVjdG9ycykgPSAkY2hpbGQ7CgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHNlbGVjdG9ycyBhcyAkc2VsKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdHMgPSAkdGhpcy0+ZXZhbFNlbGVjdG9ycyhbJHNlbF0pOwoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmVzdWx0cyBhcyAkcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgdXNlIHRoZSBmaXJzdCBvbmUKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IGN1cnJlbnQoJHJlc3VsdCk7CgogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cHVzaEV4dGVuZHMoJHJlc3VsdCwgJG91dC0+c2VsZWN0b3JzLCAkY2hpbGQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0lGOgogICAgICAgICAgICAgICAgbGlzdCgsICRpZikgPSAkY2hpbGQ7CgogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5pc1RydXRoeSgkdGhpcy0+cmVkdWNlKCRpZi0+Y29uZCwgdHJ1ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jb21waWxlQ2hpbGRyZW4oJGlmLT5jaGlsZHJlbiwgJG91dCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGlmLT5jYXNlcyBhcyAkY2FzZSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkY2FzZS0+dHlwZSA9PT0gVHlwZTo6VF9FTFNFIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICRjYXNlLT50eXBlID09PSBUeXBlOjpUX0VMU0VJRiAmJiAkdGhpcy0+aXNUcnV0aHkoJHRoaXMtPnJlZHVjZSgkY2FzZS0+Y29uZCkpCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGlsZUNoaWxkcmVuKCRjYXNlLT5jaGlsZHJlbiwgJG91dCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfRUFDSDoKICAgICAgICAgICAgICAgIGxpc3QoLCAkZWFjaCkgPSAkY2hpbGQ7CgogICAgICAgICAgICAgICAgJGxpc3QgPSAkdGhpcy0+Y29lcmNlTGlzdCgkdGhpcy0+cmVkdWNlKCRlYWNoLT5saXN0KSk7CgogICAgICAgICAgICAgICAgJHRoaXMtPnB1c2hFbnYoKTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGlzdFsyXSBhcyAkaXRlbSkgewogICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCgkZWFjaC0+dmFycykgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldCgkZWFjaC0+dmFyc1swXSwgJGl0ZW0sIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoLCwgJHZhbHVlcykgPSAkdGhpcy0+Y29lcmNlTGlzdCgkaXRlbSk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZWFjaC0+dmFycyBhcyAkaSA9PiAkdmFyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0KCR2YXIsIGlzc2V0KCR2YWx1ZXNbJGldKSA/ICR2YWx1ZXNbJGldIDogc2VsZjo6JG51bGwsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkcmV0ID0gJHRoaXMtPmNvbXBpbGVDaGlsZHJlbigkZWFjaC0+Y2hpbGRyZW4sICRvdXQpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHJldCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJldFswXSAhPT0gVHlwZTo6VF9DT05UUk9MKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cG9wRW52KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcmV0WzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+cG9wRW52KCk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9XSElMRToKICAgICAgICAgICAgICAgIGxpc3QoLCAkd2hpbGUpID0gJGNoaWxkOwoKICAgICAgICAgICAgICAgIHdoaWxlICgkdGhpcy0+aXNUcnV0aHkoJHRoaXMtPnJlZHVjZSgkd2hpbGUtPmNvbmQsIHRydWUpKSkgewogICAgICAgICAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+Y29tcGlsZUNoaWxkcmVuKCR3aGlsZS0+Y2hpbGRyZW4sICRvdXQpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHJldCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJldFswXSAhPT0gVHlwZTo6VF9DT05UUk9MKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRyZXRbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfRk9SOgogICAgICAgICAgICAgICAgbGlzdCgsICRmb3IpID0gJGNoaWxkOwoKICAgICAgICAgICAgICAgICRzdGFydCA9ICR0aGlzLT5yZWR1Y2UoJGZvci0+c3RhcnQsIHRydWUpOwogICAgICAgICAgICAgICAgJHN0YXJ0ID0gJHN0YXJ0WzFdOwogICAgICAgICAgICAgICAgJGVuZCA9ICR0aGlzLT5yZWR1Y2UoJGZvci0+ZW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgICRlbmQgPSAkZW5kWzFdOwogICAgICAgICAgICAgICAgJGQgPSAkc3RhcnQgPCAkZW5kID8gMSA6IC0xOwoKICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCghICRmb3ItPnVudGlsICYmICRzdGFydCAtICRkID09ICRlbmQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICgkZm9yLT51bnRpbCAmJiAkc3RhcnQgPT0gJGVuZCkKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0KCRmb3ItPnZhciwgbmV3IE5vZGVcTnVtYmVyKCRzdGFydCwgJycpKTsKICAgICAgICAgICAgICAgICAgICAkc3RhcnQgKz0gJGQ7CgogICAgICAgICAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+Y29tcGlsZUNoaWxkcmVuKCRmb3ItPmNoaWxkcmVuLCAkb3V0KTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRyZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRyZXRbMF0gIT09IFR5cGU6OlRfQ09OVFJPTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcmV0WzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0JSRUFLOgogICAgICAgICAgICAgICAgcmV0dXJuIFtUeXBlOjpUX0NPTlRST0wsIHRydWVdOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0NPTlRJTlVFOgogICAgICAgICAgICAgICAgcmV0dXJuIFtUeXBlOjpUX0NPTlRST0wsIGZhbHNlXTsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9SRVRVUk46CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlZHVjZSgkY2hpbGRbMV0sIHRydWUpOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX05FU1RFRF9QUk9QRVJUWToKICAgICAgICAgICAgICAgIGxpc3QoLCAkcHJvcCkgPSAkY2hpbGQ7CgogICAgICAgICAgICAgICAgJHByZWZpeGVkID0gW107CiAgICAgICAgICAgICAgICAkcHJlZml4ID0gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkcHJvcC0+cHJlZml4KSAuICctJzsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHJvcC0+Y2hpbGRyZW4gYXMgJGNoaWxkKSB7CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgkY2hpbGRbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0FTU0lHTjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJGNoaWxkWzFdWzJdLCAkcHJlZml4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBlOjpUX05FU1RFRF9QUk9QRVJUWToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJGNoaWxkWzFdLT5wcmVmaXhbMl0sICRwcmVmaXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkcHJlZml4ZWRbXSA9ICRjaGlsZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29tcGlsZUNoaWxkcmVuTm9SZXR1cm4oJHByZWZpeGVkLCAkb3V0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0lOQ0xVREU6CiAgICAgICAgICAgICAgICAvLyBpbmNsdWRpbmcgYSBtaXhpbgogICAgICAgICAgICAgICAgbGlzdCgsICRuYW1lLCAkYXJnVmFsdWVzLCAkY29udGVudCkgPSAkY2hpbGQ7CgogICAgICAgICAgICAgICAgJG1peGluID0gJHRoaXMtPmdldChzZWxmOjokbmFtZXNwYWNlc1snbWl4aW4nXSAuICRuYW1lLCBmYWxzZSk7CgogICAgICAgICAgICAgICAgaWYgKCEgJG1peGluKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoIlVuZGVmaW5lZCBtaXhpbiAkbmFtZSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjYWxsaW5nU2NvcGUgPSAkdGhpcy0+Z2V0U3RvcmVFbnYoKTsKCiAgICAgICAgICAgICAgICAvLyBwdXNoIHNjb3BlLCBhcHBseSBhcmdzCiAgICAgICAgICAgICAgICAkdGhpcy0+cHVzaEVudigpOwogICAgICAgICAgICAgICAgJHRoaXMtPmVudi0+ZGVwdGgtLTsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGNvbnRlbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQtPnNjb3BlID0gJGNhbGxpbmdTY29wZTsKCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldFJhdyhzZWxmOjokbmFtZXNwYWNlc1snc3BlY2lhbCddIC4gJ2NvbnRlbnQnLCAkY29udGVudCwgJHRoaXMtPmVudik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtaXhpbi0+YXJncykpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YXBwbHlBcmd1bWVudHMoJG1peGluLT5hcmdzLCAkYXJnVmFsdWVzKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+ZW52LT5tYXJrZXIgPSAnbWl4aW4nOwoKICAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlQ2hpbGRyZW5Ob1JldHVybigkbWl4aW4tPmNoaWxkcmVuLCAkb3V0KTsKCiAgICAgICAgICAgICAgICAkdGhpcy0+cG9wRW52KCk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9NSVhJTl9DT05URU5UOgogICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAkdGhpcy0+Z2V0KHNlbGY6OiRuYW1lc3BhY2VzWydzcGVjaWFsJ10gLiAnY29udGVudCcsIGZhbHNlLCAkdGhpcy0+Z2V0U3RvcmVFbnYoKSkKICAgICAgICAgICAgICAgICAgICAgICAgID86ICR0aGlzLT5nZXQoc2VsZjo6JG5hbWVzcGFjZXNbJ3NwZWNpYWwnXSAuICdjb250ZW50JywgZmFsc2UsICR0aGlzLT5lbnYpOwoKICAgICAgICAgICAgICAgIGlmICghICRjb250ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoJ0V4cGVjdGVkIEBjb250ZW50IGluc2lkZSBvZiBtaXhpbicpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRzdG9yZUVudiA9ICR0aGlzLT5zdG9yZUVudjsKICAgICAgICAgICAgICAgICR0aGlzLT5zdG9yZUVudiA9ICRjb250ZW50LT5zY29wZTsKCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29tcGlsZUNoaWxkcmVuTm9SZXR1cm4oJGNvbnRlbnQtPmNoaWxkcmVuLCAkb3V0KTsKCiAgICAgICAgICAgICAgICAkdGhpcy0+c3RvcmVFbnYgPSAkc3RvcmVFbnY7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9ERUJVRzoKICAgICAgICAgICAgICAgIGxpc3QoLCAkdmFsdWUpID0gJGNoaWxkOwoKICAgICAgICAgICAgICAgICRsaW5lID0gJHRoaXMtPnNvdXJjZUxpbmU7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Y29tcGlsZVZhbHVlKCR0aGlzLT5yZWR1Y2UoJHZhbHVlLCB0cnVlKSk7CiAgICAgICAgICAgICAgICBmd3JpdGUoJHRoaXMtPnN0ZGVyciwgIkxpbmUgJGxpbmUgREVCVUc6ICR2YWx1ZVxuIik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9XQVJOOgogICAgICAgICAgICAgICAgbGlzdCgsICR2YWx1ZSkgPSAkY2hpbGQ7CgogICAgICAgICAgICAgICAgJGxpbmUgPSAkdGhpcy0+c291cmNlTGluZTsKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICR0aGlzLT5jb21waWxlVmFsdWUoJHRoaXMtPnJlZHVjZSgkdmFsdWUsIHRydWUpKTsKICAgICAgICAgICAgICAgIGVjaG8gIkxpbmUgJGxpbmUgV0FSTjogJHZhbHVlXG4iOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfRVJST1I6CiAgICAgICAgICAgICAgICBsaXN0KCwgJHZhbHVlKSA9ICRjaGlsZDsKCiAgICAgICAgICAgICAgICAkbGluZSA9ICR0aGlzLT5zb3VyY2VMaW5lOwogICAgICAgICAgICAgICAgJHZhbHVlID0gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkdGhpcy0+cmVkdWNlKCR2YWx1ZSwgdHJ1ZSkpOwogICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoIkxpbmUgJGxpbmUgRVJST1I6ICR2YWx1ZVxuIik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9DT05UUk9MOgogICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoJ0BicmVhay9AY29udGludWUgbm90IHBlcm1pdHRlZCBpbiB0aGlzIHNjb3BlJyk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+dGhyb3dFcnJvcigidW5rbm93biBjaGlsZCB0eXBlOiAkY2hpbGRbMF0iKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWR1Y2UgZXhwcmVzc2lvbiB0byBzdHJpbmcKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGV4cAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGV4cFRvU3RyaW5nKCRleHApCiAgICB7CiAgICAgICAgbGlzdCgsICRvcCwgJGxlZnQsICRyaWdodCwgLyogJGluUGFyZW5zICovLCAkd2hpdGVMZWZ0LCAkd2hpdGVSaWdodCkgPSAkZXhwOwoKICAgICAgICAkY29udGVudCA9IFskdGhpcy0+cmVkdWNlKCRsZWZ0KV07CgogICAgICAgIGlmICgkd2hpdGVMZWZ0KSB7CiAgICAgICAgICAgICRjb250ZW50W10gPSAnICc7CiAgICAgICAgfQoKICAgICAgICAkY29udGVudFtdID0gJG9wOwoKICAgICAgICBpZiAoJHdoaXRlUmlnaHQpIHsKICAgICAgICAgICAgJGNvbnRlbnRbXSA9ICcgJzsKICAgICAgICB9CgogICAgICAgICRjb250ZW50W10gPSAkdGhpcy0+cmVkdWNlKCRyaWdodCk7CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9TVFJJTkcsICcnLCAkY29udGVudF07CiAgICB9CgogICAgLyoqCiAgICAgKiBJcyB0cnV0aHk/CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzVHJ1dGh5KCR2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gJHZhbHVlICE9PSBzZWxmOjokZmFsc2UgJiYgJHZhbHVlICE9PSBzZWxmOjokbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCAkdmFsdWUgY2F1c2UgaXRzIG9wZXJhbmQgdG8gZXZhbAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNob3VsZEV2YWwoJHZhbHVlKQogICAgewogICAgICAgIHN3aXRjaCAoJHZhbHVlWzBdKSB7CiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9FWFBSRVNTSU9OOgogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZVsxXSA9PT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zaG91bGRFdmFsKCR2YWx1ZVsyXSwgJHZhbHVlWzNdKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBmYWxsLXRocnUKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX1ZBUklBQkxFOgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfRlVOQ1RJT05fQ0FMTDoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUmVkdWNlIHZhbHVlCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgJHZhbHVlCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkaW5FeHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZWR1Y2UoJHZhbHVlLCAkaW5FeHAgPSBmYWxzZSkKICAgIHsKICAgICAgICBsaXN0KCR0eXBlKSA9ICR2YWx1ZTsKCiAgICAgICAgc3dpdGNoICgkdHlwZSkgewogICAgICAgICAgICBjYXNlIFR5cGU6OlRfRVhQUkVTU0lPTjoKICAgICAgICAgICAgICAgIGxpc3QoLCAkb3AsICRsZWZ0LCAkcmlnaHQsICRpblBhcmVucykgPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgJG9wTmFtZSA9IGlzc2V0KHNlbGY6OiRvcGVyYXRvck5hbWVzWyRvcF0pID8gc2VsZjo6JG9wZXJhdG9yTmFtZXNbJG9wXSA6ICRvcDsKICAgICAgICAgICAgICAgICRpbkV4cCA9ICRpbkV4cCB8fCAkdGhpcy0+c2hvdWxkRXZhbCgkbGVmdCkgfHwgJHRoaXMtPnNob3VsZEV2YWwoJHJpZ2h0KTsKCiAgICAgICAgICAgICAgICAkbGVmdCA9ICR0aGlzLT5yZWR1Y2UoJGxlZnQsIHRydWUpOwoKICAgICAgICAgICAgICAgIGlmICgkb3AgIT09ICdhbmQnICYmICRvcCAhPT0gJ29yJykgewogICAgICAgICAgICAgICAgICAgICRyaWdodCA9ICR0aGlzLT5yZWR1Y2UoJHJpZ2h0LCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGxvb2tzIGxpa2UgY3NzIHNob3J0aGFuZAogICAgICAgICAgICAgICAgaWYgKCRvcE5hbWUgPT0gJ2RpdicgJiYgISAkaW5QYXJlbnMgJiYgISAkaW5FeHAgJiYgaXNzZXQoJHJpZ2h0WzJdKQogICAgICAgICAgICAgICAgICAgICYmICgoJHJpZ2h0WzBdICE9PSBUeXBlOjpUX05VTUJFUiAmJiAkcmlnaHRbMl0gIT0gJycpCiAgICAgICAgICAgICAgICAgICAgfHwgKCRyaWdodFswXSA9PT0gVHlwZTo6VF9OVU1CRVIgJiYgISAkcmlnaHQtPnVuaXRsZXNzKCkpKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5leHBUb1N0cmluZygkdmFsdWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRsZWZ0ID0gJHRoaXMtPmNvZXJjZUZvckV4cHJlc3Npb24oJGxlZnQpOwogICAgICAgICAgICAgICAgJHJpZ2h0ID0gJHRoaXMtPmNvZXJjZUZvckV4cHJlc3Npb24oJHJpZ2h0KTsKCiAgICAgICAgICAgICAgICAkbHR5cGUgPSAkbGVmdFswXTsKICAgICAgICAgICAgICAgICRydHlwZSA9ICRyaWdodFswXTsKCiAgICAgICAgICAgICAgICAkdWNPcE5hbWUgPSB1Y2ZpcnN0KCRvcE5hbWUpOwogICAgICAgICAgICAgICAgJHVjTFR5cGUgID0gdWNmaXJzdCgkbHR5cGUpOwogICAgICAgICAgICAgICAgJHVjUlR5cGUgID0gdWNmaXJzdCgkcnR5cGUpOwoKICAgICAgICAgICAgICAgIC8vIHRoaXMgdHJpZXM6CiAgICAgICAgICAgICAgICAvLyAxLiBvcFtvcCBuYW1lXVtsZWZ0IHR5cGVdW3JpZ2h0IHR5cGVdCiAgICAgICAgICAgICAgICAvLyAyLiBvcFtsZWZ0IHR5cGVdW3JpZ2h0IHR5cGVdIChwYXNzaW5nIHRoZSBvcCBhcyBmaXJzdCBhcmcKICAgICAgICAgICAgICAgIC8vIDMuIG9wW29wIG5hbWVdCiAgICAgICAgICAgICAgICAkZm4gPSAib3Ake3VjT3BOYW1lfSR7dWNMVHlwZX0ke3VjUlR5cGV9IjsKCiAgICAgICAgICAgICAgICBpZiAoaXNfY2FsbGFibGUoWyR0aGlzLCAkZm5dKSB8fAogICAgICAgICAgICAgICAgICAgICgoJGZuID0gIm9wJHt1Y0xUeXBlfSR7dWNSVHlwZX0iKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBpc19jYWxsYWJsZShbJHRoaXMsICRmbl0pICYmCiAgICAgICAgICAgICAgICAgICAgICAgICRwYXNzT3AgPSB0cnVlKSB8fAogICAgICAgICAgICAgICAgICAgICgoJGZuID0gIm9wJHt1Y09wTmFtZX0iKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBpc19jYWxsYWJsZShbJHRoaXMsICRmbl0pICYmCiAgICAgICAgICAgICAgICAgICAgICAgICRnZW5PcCA9IHRydWUpCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkY29lcmNlVW5pdCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoISBpc3NldCgkZ2VuT3ApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICRsZWZ0WzBdID09PSBUeXBlOjpUX05VTUJFUiAmJiAkcmlnaHRbMF0gPT09IFR5cGU6OlRfTlVNQkVSCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb2VyY2VVbml0ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJG9wTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXVsJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0VW5pdCA9ICRsZWZ0WzJdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmlnaHRbMl0gYXMgJHVuaXQgPT4gJGV4cCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0VW5pdFskdW5pdF0gPSAoaXNzZXQoJHRhcmdldFVuaXRbJHVuaXRdKSA/ICR0YXJnZXRVbml0WyR1bml0XSA6IDApICsgJGV4cDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGl2JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0VW5pdCA9ICRsZWZ0WzJdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmlnaHRbMl0gYXMgJHVuaXQgPT4gJGV4cCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0VW5pdFskdW5pdF0gPSAoaXNzZXQoJHRhcmdldFVuaXRbJHVuaXRdKSA/ICR0YXJnZXRVbml0WyR1bml0XSA6IDApIC0gJGV4cDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbW9kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0VW5pdCA9ICRsZWZ0WzJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldFVuaXQgPSAkbGVmdC0+dW5pdGxlc3MoKSA/ICRyaWdodFsyXSA6ICRsZWZ0WzJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISAkbGVmdC0+dW5pdGxlc3MoKSAmJiAhICRyaWdodC0+dW5pdGxlc3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxlZnQgPSAkbGVmdC0+bm9ybWFsaXplKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmlnaHQgPSAkcmlnaHQtPm5vcm1hbGl6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkc2hvdWxkRXZhbCA9ICRpblBhcmVucyB8fCAkaW5FeHA7CgogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcGFzc09wKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gJHRoaXMtPiRmbigkb3AsICRsZWZ0LCAkcmlnaHQsICRzaG91bGRFdmFsKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gJHRoaXMtPiRmbigkbGVmdCwgJHJpZ2h0LCAkc2hvdWxkRXZhbCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJG91dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb2VyY2VVbml0ICYmICRvdXRbMF0gPT09IFR5cGU6OlRfTlVNQkVSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gJG91dC0+Y29lcmNlKCR0YXJnZXRVbml0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRvdXQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZXhwVG9TdHJpbmcoJHZhbHVlKTsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9VTkFSWToKICAgICAgICAgICAgICAgIGxpc3QoLCAkb3AsICRleHAsICRpblBhcmVucykgPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgJGluRXhwID0gJGluRXhwIHx8ICR0aGlzLT5zaG91bGRFdmFsKCRleHApOwogICAgICAgICAgICAgICAgJGV4cCA9ICR0aGlzLT5yZWR1Y2UoJGV4cCk7CgogICAgICAgICAgICAgICAgaWYgKCRleHBbMF0gPT09IFR5cGU6OlRfTlVNQkVSKSB7CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgkb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKCRleHBbMV0sICRleHBbMl0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKC0kZXhwWzFdLCAkZXhwWzJdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRvcCA9PT0gJ25vdCcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGluRXhwIHx8ICRpblBhcmVucykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV4cCA9PT0gc2VsZjo6JGZhbHNlIHx8ICRleHAgPT09IHNlbGY6OiRudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjo6JHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOjokZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkb3AgPSAkb3AgLiAnICc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIFtUeXBlOjpUX1NUUklORywgJycsIFskb3AsICRleHBdXTsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9WQVJJQUJMRToKICAgICAgICAgICAgICAgIGxpc3QoLCAkbmFtZSkgPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZWR1Y2UoJHRoaXMtPmdldCgkbmFtZSkpOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0xJU1Q6CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdmFsdWVbMl0gYXMgJiRpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgJGl0ZW0gPSAkdGhpcy0+cmVkdWNlKCRpdGVtKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX01BUDoKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZVsxXSBhcyAmJGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAkaXRlbSA9ICR0aGlzLT5yZWR1Y2UoJGl0ZW0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZVsyXSBhcyAmJGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAkaXRlbSA9ICR0aGlzLT5yZWR1Y2UoJGl0ZW0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfU1RSSU5HOgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlWzJdIGFzICYkaXRlbSkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkaXRlbSkgfHwgJGl0ZW0gaW5zdGFuY2VvZiBcQXJyYXlBY2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0gPSAkdGhpcy0+cmVkdWNlKCRpdGVtKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9JTlRFUlBPTEFURToKICAgICAgICAgICAgICAgICR2YWx1ZVsxXSA9ICR0aGlzLT5yZWR1Y2UoJHZhbHVlWzFdKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0ZVTkNUSU9OX0NBTEw6CiAgICAgICAgICAgICAgICBsaXN0KCwgJG5hbWUsICRhcmdWYWx1ZXMpID0gJHZhbHVlOwoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Zm5jYWxsKCRuYW1lLCAkYXJnVmFsdWVzKTsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEZ1bmN0aW9uIGNhbGxlcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBhcnJheSAgJGFyZ1ZhbHVlcwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZuY2FsbCgkbmFtZSwgJGFyZ1ZhbHVlcykKICAgIHsKICAgICAgICAvLyBTQ1NTIEBmdW5jdGlvbgogICAgICAgIGlmICgkdGhpcy0+Y2FsbFNjc3NGdW5jdGlvbigkbmFtZSwgJGFyZ1ZhbHVlcywgJHJldHVyblZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJHJldHVyblZhbHVlOwogICAgICAgIH0KCiAgICAgICAgLy8gbmF0aXZlIFBIUCBmdW5jdGlvbnMKICAgICAgICBpZiAoJHRoaXMtPmNhbGxOYXRpdmVGdW5jdGlvbigkbmFtZSwgJGFyZ1ZhbHVlcywgJHJldHVyblZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJHJldHVyblZhbHVlOwogICAgICAgIH0KCiAgICAgICAgLy8gZm9yIENTUyBmdW5jdGlvbnMsIHNpbXBseSBmbGF0dGVuIHRoZSBhcmd1bWVudHMgaW50byBhIGxpc3QKICAgICAgICAkbGlzdEFyZ3MgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoKGFycmF5KSAkYXJnVmFsdWVzIGFzICRhcmcpIHsKICAgICAgICAgICAgaWYgKGVtcHR5KCRhcmdbMF0pKSB7CiAgICAgICAgICAgICAgICAkbGlzdEFyZ3NbXSA9ICR0aGlzLT5yZWR1Y2UoJGFyZ1sxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9GVU5DVElPTiwgJG5hbWUsIFtUeXBlOjpUX0xJU1QsICcsJywgJGxpc3RBcmdzXV07CiAgICB9CgogICAgLyoqCiAgICAgKiBOb3JtYWxpemUgbmFtZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbm9ybWFsaXplTmFtZSgkbmFtZSkKICAgIHsKICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRuYW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIE5vcm1hbGl6ZSB2YWx1ZQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSgkdmFsdWUpCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHRoaXMtPmNvZXJjZUZvckV4cHJlc3Npb24oJHRoaXMtPnJlZHVjZSgkdmFsdWUpKTsKICAgICAgICBsaXN0KCR0eXBlKSA9ICR2YWx1ZTsKCiAgICAgICAgc3dpdGNoICgkdHlwZSkgewogICAgICAgICAgICBjYXNlIFR5cGU6OlRfTElTVDoKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICR0aGlzLT5leHRyYWN0SW50ZXJwb2xhdGlvbigkdmFsdWUpOwoKICAgICAgICAgICAgICAgIGlmICgkdmFsdWVbMF0gIT09IFR5cGU6OlRfTElTVCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBbVHlwZTo6VF9LRVlXT1JELCAkdGhpcy0+Y29tcGlsZVZhbHVlKCR2YWx1ZSldOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZVsyXSBhcyAka2V5ID0+ICRpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgJHZhbHVlWzJdWyRrZXldID0gJHRoaXMtPm5vcm1hbGl6ZVZhbHVlKCRpdGVtKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX1NUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiBbJHR5cGUsICciJywgWyR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkdmFsdWUpXV07CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfTlVNQkVSOgogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZS0+bm9ybWFsaXplKCk7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfSU5URVJQT0xBVEU6CiAgICAgICAgICAgICAgICByZXR1cm4gW1R5cGU6OlRfS0VZV09SRCwgJHRoaXMtPmNvbXBpbGVWYWx1ZSgkdmFsdWUpXTsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBudW1iZXJzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRsZWZ0CiAgICAgKiBAcGFyYW0gYXJyYXkgJHJpZ2h0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BBZGROdW1iZXJOdW1iZXIoJGxlZnQsICRyaWdodCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKCRsZWZ0WzFdICsgJHJpZ2h0WzFdLCAkbGVmdFsyXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNdWx0aXBseSBudW1iZXJzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRsZWZ0CiAgICAgKiBAcGFyYW0gYXJyYXkgJHJpZ2h0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BNdWxOdW1iZXJOdW1iZXIoJGxlZnQsICRyaWdodCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKCRsZWZ0WzFdICogJHJpZ2h0WzFdLCAkbGVmdFsyXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdCBudW1iZXJzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRsZWZ0CiAgICAgKiBAcGFyYW0gYXJyYXkgJHJpZ2h0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BTdWJOdW1iZXJOdW1iZXIoJGxlZnQsICRyaWdodCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKCRsZWZ0WzFdIC0gJHJpZ2h0WzFdLCAkbGVmdFsyXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEaXZpZGUgbnVtYmVycwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkbGVmdAogICAgICogQHBhcmFtIGFycmF5ICRyaWdodAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG9wRGl2TnVtYmVyTnVtYmVyKCRsZWZ0LCAkcmlnaHQpCiAgICB7CiAgICAgICAgaWYgKCRyaWdodFsxXSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBbVHlwZTo6VF9TVFJJTkcsICcnLCBbJGxlZnRbMV0gLiAkbGVmdFsyXSAuICcvJyAuICRyaWdodFsxXSAuICRyaWdodFsyXV1dOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBOb2RlXE51bWJlcigkbGVmdFsxXSAvICRyaWdodFsxXSwgJGxlZnRbMl0pOwogICAgfQoKICAgIC8qKgogICAgICogTW9kIG51bWJlcnMKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGxlZnQKICAgICAqIEBwYXJhbSBhcnJheSAkcmlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcE1vZE51bWJlck51bWJlcigkbGVmdCwgJHJpZ2h0KQogICAgewogICAgICAgIHJldHVybiBuZXcgTm9kZVxOdW1iZXIoJGxlZnRbMV0gJSAkcmlnaHRbMV0sICRsZWZ0WzJdKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBzdHJpbmdzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRsZWZ0CiAgICAgKiBAcGFyYW0gYXJyYXkgJHJpZ2h0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BBZGQoJGxlZnQsICRyaWdodCkKICAgIHsKICAgICAgICBpZiAoJHN0ckxlZnQgPSAkdGhpcy0+Y29lcmNlU3RyaW5nKCRsZWZ0KSkgewogICAgICAgICAgICBpZiAoJHJpZ2h0WzBdID09PSBUeXBlOjpUX1NUUklORykgewogICAgICAgICAgICAgICAgJHJpZ2h0WzFdID0gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzdHJMZWZ0WzJdW10gPSAkcmlnaHQ7CgogICAgICAgICAgICByZXR1cm4gJHN0ckxlZnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHN0clJpZ2h0ID0gJHRoaXMtPmNvZXJjZVN0cmluZygkcmlnaHQpKSB7CiAgICAgICAgICAgIGlmICgkbGVmdFswXSA9PT0gVHlwZTo6VF9TVFJJTkcpIHsKICAgICAgICAgICAgICAgICRsZWZ0WzFdID0gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJHN0clJpZ2h0WzJdLCAkbGVmdCk7CgogICAgICAgICAgICByZXR1cm4gJHN0clJpZ2h0OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEJvb2xlYW4gYW5kCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgJGxlZnQKICAgICAqIEBwYXJhbSBhcnJheSAgICRyaWdodAogICAgICogQHBhcmFtIGJvb2xlYW4gJHNob3VsZEV2YWwKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcEFuZCgkbGVmdCwgJHJpZ2h0LCAkc2hvdWxkRXZhbCkKICAgIHsKICAgICAgICBpZiAoISAkc2hvdWxkRXZhbCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoJGxlZnQgIT09IHNlbGY6OiRmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlZHVjZSgkcmlnaHQsIHRydWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsZWZ0OwogICAgfQoKICAgIC8qKgogICAgICogQm9vbGVhbiBvcgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgICRsZWZ0CiAgICAgKiBAcGFyYW0gYXJyYXkgICAkcmlnaHQKICAgICAqIEBwYXJhbSBib29sZWFuICRzaG91bGRFdmFsCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BPcigkbGVmdCwgJHJpZ2h0LCAkc2hvdWxkRXZhbCkKICAgIHsKICAgICAgICBpZiAoISAkc2hvdWxkRXZhbCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoJGxlZnQgIT09IHNlbGY6OiRmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gJGxlZnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnJlZHVjZSgkcmlnaHQsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZSBjb2xvcnMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcAogICAgICogQHBhcmFtIGFycmF5ICAkbGVmdAogICAgICogQHBhcmFtIGFycmF5ICAkcmlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcENvbG9yQ29sb3IoJG9wLCAkbGVmdCwgJHJpZ2h0KQogICAgewogICAgICAgICRvdXQgPSBbVHlwZTo6VF9DT0xPUl07CgogICAgICAgIGZvcmVhY2ggKFsxLCAyLCAzXSBhcyAkaSkgewogICAgICAgICAgICAkbHZhbCA9IGlzc2V0KCRsZWZ0WyRpXSkgPyAkbGVmdFskaV0gOiAwOwogICAgICAgICAgICAkcnZhbCA9IGlzc2V0KCRyaWdodFskaV0pID8gJHJpZ2h0WyRpXSA6IDA7CgogICAgICAgICAgICBzd2l0Y2ggKCRvcCkgewogICAgICAgICAgICAgICAgY2FzZSAnKyc6CiAgICAgICAgICAgICAgICAgICAgJG91dFtdID0gJGx2YWwgKyAkcnZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICctJzoKICAgICAgICAgICAgICAgICAgICAkb3V0W10gPSAkbHZhbCAtICRydmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJyonOgogICAgICAgICAgICAgICAgICAgICRvdXRbXSA9ICRsdmFsICogJHJ2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnJSc6CiAgICAgICAgICAgICAgICAgICAgJG91dFtdID0gJGx2YWwgJSAkcnZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICAgICBpZiAoJHJ2YWwgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dGhyb3dFcnJvcigiY29sb3I6IENhbid0IGRpdmlkZSBieSB6ZXJvIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIDI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkb3V0W10gPSAoaW50KSAoJGx2YWwgLyAkcnZhbCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnPT0nOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b3BFcSgkbGVmdCwgJHJpZ2h0KTsKCiAgICAgICAgICAgICAgICBjYXNlICchPSc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vcE5lcSgkbGVmdCwgJHJpZ2h0KTsKCiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICR0aGlzLT50aHJvd0Vycm9yKCJjb2xvcjogdW5rbm93biBvcCAkb3AiKTsKICAgICAgICAgICAgICAgICAgICBicmVhayAyOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGxlZnRbNF0pKSB7CiAgICAgICAgICAgICRvdXRbNF0gPSAkbGVmdFs0XTsKICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHJpZ2h0WzRdKSkgewogICAgICAgICAgICAkb3V0WzRdID0gJHJpZ2h0WzRdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5maXhDb2xvcigkb3V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmUgY29sb3IgYW5kIG51bWJlcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wCiAgICAgKiBAcGFyYW0gYXJyYXkgICRsZWZ0CiAgICAgKiBAcGFyYW0gYXJyYXkgICRyaWdodAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG9wQ29sb3JOdW1iZXIoJG9wLCAkbGVmdCwgJHJpZ2h0KQogICAgewogICAgICAgICR2YWx1ZSA9ICRyaWdodFsxXTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5vcENvbG9yQ29sb3IoCiAgICAgICAgICAgICRvcCwKICAgICAgICAgICAgJGxlZnQsCiAgICAgICAgICAgIFtUeXBlOjpUX0NPTE9SLCAkdmFsdWUsICR2YWx1ZSwgJHZhbHVlXQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlIG51bWJlciBhbmQgY29sb3IKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcAogICAgICogQHBhcmFtIGFycmF5ICAkbGVmdAogICAgICogQHBhcmFtIGFycmF5ICAkcmlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcE51bWJlckNvbG9yKCRvcCwgJGxlZnQsICRyaWdodCkKICAgIHsKICAgICAgICAkdmFsdWUgPSAkbGVmdFsxXTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5vcENvbG9yQ29sb3IoCiAgICAgICAgICAgICRvcCwKICAgICAgICAgICAgW1R5cGU6OlRfQ09MT1IsICR2YWx1ZSwgJHZhbHVlLCAkdmFsdWVdLAogICAgICAgICAgICAkcmlnaHQKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZSBudW1iZXIxID09IG51bWJlcjIKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGxlZnQKICAgICAqIEBwYXJhbSBhcnJheSAkcmlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcEVxKCRsZWZ0LCAkcmlnaHQpCiAgICB7CiAgICAgICAgaWYgKCgkbFN0ciA9ICR0aGlzLT5jb2VyY2VTdHJpbmcoJGxlZnQpKSAmJiAoJHJTdHIgPSAkdGhpcy0+Y29lcmNlU3RyaW5nKCRyaWdodCkpKSB7CiAgICAgICAgICAgICRsU3RyWzFdID0gJyc7CiAgICAgICAgICAgICRyU3RyWzFdID0gJyc7CgogICAgICAgICAgICAkbGVmdCA9ICR0aGlzLT5jb21waWxlVmFsdWUoJGxTdHIpOwogICAgICAgICAgICAkcmlnaHQgPSAkdGhpcy0+Y29tcGlsZVZhbHVlKCRyU3RyKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+dG9Cb29sKCRsZWZ0ID09PSAkcmlnaHQpOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZSBudW1iZXIxICE9IG51bWJlcjIKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGxlZnQKICAgICAqIEBwYXJhbSBhcnJheSAkcmlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcE5lcSgkbGVmdCwgJHJpZ2h0KQogICAgewogICAgICAgIGlmICgoJGxTdHIgPSAkdGhpcy0+Y29lcmNlU3RyaW5nKCRsZWZ0KSkgJiYgKCRyU3RyID0gJHRoaXMtPmNvZXJjZVN0cmluZygkcmlnaHQpKSkgewogICAgICAgICAgICAkbFN0clsxXSA9ICcnOwogICAgICAgICAgICAkclN0clsxXSA9ICcnOwoKICAgICAgICAgICAgJGxlZnQgPSAkdGhpcy0+Y29tcGlsZVZhbHVlKCRsU3RyKTsKICAgICAgICAgICAgJHJpZ2h0ID0gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkclN0cik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnRvQm9vbCgkbGVmdCAhPT0gJHJpZ2h0KTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmUgbnVtYmVyMSA+PSBudW1iZXIyCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRsZWZ0CiAgICAgKiBAcGFyYW0gYXJyYXkgJHJpZ2h0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BHdGVOdW1iZXJOdW1iZXIoJGxlZnQsICRyaWdodCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvQm9vbCgkbGVmdFsxXSA+PSAkcmlnaHRbMV0pOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZSBudW1iZXIxID4gbnVtYmVyMgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkbGVmdAogICAgICogQHBhcmFtIGFycmF5ICRyaWdodAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG9wR3ROdW1iZXJOdW1iZXIoJGxlZnQsICRyaWdodCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvQm9vbCgkbGVmdFsxXSA+ICRyaWdodFsxXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlIG51bWJlcjEgPD0gbnVtYmVyMgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkbGVmdAogICAgICogQHBhcmFtIGFycmF5ICRyaWdodAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG9wTHRlTnVtYmVyTnVtYmVyKCRsZWZ0LCAkcmlnaHQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b0Jvb2woJGxlZnRbMV0gPD0gJHJpZ2h0WzFdKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmUgbnVtYmVyMSA8IG51bWJlcjIKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGxlZnQKICAgICAqIEBwYXJhbSBhcnJheSAkcmlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcEx0TnVtYmVyTnVtYmVyKCRsZWZ0LCAkcmlnaHQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b0Jvb2woJGxlZnRbMV0gPCAkcmlnaHRbMV0pOwogICAgfQoKICAgIC8qKgogICAgICogVGhyZWUtd2F5IGNvbXBhcmlzb24sIGFrYSBzcGFjZXNoaXAgb3BlcmF0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGxlZnQKICAgICAqIEBwYXJhbSBhcnJheSAkcmlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcENtcE51bWJlck51bWJlcigkbGVmdCwgJHJpZ2h0KQogICAgewogICAgICAgICRuID0gJGxlZnRbMV0gLSAkcmlnaHRbMV07CgogICAgICAgIHJldHVybiBuZXcgTm9kZVxOdW1iZXIoJG4gPyAkbiAvIGFicygkbikgOiAwLCAnJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYXN0IHRvIGJvb2xlYW4KICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0aGluZwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQm9vbCgkdGhpbmcpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGluZyA/IHNlbGY6OiR0cnVlIDogc2VsZjo6JGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZXMgYSBwcmltaXRpdmUgdmFsdWUgaW50byBhIENTUyBwcm9wZXJ0eSB2YWx1ZS4KICAgICAqCiAgICAgKiBWYWx1ZXMgaW4gc2Nzc3BocCBhcmUgdHlwZWQgYnkgYmVpbmcgd3JhcHBlZCBpbiBhcnJheXMsIHRoZWlyIGZvcm1hdCBpcwogICAgICogdHlwaWNhbGx5OgogICAgICoKICAgICAqICAgICBhcnJheSh0eXBlLCBjb250ZW50cyBbLCBhZGRpdGlvbmFsX2NvbnRlbnRzXSopCiAgICAgKgogICAgICogVGhlIGlucHV0IGlzIGV4cGVjdGVkIHRvIGJlIHJlZHVjZWQuIFRoaXMgZnVuY3Rpb24gd2lsbCBub3Qgd29yayBvbgogICAgICogdGhpbmdzIGxpa2UgZXhwcmVzc2lvbnMgYW5kIHZhcmlhYmxlcy4KICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlVmFsdWUoJHZhbHVlKQogICAgewogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5yZWR1Y2UoJHZhbHVlKTsKCiAgICAgICAgbGlzdCgkdHlwZSkgPSAkdmFsdWU7CgogICAgICAgIHN3aXRjaCAoJHR5cGUpIHsKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0tFWVdPUkQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlWzFdOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0NPTE9SOgogICAgICAgICAgICAgICAgLy8gWzFdIC0gcmVkIGNvbXBvbmVudCAoZWl0aGVyIG51bWJlciBmb3IgYSAlKQogICAgICAgICAgICAgICAgLy8gWzJdIC0gZ3JlZW4gY29tcG9uZW50CiAgICAgICAgICAgICAgICAvLyBbM10gLSBibHVlIGNvbXBvbmVudAogICAgICAgICAgICAgICAgLy8gWzRdIC0gb3B0aW9uYWwgYWxwaGEgY29tcG9uZW50CiAgICAgICAgICAgICAgICBsaXN0KCwgJHIsICRnLCAkYikgPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgJHIgPSByb3VuZCgkcik7CiAgICAgICAgICAgICAgICAkZyA9IHJvdW5kKCRnKTsKICAgICAgICAgICAgICAgICRiID0gcm91bmQoJGIpOwoKICAgICAgICAgICAgICAgIGlmIChjb3VudCgkdmFsdWUpID09PSA1ICYmICR2YWx1ZVs0XSAhPT0gMSkgeyAvLyByZ2JhCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdyZ2JhKCcgLiAkciAuICcsICcgLiAkZyAuICcsICcgLiAkYiAuICcsICcgLiAkdmFsdWVbNF0gLiAnKSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGggPSBzcHJpbnRmKCcjJTAyeCUwMnglMDJ4JywgJHIsICRnLCAkYik7CgogICAgICAgICAgICAgICAgLy8gQ29udmVydGluZyBoZXggY29sb3IgdG8gc2hvcnQgbm90YXRpb24gKGUuZy4gIzAwMzM5OSB0byAjMDM5KQogICAgICAgICAgICAgICAgaWYgKCRoWzFdID09PSAkaFsyXSAmJiAkaFszXSA9PT0gJGhbNF0gJiYgJGhbNV0gPT09ICRoWzZdKSB7CiAgICAgICAgICAgICAgICAgICAgJGggPSAnIycgLiAkaFsxXSAuICRoWzNdIC4gJGhbNV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICRoOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX05VTUJFUjoKICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWUtPm91dHB1dCgkdGhpcyk7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZVsxXSAuICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkdmFsdWUpIC4gJHZhbHVlWzFdOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0ZVTkNUSU9OOgogICAgICAgICAgICAgICAgJGFyZ3MgPSAhIGVtcHR5KCR2YWx1ZVsyXSkgPyAkdGhpcy0+Y29tcGlsZVZhbHVlKCR2YWx1ZVsyXSkgOiAnJzsKCiAgICAgICAgICAgICAgICByZXR1cm4gIiR2YWx1ZVsxXSgkYXJncykiOwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0xJU1Q6CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+ZXh0cmFjdEludGVycG9sYXRpb24oJHZhbHVlKTsKCiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlWzBdICE9PSBUeXBlOjpUX0xJU1QpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkdmFsdWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGxpc3QoLCAkZGVsaW0sICRpdGVtcykgPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgaWYgKCRkZWxpbSAhPT0gJyAnKSB7CiAgICAgICAgICAgICAgICAgICAgJGRlbGltIC49ICcgJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZmlsdGVyZWQgPSBbXTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGl0ZW1bMF0gPT09IFR5cGU6OlRfTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRmaWx0ZXJlZFtdID0gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkaXRlbSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGltcGxvZGUoIiRkZWxpbSIsICRmaWx0ZXJlZCk7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfTUFQOgogICAgICAgICAgICAgICAgJGtleXMgPSAkdmFsdWVbMV07CiAgICAgICAgICAgICAgICAkdmFsdWVzID0gJHZhbHVlWzJdOwogICAgICAgICAgICAgICAgJGZpbHRlcmVkID0gW107CgogICAgICAgICAgICAgICAgZm9yICgkaSA9IDAsICRzID0gY291bnQoJGtleXMpOyAkaSA8ICRzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpbHRlcmVkWyR0aGlzLT5jb21waWxlVmFsdWUoJGtleXNbJGldKV0gPSAkdGhpcy0+Y29tcGlsZVZhbHVlKCR2YWx1ZXNbJGldKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBhcnJheV93YWxrKCRmaWx0ZXJlZCwgZnVuY3Rpb24gKCYkdmFsdWUsICRrZXkpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAka2V5IC4gJzogJyAuICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHJldHVybiAnKCcgLiBpbXBsb2RlKCcsICcsICRmaWx0ZXJlZCkgLiAnKSc7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfSU5URVJQT0xBVEVEOgogICAgICAgICAgICAgICAgLy8gbm9kZSBjcmVhdGVkIGJ5IGV4dHJhY3RJbnRlcnBvbGF0aW9uCiAgICAgICAgICAgICAgICBsaXN0KCwgJGludGVycG9sYXRlLCAkbGVmdCwgJHJpZ2h0KSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIGxpc3QoLCwgJHdoaXRlTGVmdCwgJHdoaXRlUmlnaHQpID0gJGludGVycG9sYXRlOwoKICAgICAgICAgICAgICAgICRsZWZ0ID0gY291bnQoJGxlZnRbMl0pID4gMCA/CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBpbGVWYWx1ZSgkbGVmdCkgLiAkd2hpdGVMZWZ0IDogJyc7CgogICAgICAgICAgICAgICAgJHJpZ2h0ID0gY291bnQoJHJpZ2h0WzJdKSA+IDAgPwogICAgICAgICAgICAgICAgICAgICR3aGl0ZVJpZ2h0IC4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkcmlnaHQpIDogJyc7CgogICAgICAgICAgICAgICAgcmV0dXJuICRsZWZ0IC4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkaW50ZXJwb2xhdGUpIC4gJHJpZ2h0OwoKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0lOVEVSUE9MQVRFOgogICAgICAgICAgICAgICAgLy8gcmF3IHBhcnNlIG5vZGUKICAgICAgICAgICAgICAgIGxpc3QoLCAkZXhwKSA9ICR2YWx1ZTsKCiAgICAgICAgICAgICAgICAvLyBzdHJpcCBxdW90ZXMgaWYgaXQncyBhIHN0cmluZwogICAgICAgICAgICAgICAgJHJlZHVjZWQgPSAkdGhpcy0+cmVkdWNlKCRleHApOwoKICAgICAgICAgICAgICAgIHN3aXRjaCAoJHJlZHVjZWRbMF0pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIFR5cGU6OlRfU1RSSU5HOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVkdWNlZCA9IFtUeXBlOjpUX0tFWVdPUkQsICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkcmVkdWNlZCldOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBlOjpUX05VTEw6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZWR1Y2VkID0gW1R5cGU6OlRfS0VZV09SRCwgJyddOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGlsZVZhbHVlKCRyZWR1Y2VkKTsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9OVUxMOgogICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJzsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+dGhyb3dFcnJvcigidW5rbm93biB2YWx1ZSB0eXBlOiAkdHlwZSIpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEZsYXR0ZW4gbGlzdAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkbGlzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmbGF0dGVuTGlzdCgkbGlzdCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbXBpbGVWYWx1ZSgkbGlzdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21waWxlIHN0cmluZyBjb250ZW50CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29tcGlsZVN0cmluZ0NvbnRlbnQoJHN0cmluZykKICAgIHsKICAgICAgICAkcGFydHMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJHN0cmluZ1syXSBhcyAkcGFydCkgewogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHBhcnQpIHx8ICRwYXJ0IGluc3RhbmNlb2YgXEFycmF5QWNjZXNzKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICR0aGlzLT5jb21waWxlVmFsdWUoJHBhcnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkcGFydDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGltcGxvZGUoJHBhcnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3QgaW50ZXJwb2xhdGlvbjsgaXQgZG9lc24ndCBuZWVkIHRvIGJlIHJlY3Vyc2l2ZSwgY29tcGlsZVZhbHVlIHdpbGwgaGFuZGxlIHRoYXQKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBleHRyYWN0SW50ZXJwb2xhdGlvbigkbGlzdCkKICAgIHsKICAgICAgICAkaXRlbXMgPSAkbGlzdFsyXTsKCiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpID0+ICRpdGVtKSB7CiAgICAgICAgICAgIGlmICgkaXRlbVswXSA9PT0gVHlwZTo6VF9JTlRFUlBPTEFURSkgewogICAgICAgICAgICAgICAgJGJlZm9yZSA9IFtUeXBlOjpUX0xJU1QsICRsaXN0WzFdLCBhcnJheV9zbGljZSgkaXRlbXMsIDAsICRpKV07CiAgICAgICAgICAgICAgICAkYWZ0ZXIgID0gW1R5cGU6OlRfTElTVCwgJGxpc3RbMV0sIGFycmF5X3NsaWNlKCRpdGVtcywgJGkgKyAxKV07CgogICAgICAgICAgICAgICAgcmV0dXJuIFtUeXBlOjpUX0lOVEVSUE9MQVRFRCwgJGl0ZW0sICRiZWZvcmUsICRhZnRlcl07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGlzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmQgdGhlIGZpbmFsIHNldCBvZiBzZWxlY3RvcnMKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQ29tcGlsZXJcRW52aXJvbm1lbnQgJGVudgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG11bHRpcGx5U2VsZWN0b3JzKEVudmlyb25tZW50ICRlbnYpCiAgICB7CiAgICAgICAgJGVudnMgICAgICAgICAgICA9ICR0aGlzLT5jb21wYWN0RW52KCRlbnYpOwogICAgICAgICRzZWxlY3RvcnMgICAgICAgPSBbXTsKICAgICAgICAkcGFyZW50U2VsZWN0b3JzID0gW1tdXTsKCiAgICAgICAgd2hpbGUgKCRlbnYgPSBhcnJheV9wb3AoJGVudnMpKSB7CiAgICAgICAgICAgIGlmIChlbXB0eSgkZW52LT5zZWxlY3RvcnMpKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNlbGVjdG9ycyA9IFtdOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGVudi0+c2VsZWN0b3JzIGFzICRzZWxlY3RvcikgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBhcmVudFNlbGVjdG9ycyBhcyAkcGFyZW50KSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGVjdG9yc1tdID0gJHRoaXMtPmpvaW5TZWxlY3RvcnMoJHBhcmVudCwgJHNlbGVjdG9yKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhcmVudFNlbGVjdG9ycyA9ICRzZWxlY3RvcnM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlbGVjdG9yczsKICAgIH0KCiAgICAvKioKICAgICAqIEpvaW4gc2VsZWN0b3JzOyBsb29rcyBmb3IgJiB0byByZXBsYWNlLCBvciBhcHBlbmQgcGFyZW50IGJlZm9yZSBjaGlsZAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyZW50CiAgICAgKiBAcGFyYW0gYXJyYXkgJGNoaWxkCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gam9pblNlbGVjdG9ycygkcGFyZW50LCAkY2hpbGQpCiAgICB7CiAgICAgICAgJHNldFNlbGYgPSBmYWxzZTsKICAgICAgICAkb3V0ID0gW107CgogICAgICAgIGZvcmVhY2ggKCRjaGlsZCBhcyAkcGFydCkgewogICAgICAgICAgICAkbmV3UGFydCA9IFtdOwoKICAgICAgICAgICAgZm9yZWFjaCAoJHBhcnQgYXMgJHApIHsKICAgICAgICAgICAgICAgIGlmICgkcCA9PT0gc2VsZjo6JHNlbGZTZWxlY3RvcikgewogICAgICAgICAgICAgICAgICAgICRzZXRTZWxmID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBhcmVudCBhcyAkaSA9PiAkcGFyZW50UGFydCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0W10gPSAkbmV3UGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdQYXJ0ID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJlbnRQYXJ0IGFzICRwcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1BhcnRbXSA9ICRwcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG5ld1BhcnRbXSA9ICRwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkb3V0W10gPSAkbmV3UGFydDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc2V0U2VsZiA/ICRvdXQgOiBhcnJheV9tZXJnZSgkcGFyZW50LCAkY2hpbGQpOwogICAgfQoKICAgIC8qKgogICAgICogTXVsdGlwbHkgbWVkaWEKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQ29tcGlsZXJcRW52aXJvbm1lbnQgJGVudgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGlsZFF1ZXJpZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBtdWx0aXBseU1lZGlhKEVudmlyb25tZW50ICRlbnYgPSBudWxsLCAkY2hpbGRRdWVyaWVzID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISBpc3NldCgkZW52KSB8fAogICAgICAgICAgICAhIGVtcHR5KCRlbnYtPmJsb2NrLT50eXBlKSAmJiAkZW52LT5ibG9jay0+dHlwZSAhPT0gVHlwZTo6VF9NRURJQQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gJGNoaWxkUXVlcmllczsKICAgICAgICB9CgogICAgICAgIC8vIHBsYWluIG9sZCBibG9jaywgc2tpcAogICAgICAgIGlmIChlbXB0eSgkZW52LT5ibG9jay0+dHlwZSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5tdWx0aXBseU1lZGlhKCRlbnYtPnBhcmVudCwgJGNoaWxkUXVlcmllcyk7CiAgICAgICAgfQoKICAgICAgICAkcGFyZW50UXVlcmllcyA9IGlzc2V0KCRlbnYtPmJsb2NrLT5xdWVyeUxpc3QpCiAgICAgICAgICAgID8gJGVudi0+YmxvY2stPnF1ZXJ5TGlzdAogICAgICAgICAgICA6IFtbW1R5cGU6OlRfTUVESUFfVkFMVUUsICRlbnYtPmJsb2NrLT52YWx1ZV1dXTsKCiAgICAgICAgaWYgKCRjaGlsZFF1ZXJpZXMgPT09IG51bGwpIHsKICAgICAgICAgICAgJGNoaWxkUXVlcmllcyA9ICRwYXJlbnRRdWVyaWVzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvcmlnaW5hbFF1ZXJpZXMgPSAkY2hpbGRRdWVyaWVzOwogICAgICAgICAgICAkY2hpbGRRdWVyaWVzID0gW107CgogICAgICAgICAgICBmb3JlYWNoICgkcGFyZW50UXVlcmllcyBhcyAkcGFyZW50UXVlcnkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRvcmlnaW5hbFF1ZXJpZXMgYXMgJGNoaWxkUXVlcnkpIHsKICAgICAgICAgICAgICAgICAgICAkY2hpbGRRdWVyaWVzIFtdPSBhcnJheV9tZXJnZSgkcGFyZW50UXVlcnksICRjaGlsZFF1ZXJ5KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5tdWx0aXBseU1lZGlhKCRlbnYtPnBhcmVudCwgJGNoaWxkUXVlcmllcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGVudiBsaW5rZWQgbGlzdCB0byBzdGFjawogICAgICoKICAgICAqIEBwYXJhbSBcTGVhZm9cU2Nzc1BocFxDb21waWxlclxFbnZpcm9ubWVudCAkZW52CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNvbXBhY3RFbnYoRW52aXJvbm1lbnQgJGVudikKICAgIHsKICAgICAgICBmb3IgKCRlbnZzID0gW107ICRlbnY7ICRlbnYgPSAkZW52LT5wYXJlbnQpIHsKICAgICAgICAgICAgJGVudnNbXSA9ICRlbnY7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVudnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGVudiBzdGFjayB0byBzaW5nbHkgbGlua2VkIGxpc3QKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGVudnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFxMZWFmb1xTY3NzUGhwXENvbXBpbGVyXEVudmlyb25tZW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZXh0cmFjdEVudigkZW52cykKICAgIHsKICAgICAgICBmb3IgKCRlbnYgPSBudWxsOyAkZSA9IGFycmF5X3BvcCgkZW52cyk7KSB7CiAgICAgICAgICAgICRlLT5wYXJlbnQgPSAkZW52OwogICAgICAgICAgICAkZW52ID0gJGU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVudjsKICAgIH0KCiAgICAvKioKICAgICAqIFB1c2ggZW52aXJvbm1lbnQKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQmxvY2sgJGJsb2NrCiAgICAgKgogICAgICogQHJldHVybiBcTGVhZm9cU2Nzc1BocFxDb21waWxlclxFbnZpcm9ubWVudAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcHVzaEVudihCbG9jayAkYmxvY2sgPSBudWxsKQogICAgewogICAgICAgICRlbnYgPSBuZXcgRW52aXJvbm1lbnQ7CiAgICAgICAgJGVudi0+cGFyZW50ID0gJHRoaXMtPmVudjsKICAgICAgICAkZW52LT5zdG9yZSAgPSBbXTsKICAgICAgICAkZW52LT5ibG9jayAgPSAkYmxvY2s7CiAgICAgICAgJGVudi0+ZGVwdGggID0gaXNzZXQoJHRoaXMtPmVudi0+ZGVwdGgpID8gJHRoaXMtPmVudi0+ZGVwdGggKyAxIDogMDsKCiAgICAgICAgJHRoaXMtPmVudiA9ICRlbnY7CgogICAgICAgIHJldHVybiAkZW52OwogICAgfQoKICAgIC8qKgogICAgICogUG9wIGVudmlyb25tZW50CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwb3BFbnYoKQogICAgewogICAgICAgICR0aGlzLT5lbnYgPSAkdGhpcy0+ZW52LT5wYXJlbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgc3RvcmUgZW52aXJvbm1lbnQKICAgICAqCiAgICAgKiBAcmV0dXJuIFxMZWFmb1xTY3NzUGhwXENvbXBpbGVyXEVudmlyb25tZW50CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTdG9yZUVudigpCiAgICB7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5zdG9yZUVudikgPyAkdGhpcy0+c3RvcmVFbnYgOiAkdGhpcy0+ZW52OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHZhcmlhYmxlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNoYWRvdwogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXENvbXBpbGVyXEVudmlyb25tZW50ICRlbnYKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNldCgkbmFtZSwgJHZhbHVlLCAkc2hhZG93ID0gZmFsc2UsIEVudmlyb25tZW50ICRlbnYgPSBudWxsKQogICAgewogICAgICAgICRuYW1lID0gJHRoaXMtPm5vcm1hbGl6ZU5hbWUoJG5hbWUpOwoKICAgICAgICBpZiAoISBpc3NldCgkZW52KSkgewogICAgICAgICAgICAkZW52ID0gJHRoaXMtPmdldFN0b3JlRW52KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNoYWRvdykgewogICAgICAgICAgICAkdGhpcy0+c2V0UmF3KCRuYW1lLCAkdmFsdWUsICRlbnYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRFeGlzdGluZygkbmFtZSwgJHZhbHVlLCAkZW52KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgZXhpc3RpbmcgdmFyaWFibGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUKICAgICAqIEBwYXJhbSBcTGVhZm9cU2Nzc1BocFxDb21waWxlclxFbnZpcm9ubWVudCAkZW52CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzZXRFeGlzdGluZygkbmFtZSwgJHZhbHVlLCBFbnZpcm9ubWVudCAkZW52KQogICAgewogICAgICAgICRzdG9yZUVudiA9ICRlbnY7CgogICAgICAgICRoYXNOYW1lc3BhY2UgPSAkbmFtZVswXSA9PT0gJ14nIHx8ICRuYW1lWzBdID09PSAnQCcgfHwgJG5hbWVbMF0gPT09ICclJzsKCiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJGVudi0+c3RvcmUpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEgJGhhc05hbWVzcGFjZSAmJiBpc3NldCgkZW52LT5tYXJrZXIpKSB7CiAgICAgICAgICAgICAgICAkZW52ID0gJHN0b3JlRW52OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghIGlzc2V0KCRlbnYtPnBhcmVudCkpIHsKICAgICAgICAgICAgICAgICRlbnYgPSAkc3RvcmVFbnY7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGVudiA9ICRlbnYtPnBhcmVudDsKICAgICAgICB9CgogICAgICAgICRlbnYtPnN0b3JlWyRuYW1lXSA9ICR2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCByYXcgdmFyaWFibGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUKICAgICAqIEBwYXJhbSBcTGVhZm9cU2Nzc1BocFxDb21waWxlclxFbnZpcm9ubWVudCAkZW52CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzZXRSYXcoJG5hbWUsICR2YWx1ZSwgRW52aXJvbm1lbnQgJGVudikKICAgIHsKICAgICAgICAkZW52LT5zdG9yZVskbmFtZV0gPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdmFyaWFibGUKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNob3VsZFRocm93CiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQ29tcGlsZXJcRW52aXJvbm1lbnQgJGVudgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkbmFtZSwgJHNob3VsZFRocm93ID0gdHJ1ZSwgRW52aXJvbm1lbnQgJGVudiA9IG51bGwpCiAgICB7CiAgICAgICAgJG5hbWUgPSAkdGhpcy0+bm9ybWFsaXplTmFtZSgkbmFtZSk7CgogICAgICAgIGlmICghIGlzc2V0KCRlbnYpKSB7CiAgICAgICAgICAgICRlbnYgPSAkdGhpcy0+Z2V0U3RvcmVFbnYoKTsKICAgICAgICB9CgogICAgICAgICRoYXNOYW1lc3BhY2UgPSAkbmFtZVswXSA9PT0gJ14nIHx8ICRuYW1lWzBdID09PSAnQCcgfHwgJG5hbWVbMF0gPT09ICclJzsKCiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJGVudi0+c3RvcmUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGVudi0+c3RvcmVbJG5hbWVdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISAkaGFzTmFtZXNwYWNlICYmIGlzc2V0KCRlbnYtPm1hcmtlcikpIHsKICAgICAgICAgICAgICAgICRlbnYgPSAkdGhpcy0+cm9vdEVudjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISBpc3NldCgkZW52LT5wYXJlbnQpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGVudiA9ICRlbnYtPnBhcmVudDsKICAgICAgICB9CgogICAgICAgIGlmICgkc2hvdWxkVGhyb3cpIHsKICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoIlVuZGVmaW5lZCB2YXJpYWJsZSBcJCRuYW1lIik7CiAgICAgICAgfQoKICAgICAgICAvLyBmb3VuZCBub3RoaW5nCiAgICB9CgogICAgLyoqCiAgICAgKiBIYXMgdmFyaWFibGU/CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQ29tcGlsZXJcRW52aXJvbm1lbnQgJGVudgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaGFzKCRuYW1lLCBFbnZpcm9ubWVudCAkZW52ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldCgkbmFtZSwgZmFsc2UsICRlbnYpICE9PSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogSW5qZWN0IHZhcmlhYmxlcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkYXJncwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5qZWN0VmFyaWFibGVzKGFycmF5ICRhcmdzKQogICAgewogICAgICAgIGlmIChlbXB0eSgkYXJncykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlciA9ICR0aGlzLT5wYXJzZXJGYWN0b3J5KF9fTUVUSE9EX18pOwoKICAgICAgICBmb3JlYWNoICgkYXJncyBhcyAkbmFtZSA9PiAkc3RyVmFsdWUpIHsKICAgICAgICAgICAgaWYgKCRuYW1lWzBdID09PSAnJCcpIHsKICAgICAgICAgICAgICAgICRuYW1lID0gc3Vic3RyKCRuYW1lLCAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEgJHBhcnNlci0+cGFyc2VWYWx1ZSgkc3RyVmFsdWUsICR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICR0aGlzLT5jb2VyY2VWYWx1ZSgkc3RyVmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2V0KCRuYW1lLCAkdmFsdWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCB2YXJpYWJsZXMKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YXJpYWJsZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFZhcmlhYmxlcyhhcnJheSAkdmFyaWFibGVzKQogICAgewogICAgICAgICR0aGlzLT5yZWdpc3RlcmVkVmFycyA9IGFycmF5X21lcmdlKCR0aGlzLT5yZWdpc3RlcmVkVmFycywgJHZhcmlhYmxlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBVbnNldCB2YXJpYWJsZQogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNldFZhcmlhYmxlKCRuYW1lKQogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5yZWdpc3RlcmVkVmFyc1skbmFtZV0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBsaXN0IG9mIHZhcmlhYmxlcwogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYXJpYWJsZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVnaXN0ZXJlZFZhcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHRvIGxpc3Qgb2YgcGFyc2VkIGZpbGVzCiAgICAgKgogICAgICogQGFwaQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFBhcnNlZEZpbGUoJHBhdGgpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRwYXRoKSAmJiBmaWxlX2V4aXN0cygkcGF0aCkpIHsKICAgICAgICAgICAgJHRoaXMtPnBhcnNlZEZpbGVzW3JlYWxwYXRoKCRwYXRoKV0gPSBmaWxlbXRpbWUoJHBhdGgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgbGlzdCBvZiBwYXJzZWQgZmlsZXMKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyc2VkRmlsZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VkRmlsZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgaW1wb3J0IHBhdGgKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkSW1wb3J0UGF0aCgkcGF0aCkKICAgIHsKICAgICAgICBpZiAoISBpbl9hcnJheSgkcGF0aCwgJHRoaXMtPmltcG9ydFBhdGhzKSkgewogICAgICAgICAgICAkdGhpcy0+aW1wb3J0UGF0aHNbXSA9ICRwYXRoOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCBpbXBvcnQgcGF0aHMKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkcGF0aAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1wb3J0UGF0aHMoJHBhdGgpCiAgICB7CiAgICAgICAgJHRoaXMtPmltcG9ydFBhdGhzID0gKGFycmF5KSAkcGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBudW1iZXIgcHJlY2lzaW9uCiAgICAgKgogICAgICogQGFwaQogICAgICoKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRudW1iZXJQcmVjaXNpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE51bWJlclByZWNpc2lvbigkbnVtYmVyUHJlY2lzaW9uKQogICAgewogICAgICAgIE5vZGVcTnVtYmVyOjokcHJlY2lzaW9uID0gJG51bWJlclByZWNpc2lvbjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBmb3JtYXR0ZXIKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZm9ybWF0dGVyTmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Rm9ybWF0dGVyKCRmb3JtYXR0ZXJOYW1lKQogICAgewogICAgICAgICR0aGlzLT5mb3JtYXR0ZXIgPSAkZm9ybWF0dGVyTmFtZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBsaW5lIG51bWJlciBzdHlsZQogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsaW5lTnVtYmVyU3R5bGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExpbmVOdW1iZXJTdHlsZSgkbGluZU51bWJlclN0eWxlKQogICAgewogICAgICAgICR0aGlzLT5saW5lTnVtYmVyU3R5bGUgPSAkbGluZU51bWJlclN0eWxlOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXIgZnVuY3Rpb24KICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICRuYW1lCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGZ1bmMKICAgICAqIEBwYXJhbSBhcnJheSAgICAkcHJvdG90eXBlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlckZ1bmN0aW9uKCRuYW1lLCAkZnVuYywgJHByb3RvdHlwZSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPnVzZXJGdW5jdGlvbnNbJHRoaXMtPm5vcm1hbGl6ZU5hbWUoJG5hbWUpXSA9IFskZnVuYywgJHByb3RvdHlwZV07CiAgICB9CgogICAgLyoqCiAgICAgKiBVbnJlZ2lzdGVyIGZ1bmN0aW9uCiAgICAgKgogICAgICogQGFwaQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVucmVnaXN0ZXJGdW5jdGlvbigkbmFtZSkKICAgIHsKICAgICAgICB1bnNldCgkdGhpcy0+dXNlckZ1bmN0aW9uc1skdGhpcy0+bm9ybWFsaXplTmFtZSgkbmFtZSldKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBmZWF0dXJlCiAgICAgKgogICAgICogQGFwaQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZEZlYXR1cmUoJG5hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyZWRGZWF0dXJlc1skbmFtZV0gPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogSW1wb3J0IGZpbGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvdXQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGltcG9ydEZpbGUoJHBhdGgsICRvdXQpCiAgICB7CiAgICAgICAgLy8gc2VlIGlmIHRyZWUgaXMgY2FjaGVkCiAgICAgICAgJHJlYWxQYXRoID0gcmVhbHBhdGgoJHBhdGgpOwoKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmltcG9ydENhY2hlWyRyZWFsUGF0aF0pKSB7CiAgICAgICAgICAgICR0aGlzLT5oYW5kbGVJbXBvcnRMb29wKCRyZWFsUGF0aCk7CgogICAgICAgICAgICAkdHJlZSA9ICR0aGlzLT5pbXBvcnRDYWNoZVskcmVhbFBhdGhdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjb2RlICAgPSBmaWxlX2dldF9jb250ZW50cygkcGF0aCk7CiAgICAgICAgICAgICRwYXJzZXIgPSAkdGhpcy0+cGFyc2VyRmFjdG9yeSgkcGF0aCk7CiAgICAgICAgICAgICR0cmVlICAgPSAkcGFyc2VyLT5wYXJzZSgkY29kZSk7CgogICAgICAgICAgICAkdGhpcy0+aW1wb3J0Q2FjaGVbJHJlYWxQYXRoXSA9ICR0cmVlOwogICAgICAgIH0KCiAgICAgICAgJHBpID0gcGF0aGluZm8oJHBhdGgpOwogICAgICAgIGFycmF5X3Vuc2hpZnQoJHRoaXMtPmltcG9ydFBhdGhzLCAkcGlbJ2Rpcm5hbWUnXSk7CiAgICAgICAgJHRoaXMtPmNvbXBpbGVDaGlsZHJlbk5vUmV0dXJuKCR0cmVlLT5jaGlsZHJlbiwgJG91dCk7CiAgICAgICAgYXJyYXlfc2hpZnQoJHRoaXMtPmltcG9ydFBhdGhzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgZmlsZSBwYXRoIGZvciBhbiBpbXBvcnQgdXJsIGlmIGl0IGV4aXN0cwogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kSW1wb3J0KCR1cmwpCiAgICB7CiAgICAgICAgJHVybHMgPSBbXTsKCiAgICAgICAgLy8gZm9yICJub3JtYWwiIHNjc3MgaW1wb3J0cyAoaWdub3JlIHZhbmlsbGEgY3NzIGFuZCBleHRlcm5hbCByZXF1ZXN0cykKICAgICAgICBpZiAoISBwcmVnX21hdGNoKCcvXC5jc3MkfF5odHRwcz86XC9cLy8nLCAkdXJsKSkgewogICAgICAgICAgICAvLyB0cnkgYm90aCBub3JtYWwgYW5kIHRoZSBfcGFydGlhbCBmaWxlbmFtZQogICAgICAgICAgICAkdXJscyA9IFskdXJsLCBwcmVnX3JlcGxhY2UoJy9bXlwvXSskLycsICdfXDAnLCAkdXJsKV07CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+aW1wb3J0UGF0aHMgYXMgJGRpcikgewogICAgICAgICAgICBpZiAoaXNfc3RyaW5nKCRkaXIpKSB7CiAgICAgICAgICAgICAgICAvLyBjaGVjayB1cmxzIGZvciBub3JtYWwgaW1wb3J0IHBhdGhzCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdXJscyBhcyAkZnVsbCkgewogICAgICAgICAgICAgICAgICAgICRmdWxsID0gJGRpcgogICAgICAgICAgICAgICAgICAgICAgICAuICghIGVtcHR5KCRkaXIpICYmIHN1YnN0cigkZGlyLCAtMSkgIT09ICcvJyA/ICcvJyA6ICcnKQogICAgICAgICAgICAgICAgICAgICAgICAuICRmdWxsOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmZpbGVFeGlzdHMoJGZpbGUgPSAkZnVsbCAuICcuc2NzcycpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWxlRXhpc3RzKCRmaWxlID0gJGZ1bGwpCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmIChpc19jYWxsYWJsZSgkZGlyKSkgewogICAgICAgICAgICAgICAgLy8gY2hlY2sgY3VzdG9tIGNhbGxiYWNrIGZvciBpbXBvcnQgcGF0aAogICAgICAgICAgICAgICAgJGZpbGUgPSBjYWxsX3VzZXJfZnVuYygkZGlyLCAkdXJsKTsKCiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IGVuY29kaW5nCiAgICAgKgogICAgICogQGFwaQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFbmNvZGluZygkZW5jb2RpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPmVuY29kaW5nID0gJGVuY29kaW5nOwogICAgfQoKICAgIC8qKgogICAgICogSWdub3JlIGVycm9ycz8KICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIGJvb2xlYW4gJGlnbm9yZUVycm9ycwogICAgICoKICAgICAqIEByZXR1cm4gXExlYWZvXFNjc3NQaHBcQ29tcGlsZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElnbm9yZUVycm9ycygkaWdub3JlRXJyb3JzKQogICAgewogICAgICAgICR0aGlzLT5pZ25vcmVFcnJvcnMgPSAkaWdub3JlRXJyb3JzOwogICAgfQoKICAgIC8qKgogICAgICogVGhyb3cgZXJyb3IgKGV4Y2VwdGlvbikKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbXNnIE1lc3NhZ2Ugd2l0aCBvcHRpb25hbCBzcHJpbnRmKCktc3R5bGUgdmFyYXJnIHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxMZWFmb1xTY3NzUGhwXEV4Y2VwdGlvblxDb21waWxlckV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhyb3dFcnJvcigkbXNnKQogICAgewogICAgICAgIGlmICgkdGhpcy0+aWdub3JlRXJyb3JzKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChmdW5jX251bV9hcmdzKCkgPiAxKSB7CiAgICAgICAgICAgICRtc2cgPSBjYWxsX3VzZXJfZnVuY19hcnJheSgnc3ByaW50ZicsIGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICAkbGluZSA9ICR0aGlzLT5zb3VyY2VMaW5lOwogICAgICAgICRtc2cgPSAiJG1zZzogbGluZTogJGxpbmUiOwoKICAgICAgICB0aHJvdyBuZXcgQ29tcGlsZXJFeGNlcHRpb24oJG1zZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBIYW5kbGUgaW1wb3J0IGxvb3AKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaGFuZGxlSW1wb3J0TG9vcCgkbmFtZSkKICAgIHsKICAgICAgICBmb3IgKCRlbnYgPSAkdGhpcy0+ZW52OyAkZW52OyAkZW52ID0gJGVudi0+cGFyZW50KSB7CiAgICAgICAgICAgICRmaWxlID0gJHRoaXMtPnNvdXJjZU5hbWVzWyRlbnYtPmJsb2NrLT5zb3VyY2VJbmRleF07CgogICAgICAgICAgICBpZiAocmVhbHBhdGgoJGZpbGUpID09PSAkbmFtZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoJ0FuIEBpbXBvcnQgbG9vcCBoYXMgYmVlbiBmb3VuZDogJXMgaW1wb3J0cyAlcycsICRmaWxlLCBiYXNlbmFtZSgkZmlsZSkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEb2VzIGZpbGUgZXhpc3Q/CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZmlsZUV4aXN0cygkbmFtZSkKICAgIHsKICAgICAgICByZXR1cm4gaXNfZmlsZSgkbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxsIFNDU1MgQGZ1bmN0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIGFycmF5ICAkYXJncwogICAgICogQHBhcmFtIGFycmF5ICAkcmV0dXJuVmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gUmV0dXJucyB0cnVlIGlmIHJldHVyblZhbHVlIGlzIHNldDsgb3RoZXJ3aXNlLCBmYWxzZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsbFNjc3NGdW5jdGlvbigkbmFtZSwgJGFyZ1ZhbHVlcywgJiRyZXR1cm5WYWx1ZSkKICAgIHsKICAgICAgICAkZnVuYyA9ICR0aGlzLT5nZXQoc2VsZjo6JG5hbWVzcGFjZXNbJ2Z1bmN0aW9uJ10gLiAkbmFtZSwgZmFsc2UpOwoKICAgICAgICBpZiAoISAkZnVuYykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cHVzaEVudigpOwoKICAgICAgICAvLyBzZXQgdGhlIGFyZ3MKICAgICAgICBpZiAoaXNzZXQoJGZ1bmMtPmFyZ3MpKSB7CiAgICAgICAgICAgICR0aGlzLT5hcHBseUFyZ3VtZW50cygkZnVuYy0+YXJncywgJGFyZ1ZhbHVlcyk7CiAgICAgICAgfQoKICAgICAgICAvLyB0aHJvdyBhd2F5IGxpbmVzIGFuZCBjaGlsZHJlbgogICAgICAgICR0bXAgPSBuZXcgT3V0cHV0QmxvY2s7CiAgICAgICAgJHRtcC0+bGluZXMgICAgPSBbXTsKICAgICAgICAkdG1wLT5jaGlsZHJlbiA9IFtdOwoKICAgICAgICAkdGhpcy0+ZW52LT5tYXJrZXIgPSAnZnVuY3Rpb24nOwoKICAgICAgICAkcmV0ID0gJHRoaXMtPmNvbXBpbGVDaGlsZHJlbigkZnVuYy0+Y2hpbGRyZW4sICR0bXApOwoKICAgICAgICAkdGhpcy0+cG9wRW52KCk7CgogICAgICAgICRyZXR1cm5WYWx1ZSA9ICEgaXNzZXQoJHJldCkgPyBzZWxmOjokZGVmYXVsdFZhbHVlIDogJHJldDsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxsIGJ1aWx0LWluIGFuZCByZWdpc3RlcmVkIChQSFApIGZ1bmN0aW9ucwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBhcnJheSAgJGFyZ3MKICAgICAqIEBwYXJhbSBhcnJheSAgJHJldHVyblZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuIFJldHVybnMgdHJ1ZSBpZiByZXR1cm5WYWx1ZSBpcyBzZXQ7IG90aGVyd2lzZSwgZmFsc2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGxOYXRpdmVGdW5jdGlvbigkbmFtZSwgJGFyZ3MsICYkcmV0dXJuVmFsdWUpCiAgICB7CiAgICAgICAgLy8gdHJ5IGEgbGliIGZ1bmN0aW9uCiAgICAgICAgJG5hbWUgPSAkdGhpcy0+bm9ybWFsaXplTmFtZSgkbmFtZSk7CgogICAgICAgIGlmIChpc3NldCgkdGhpcy0+dXNlckZ1bmN0aW9uc1skbmFtZV0pKSB7CiAgICAgICAgICAgIC8vIHNlZSBpZiB3ZSBjYW4gZmluZCBhIHVzZXIgZnVuY3Rpb24KICAgICAgICAgICAgbGlzdCgkZiwgJHByb3RvdHlwZSkgPSAkdGhpcy0+dXNlckZ1bmN0aW9uc1skbmFtZV07CiAgICAgICAgfSBlbHNlaWYgKCgkZiA9ICR0aGlzLT5nZXRCdWlsdGluRnVuY3Rpb24oJG5hbWUpKSAmJiBpc19jYWxsYWJsZSgkZikpIHsKICAgICAgICAgICAgJGxpYk5hbWUgICA9ICRmWzFdOwogICAgICAgICAgICAkcHJvdG90eXBlID0gaXNzZXQoc2VsZjo6JCRsaWJOYW1lKSA/IHNlbGY6OiQkbGliTmFtZSA6IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgbGlzdCgkc29ydGVkLCAka3dhcmdzKSA9ICR0aGlzLT5zb3J0QXJncygkcHJvdG90eXBlLCAkYXJncyk7CgogICAgICAgIGlmICgkbmFtZSAhPT0gJ2lmJyAmJiAkbmFtZSAhPT0gJ2NhbGwnKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzb3J0ZWQgYXMgJiR2YWwpIHsKICAgICAgICAgICAgICAgICR2YWwgPSAkdGhpcy0+cmVkdWNlKCR2YWwsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmV0dXJuVmFsdWUgPSBjYWxsX3VzZXJfZnVuYygkZiwgJHNvcnRlZCwgJGt3YXJncyk7CgogICAgICAgIGlmICghIGlzc2V0KCRyZXR1cm5WYWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHJldHVyblZhbHVlID0gJHRoaXMtPmNvZXJjZVZhbHVlKCRyZXR1cm5WYWx1ZSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGJ1aWx0LWluIGZ1bmN0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBOb3JtYWxpemVkIG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRCdWlsdGluRnVuY3Rpb24oJG5hbWUpCiAgICB7CiAgICAgICAgJGxpYk5hbWUgPSAnbGliJyAuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygKICAgICAgICAgICAgJy9fKC4pLycsCiAgICAgICAgICAgIGZ1bmN0aW9uICgkbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHVjZmlyc3QoJG1bMV0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICB1Y2ZpcnN0KCRuYW1lKQogICAgICAgICk7CgogICAgICAgIHJldHVybiBbJHRoaXMsICRsaWJOYW1lXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNvcnRzIGtleXdvcmQgYXJndW1lbnRzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwcm90b3R5cGUKICAgICAqIEBwYXJhbSBhcnJheSAkYXJncwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNvcnRBcmdzKCRwcm90b3R5cGUsICRhcmdzKQogICAgewogICAgICAgICRrZXlBcmdzID0gW107CiAgICAgICAgJHBvc0FyZ3MgPSBbXTsKCiAgICAgICAgLy8gc2VwYXJhdGUgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMKICAgICAgICBmb3JlYWNoICgkYXJncyBhcyAkYXJnKSB7CiAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9ICRhcmc7CgogICAgICAgICAgICAka2V5ID0gJGtleVsxXTsKCiAgICAgICAgICAgIGlmIChlbXB0eSgka2V5KSkgewogICAgICAgICAgICAgICAgJHBvc0FyZ3NbXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRrZXlBcmdzWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoISBpc3NldCgkcHJvdG90eXBlKSkgewogICAgICAgICAgICByZXR1cm4gWyRwb3NBcmdzLCAka2V5QXJnc107CiAgICAgICAgfQoKICAgICAgICAvLyBjb3B5IHBvc2l0aW9uYWwgYXJncwogICAgICAgICRmaW5hbEFyZ3MgPSBhcnJheV9wYWQoJHBvc0FyZ3MsIGNvdW50KCRwcm90b3R5cGUpLCBudWxsKTsKCiAgICAgICAgLy8gb3ZlcndyaXRlIHBvc2l0aW9uYWwgYXJncyB3aXRoIGtleXdvcmQgYXJncwogICAgICAgIGZvcmVhY2ggKCRwcm90b3R5cGUgYXMgJGkgPT4gJG5hbWVzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKChhcnJheSkgJG5hbWVzIGFzICRuYW1lKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGtleUFyZ3NbJG5hbWVdKSkgewogICAgICAgICAgICAgICAgICAgICRmaW5hbEFyZ3NbJGldID0gJGtleUFyZ3NbJG5hbWVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRmaW5hbEFyZ3MsICRrZXlBcmdzXTsKICAgIH0KCiAgICAvKioKICAgICAqIEFwcGx5IGFyZ3VtZW50IHZhbHVlcyBwZXIgZGVmaW5pdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkYXJnRGVmCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ1ZhbHVlcwogICAgICoKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwbHlBcmd1bWVudHMoJGFyZ0RlZiwgJGFyZ1ZhbHVlcykKICAgIHsKICAgICAgICAkc3RvcmVFbnYgPSAkdGhpcy0+Z2V0U3RvcmVFbnYoKTsKCiAgICAgICAgJGVudiA9IG5ldyBFbnZpcm9ubWVudDsKICAgICAgICAkZW52LT5zdG9yZSA9ICRzdG9yZUVudi0+c3RvcmU7CgogICAgICAgICRoYXNWYXJpYWJsZSA9IGZhbHNlOwogICAgICAgICRhcmdzID0gW107CgogICAgICAgIGZvcmVhY2ggKCRhcmdEZWYgYXMgJGkgPT4gJGFyZykgewogICAgICAgICAgICBsaXN0KCRuYW1lLCAkZGVmYXVsdCwgJGlzVmFyaWFibGUpID0gJGFyZ0RlZlskaV07CgogICAgICAgICAgICAkYXJnc1skbmFtZV0gPSBbJGksICRuYW1lLCAkZGVmYXVsdCwgJGlzVmFyaWFibGVdOwogICAgICAgICAgICAkaGFzVmFyaWFibGUgfD0gJGlzVmFyaWFibGU7CiAgICAgICAgfQoKICAgICAgICAka2V5d29yZEFyZ3MgPSBbXTsKICAgICAgICAkZGVmZXJyZWRLZXl3b3JkQXJncyA9IFtdOwogICAgICAgICRyZW1haW5pbmcgPSBbXTsKCiAgICAgICAgLy8gYXNzaWduIHRoZSBrZXl3b3JkIGFyZ3MKICAgICAgICBmb3JlYWNoICgoYXJyYXkpICRhcmdWYWx1ZXMgYXMgJGFyZykgewogICAgICAgICAgICBpZiAoISBlbXB0eSgkYXJnWzBdKSkgewogICAgICAgICAgICAgICAgaWYgKCEgaXNzZXQoJGFyZ3NbJGFyZ1swXVsxXV0pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXNWYXJpYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZGVmZXJyZWRLZXl3b3JkQXJnc1skYXJnWzBdWzFdXSA9ICRhcmdbMV07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoIk1peGluIG9yIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSBhbiBhcmd1bWVudCBuYW1lZCAkJXMuIiwgJGFyZ1swXVsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkYXJnc1skYXJnWzBdWzFdXVswXSA8IGNvdW50KCRyZW1haW5pbmcpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoIlRoZSBhcmd1bWVudCAkJXMgd2FzIHBhc3NlZCBib3RoIGJ5IHBvc2l0aW9uIGFuZCBieSBuYW1lLiIsICRhcmdbMF1bMV0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAka2V5d29yZEFyZ3NbJGFyZ1swXVsxXV0gPSAkYXJnWzFdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoY291bnQoJGtleXdvcmRBcmdzKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoJ1Bvc2l0aW9uYWwgYXJndW1lbnRzIG11c3QgY29tZSBiZWZvcmUga2V5d29yZCBhcmd1bWVudHMuJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlaWYgKCRhcmdbMl0gPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICR2YWwgPSAkdGhpcy0+cmVkdWNlKCRhcmdbMV0sIHRydWUpOwoKICAgICAgICAgICAgICAgIGlmICgkdmFsWzBdID09PSBUeXBlOjpUX0xJU1QpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdmFsWzJdIGFzICRuYW1lID0+ICRpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIGlzX251bWVyaWMoJG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAka2V5d29yZEFyZ3NbJG5hbWVdID0gJGl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVtYWluaW5nW10gPSAkaXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdmFsWzBdID09PSBUeXBlOjpUX01BUCkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWxbMV0gYXMgJGkgPT4gJG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHRoaXMtPmNvZXJjZVN0cmluZygkbmFtZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAkaXRlbSA9ICR2YWxbMl1bJGldOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgaXNfbnVtZXJpYygkbmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrZXl3b3JkQXJnc1skbmFtZV0gPSAkaXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZW1haW5pbmdbXSA9ICRpdGVtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcmVtYWluaW5nW10gPSAkdmFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlbWFpbmluZ1tdID0gJGFyZ1sxXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJGFyZ3MgYXMgJGFyZykgewogICAgICAgICAgICBsaXN0KCRpLCAkbmFtZSwgJGRlZmF1bHQsICRpc1ZhcmlhYmxlKSA9ICRhcmc7CgogICAgICAgICAgICBpZiAoJGlzVmFyaWFibGUpIHsKICAgICAgICAgICAgICAgICR2YWwgPSBbVHlwZTo6VF9MSVNULCAnLCcsIFtdLCAkaXNWYXJpYWJsZV07CgogICAgICAgICAgICAgICAgZm9yICgkY291bnQgPSBjb3VudCgkcmVtYWluaW5nKTsgJGkgPCAkY291bnQ7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICAkdmFsWzJdW10gPSAkcmVtYWluaW5nWyRpXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZGVmZXJyZWRLZXl3b3JkQXJncyBhcyAkaXRlbU5hbWUgPT4gJGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAkdmFsWzJdWyRpdGVtTmFtZV0gPSAkaXRlbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRyZW1haW5pbmdbJGldKSkgewogICAgICAgICAgICAgICAgJHZhbCA9ICRyZW1haW5pbmdbJGldOwogICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGtleXdvcmRBcmdzWyRuYW1lXSkpIHsKICAgICAgICAgICAgICAgICR2YWwgPSAka2V5d29yZEFyZ3NbJG5hbWVdOwogICAgICAgICAgICB9IGVsc2VpZiAoISBlbXB0eSgkZGVmYXVsdCkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoIk1pc3NpbmcgYXJndW1lbnQgJG5hbWUiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2V0KCRuYW1lLCAkdGhpcy0+cmVkdWNlKCR2YWwsIHRydWUpLCB0cnVlLCAkZW52KTsKICAgICAgICB9CgogICAgICAgICRzdG9yZUVudi0+c3RvcmUgPSAkZW52LT5zdG9yZTsKCiAgICAgICAgZm9yZWFjaCAoJGFyZ3MgYXMgJGFyZykgewogICAgICAgICAgICBsaXN0KCRpLCAkbmFtZSwgJGRlZmF1bHQsICRpc1ZhcmlhYmxlKSA9ICRhcmc7CgogICAgICAgICAgICBpZiAoJGlzVmFyaWFibGUgfHwgaXNzZXQoJHJlbWFpbmluZ1skaV0pIHx8IGlzc2V0KCRrZXl3b3JkQXJnc1skbmFtZV0pIHx8IGVtcHR5KCRkZWZhdWx0KSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZXQoJG5hbWUsICR0aGlzLT5yZWR1Y2UoJGRlZmF1bHQsIHRydWUpLCB0cnVlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb2VyY2UgYSBwaHAgdmFsdWUgaW50byBhIHNjc3Mgb25lCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb2VyY2VWYWx1ZSgkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkgfHwgJHZhbHVlIGluc3RhbmNlb2YgXEFycmF5QWNjZXNzKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfYm9vbCgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dG9Cb29sKCR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHNlbGY6OiRudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzX251bWVyaWMoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKCR2YWx1ZSwgJycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRlbXB0eVN0cmluZzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9LRVlXT1JELCAkdmFsdWVdOwogICAgfQoKICAgIC8qKgogICAgICogQ29lcmNlIHNvbWV0aGluZyB0byBtYXAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGl0ZW0KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb2VyY2VNYXAoJGl0ZW0pCiAgICB7CiAgICAgICAgaWYgKCRpdGVtWzBdID09PSBUeXBlOjpUX01BUCkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW07CiAgICAgICAgfQoKICAgICAgICBpZiAoJGl0ZW0gPT09IHNlbGY6OiRlbXB0eUxpc3QpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRlbXB0eU1hcDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9NQVAsIFskaXRlbV0sIFtzZWxmOjokbnVsbF1dOwogICAgfQoKICAgIC8qKgogICAgICogQ29lcmNlIHNvbWV0aGluZyB0byBsaXN0CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpdGVtCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29lcmNlTGlzdCgkaXRlbSwgJGRlbGltID0gJywnKQogICAgewogICAgICAgIGlmIChpc3NldCgkaXRlbSkgJiYgJGl0ZW1bMF0gPT09IFR5cGU6OlRfTElTVCkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW07CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGl0ZW0pICYmICRpdGVtWzBdID09PSBUeXBlOjpUX01BUCkgewogICAgICAgICAgICAka2V5cyA9ICRpdGVtWzFdOwogICAgICAgICAgICAkdmFsdWVzID0gJGl0ZW1bMl07CiAgICAgICAgICAgICRsaXN0ID0gW107CgogICAgICAgICAgICBmb3IgKCRpID0gMCwgJHMgPSBjb3VudCgka2V5cyk7ICRpIDwgJHM7ICRpKyspIHsKICAgICAgICAgICAgICAgICRrZXkgPSAka2V5c1skaV07CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkdmFsdWVzWyRpXTsKCiAgICAgICAgICAgICAgICAkbGlzdFtdID0gWwogICAgICAgICAgICAgICAgICAgIFR5cGU6OlRfTElTVCwKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICBbW1R5cGU6OlRfS0VZV09SRCwgJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCR0aGlzLT5jb2VyY2VTdHJpbmcoJGtleSkpXSwgJHZhbHVlXQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIFtUeXBlOjpUX0xJU1QsICcsJywgJGxpc3RdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFtUeXBlOjpUX0xJU1QsICRkZWxpbSwgISBpc3NldCgkaXRlbSkgPyBbXTogWyRpdGVtXV07CiAgICB9CgogICAgLyoqCiAgICAgKiBDb2VyY2UgY29sb3IgZm9yIGV4cHJlc3Npb24KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb2VyY2VGb3JFeHByZXNzaW9uKCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJGNvbG9yID0gJHRoaXMtPmNvZXJjZUNvbG9yKCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRjb2xvcjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb2VyY2UgdmFsdWUgdG8gY29sb3IKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb2VyY2VDb2xvcigkdmFsdWUpCiAgICB7CiAgICAgICAgc3dpdGNoICgkdmFsdWVbMF0pIHsKICAgICAgICAgICAgY2FzZSBUeXBlOjpUX0NPTE9SOgogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKCiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9LRVlXT1JEOgogICAgICAgICAgICAgICAgJG5hbWUgPSBzdHJ0b2xvd2VyKCR2YWx1ZVsxXSk7CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KENvbG9yczo6JGNzc0NvbG9yc1skbmFtZV0pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJnYmEgPSBleHBsb2RlKCcsJywgQ29sb3JzOjokY3NzQ29sb3JzWyRuYW1lXSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBpc3NldCgkcmdiYVszXSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBbVHlwZTo6VF9DT0xPUiwgKGludCkgJHJnYmFbMF0sIChpbnQpICRyZ2JhWzFdLCAoaW50KSAkcmdiYVsyXSwgKGludCkgJHJnYmFbM11dCiAgICAgICAgICAgICAgICAgICAgICAgIDogW1R5cGU6OlRfQ09MT1IsIChpbnQpICRyZ2JhWzBdLCAoaW50KSAkcmdiYVsxXSwgKGludCkgJHJnYmFbMl1dOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb2VyY2UgdmFsdWUgdG8gc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29lcmNlU3RyaW5nKCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJHZhbHVlWzBdID09PSBUeXBlOjpUX1NUUklORykgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFtUeXBlOjpUX1NUUklORywgJycsIFskdGhpcy0+Y29tcGlsZVZhbHVlKCR2YWx1ZSldXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvZXJjZSB2YWx1ZSB0byBhIHBlcmNlbnRhZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBpbnRlZ2VyfGZsb2F0CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb2VyY2VQZXJjZW50KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJHZhbHVlWzBdID09PSBUeXBlOjpUX05VTUJFUikgewogICAgICAgICAgICBpZiAoISBlbXB0eSgkdmFsdWVbMl1bJyUnXSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWVbMV0gLyAxMDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkdmFsdWVbMV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB2YWx1ZSBpcyBhIG1hcAogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICoKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzZXJ0TWFwKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Y29lcmNlTWFwKCR2YWx1ZSk7CgogICAgICAgIGlmICgkdmFsdWVbMF0gIT09IFR5cGU6OlRfTUFQKSB7CiAgICAgICAgICAgICR0aGlzLT50aHJvd0Vycm9yKCdleHBlY3RpbmcgbWFwJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHZhbHVlIGlzIGEgbGlzdAogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICoKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzZXJ0TGlzdCgkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZVswXSAhPT0gVHlwZTo6VF9MSVNUKSB7CiAgICAgICAgICAgICR0aGlzLT50aHJvd0Vycm9yKCdleHBlY3RpbmcgbGlzdCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB2YWx1ZSBpcyBhIGNvbG9yCiAgICAgKgogICAgICogQGFwaQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NlcnRDb2xvcigkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCRjb2xvciA9ICR0aGlzLT5jb2VyY2VDb2xvcigkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkY29sb3I7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dGhyb3dFcnJvcignZXhwZWN0aW5nIGNvbG9yJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdmFsdWUgaXMgYSBudW1iZXIKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gaW50ZWdlcnxmbG9hdAogICAgICoKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzZXJ0TnVtYmVyKCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJHZhbHVlWzBdICE9PSBUeXBlOjpUX05VTUJFUikgewogICAgICAgICAgICAkdGhpcy0+dGhyb3dFcnJvcignZXhwZWN0aW5nIG51bWJlcicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YWx1ZVsxXTsKICAgIH0KCiAgICAvKioKICAgICAqIE1ha2Ugc3VyZSBhIGNvbG9yJ3MgY29tcG9uZW50cyBkb24ndCBnbyBvdXQgb2YgYm91bmRzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZml4Q29sb3IoJGMpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWzEsIDIsIDNdIGFzICRpKSB7CiAgICAgICAgICAgIGlmICgkY1skaV0gPCAwKSB7CiAgICAgICAgICAgICAgICAkY1skaV0gPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGNbJGldID4gMjU1KSB7CiAgICAgICAgICAgICAgICAkY1skaV0gPSAyNTU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkYzsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgUkdCIHRvIEhTTAogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkcmVkCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkZ3JlZW4KICAgICAqIEBwYXJhbSBpbnRlZ2VyICRibHVlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9IU0woJHJlZCwgJGdyZWVuLCAkYmx1ZSkKICAgIHsKICAgICAgICAkbWluID0gbWluKCRyZWQsICRncmVlbiwgJGJsdWUpOwogICAgICAgICRtYXggPSBtYXgoJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CgogICAgICAgICRsID0gJG1pbiArICRtYXg7CiAgICAgICAgJGQgPSAkbWF4IC0gJG1pbjsKCiAgICAgICAgaWYgKChpbnQpICRkID09PSAwKSB7CiAgICAgICAgICAgICRoID0gJHMgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkbCA8IDI1NSkgewogICAgICAgICAgICAgICAgJHMgPSAkZCAvICRsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHMgPSAkZCAvICg1MTAgLSAkbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkcmVkID09ICRtYXgpIHsKICAgICAgICAgICAgICAgICRoID0gNjAgKiAoJGdyZWVuIC0gJGJsdWUpIC8gJGQ7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZ3JlZW4gPT0gJG1heCkgewogICAgICAgICAgICAgICAgJGggPSA2MCAqICgkYmx1ZSAtICRyZWQpIC8gJGQgKyAxMjA7CiAgICAgICAgICAgIH0gZWxzZWlmICgkYmx1ZSA9PSAkbWF4KSB7CiAgICAgICAgICAgICAgICAkaCA9IDYwICogKCRyZWQgLSAkZ3JlZW4pIC8gJGQgKyAyNDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9IU0wsIGZtb2QoJGgsIDM2MCksICRzICogMTAwLCAkbCAvIDUuMV07CiAgICB9CgogICAgLyoqCiAgICAgKiBIdWUgdG8gUkdCIGhlbHBlcgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkbTEKICAgICAqIEBwYXJhbSBmbG9hdCAkbTIKICAgICAqIEBwYXJhbSBmbG9hdCAkaAogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBodWVUb1JHQigkbTEsICRtMiwgJGgpCiAgICB7CiAgICAgICAgaWYgKCRoIDwgMCkgewogICAgICAgICAgICAkaCArPSAxOwogICAgICAgIH0gZWxzZWlmICgkaCA+IDEpIHsKICAgICAgICAgICAgJGggLT0gMTsKICAgICAgICB9CgogICAgICAgIGlmICgkaCAqIDYgPCAxKSB7CiAgICAgICAgICAgIHJldHVybiAkbTEgKyAoJG0yIC0gJG0xKSAqICRoICogNjsKICAgICAgICB9CgogICAgICAgIGlmICgkaCAqIDIgPCAxKSB7CiAgICAgICAgICAgIHJldHVybiAkbTI7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGggKiAzIDwgMikgewogICAgICAgICAgICByZXR1cm4gJG0xICsgKCRtMiAtICRtMSkgKiAoMi8zIC0gJGgpICogNjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbTE7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IEhTTCB0byBSR0IKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIGludGVnZXIgJGh1ZSAgICAgICAgSCBmcm9tIDAgdG8gMzYwCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkc2F0dXJhdGlvbiBTIGZyb20gMCB0byAxMDAKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRsaWdodG5lc3MgIEwgZnJvbSAwIHRvIDEwMAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvUkdCKCRodWUsICRzYXR1cmF0aW9uLCAkbGlnaHRuZXNzKQogICAgewogICAgICAgIGlmICgkaHVlIDwgMCkgewogICAgICAgICAgICAkaHVlICs9IDM2MDsKICAgICAgICB9CgogICAgICAgICRoID0gJGh1ZSAvIDM2MDsKICAgICAgICAkcyA9IG1pbigxMDAsIG1heCgwLCAkc2F0dXJhdGlvbikpIC8gMTAwOwogICAgICAgICRsID0gbWluKDEwMCwgbWF4KDAsICRsaWdodG5lc3MpKSAvIDEwMDsKCiAgICAgICAgJG0yID0gJGwgPD0gMC41ID8gJGwgKiAoJHMgKyAxKSA6ICRsICsgJHMgLSAkbCAqICRzOwogICAgICAgICRtMSA9ICRsICogMiAtICRtMjsKCiAgICAgICAgJHIgPSAkdGhpcy0+aHVlVG9SR0IoJG0xLCAkbTIsICRoICsgMS8zKSAqIDI1NTsKICAgICAgICAkZyA9ICR0aGlzLT5odWVUb1JHQigkbTEsICRtMiwgJGgpICogMjU1OwogICAgICAgICRiID0gJHRoaXMtPmh1ZVRvUkdCKCRtMSwgJG0yLCAkaCAtIDEvMykgKiAyNTU7CgogICAgICAgICRvdXQgPSBbVHlwZTo6VF9DT0xPUiwgJHIsICRnLCAkYl07CgogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8vIEJ1aWx0IGluIGZ1bmN0aW9ucwoKICAgIC8vcHJvdGVjdGVkIHN0YXRpYyAkbGliQ2FsbCA9IFsnbmFtZScsICdhcmdzLi4uJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliQ2FsbCgkYXJncywgJGt3YXJncykKICAgIHsKICAgICAgICAkbmFtZSA9ICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkdGhpcy0+Y29lcmNlU3RyaW5nKCR0aGlzLT5yZWR1Y2UoYXJyYXlfc2hpZnQoJGFyZ3MpLCB0cnVlKSkpOwoKICAgICAgICAkYXJncyA9IGFycmF5X21hcCgKICAgICAgICAgICAgZnVuY3Rpb24gKCRhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gW251bGwsICRhLCBmYWxzZV07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICRhcmdzCiAgICAgICAgKTsKCiAgICAgICAgaWYgKGNvdW50KCRrd2FyZ3MpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRrd2FyZ3MgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICRhcmdzW10gPSBbW1R5cGU6OlRfVkFSSUFCTEUsICRrZXldLCAkdmFsdWUsIGZhbHNlXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5yZWR1Y2UoW1R5cGU6OlRfRlVOQ1RJT05fQ0FMTCwgJG5hbWUsICRhcmdzXSk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliSWYgPSBbJ2NvbmRpdGlvbicsICdpZi10cnVlJywgJ2lmLWZhbHNlJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliSWYoJGFyZ3MpCiAgICB7CiAgICAgICAgbGlzdCgkY29uZCwgJHQsICRmKSA9ICRhcmdzOwoKICAgICAgICBpZiAoISAkdGhpcy0+aXNUcnV0aHkoJHRoaXMtPnJlZHVjZSgkY29uZCwgdHJ1ZSkpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVkdWNlKCRmLCB0cnVlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+cmVkdWNlKCR0LCB0cnVlKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJJbmRleCA9IFsnbGlzdCcsICd2YWx1ZSddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYkluZGV4KCRhcmdzKQogICAgewogICAgICAgIGxpc3QoJGxpc3QsICR2YWx1ZSkgPSAkYXJnczsKCiAgICAgICAgaWYgKCR2YWx1ZVswXSA9PT0gVHlwZTo6VF9NQVApIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRsaXN0WzBdID09PSBUeXBlOjpUX01BUCB8fAogICAgICAgICAgICAkbGlzdFswXSA9PT0gVHlwZTo6VF9TVFJJTkcgfHwKICAgICAgICAgICAgJGxpc3RbMF0gPT09IFR5cGU6OlRfS0VZV09SRCB8fAogICAgICAgICAgICAkbGlzdFswXSA9PT0gVHlwZTo6VF9JTlRFUlBPTEFURQogICAgICAgICkgewogICAgICAgICAgICAkbGlzdCA9ICR0aGlzLT5jb2VyY2VMaXN0KCRsaXN0LCAnICcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRsaXN0WzBdICE9PSBUeXBlOjpUX0xJU1QpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRudWxsOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlcyA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkbGlzdFsyXSBhcyAkaXRlbSkgewogICAgICAgICAgICAkdmFsdWVzW10gPSAkdGhpcy0+bm9ybWFsaXplVmFsdWUoJGl0ZW0pOwogICAgICAgIH0KCiAgICAgICAgJGtleSA9IGFycmF5X3NlYXJjaCgkdGhpcy0+bm9ybWFsaXplVmFsdWUoJHZhbHVlKSwgJHZhbHVlcyk7CgogICAgICAgIHJldHVybiBmYWxzZSA9PT0gJGtleSA/IHNlbGY6OiRudWxsIDogJGtleSArIDE7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliUmdiID0gWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZSddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlJnYigkYXJncykKICAgIHsKICAgICAgICBsaXN0KCRyLCAkZywgJGIpID0gJGFyZ3M7CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9DT0xPUiwgJHJbMV0sICRnWzFdLCAkYlsxXV07CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliUmdiYSA9IFsKICAgICAgICBbJ3JlZCcsICdjb2xvciddLAogICAgICAgICdncmVlbicsICdibHVlJywgJ2FscGhhJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliUmdiYSgkYXJncykKICAgIHsKICAgICAgICBpZiAoJGNvbG9yID0gJHRoaXMtPmNvZXJjZUNvbG9yKCRhcmdzWzBdKSkgewogICAgICAgICAgICAkbnVtID0gISBpc3NldCgkYXJnc1sxXSkgPyAkYXJnc1szXSA6ICRhcmdzWzFdOwogICAgICAgICAgICAkYWxwaGEgPSAkdGhpcy0+YXNzZXJ0TnVtYmVyKCRudW0pOwogICAgICAgICAgICAkY29sb3JbNF0gPSAkYWxwaGE7CgogICAgICAgICAgICByZXR1cm4gJGNvbG9yOwogICAgICAgIH0KCiAgICAgICAgbGlzdCgkciwgJGcsICRiLCAkYSkgPSAkYXJnczsKCiAgICAgICAgcmV0dXJuIFtUeXBlOjpUX0NPTE9SLCAkclsxXSwgJGdbMV0sICRiWzFdLCAkYVsxXV07CiAgICB9CgogICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBhZGp1c3RfY29sb3IsIGNoYW5nZV9jb2xvciwgYW5kIHNjYWxlX2NvbG9yCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWx0ZXJDb2xvcigkYXJncywgJGZuKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5hc3NlcnRDb2xvcigkYXJnc1swXSk7CgogICAgICAgIGZvcmVhY2ggKFsxLCAyLCAzLCA3XSBhcyAkaSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZ3NbJGldKSkgewogICAgICAgICAgICAgICAgJHZhbCA9ICR0aGlzLT5hc3NlcnROdW1iZXIoJGFyZ3NbJGldKTsKICAgICAgICAgICAgICAgICRpaSA9ICRpID09PSA3ID8gNCA6ICRpOyAvLyBhbHBoYQogICAgICAgICAgICAgICAgJGNvbG9yWyRpaV0gPSBjYWxsX3VzZXJfZnVuYygkZm4sIGlzc2V0KCRjb2xvclskaWldKSA/ICRjb2xvclskaWldIDogMCwgJHZhbCwgJGkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGFyZ3NbNF0pIHx8IGlzc2V0KCRhcmdzWzVdKSB8fCBpc3NldCgkYXJnc1s2XSkpIHsKICAgICAgICAgICAgJGhzbCA9ICR0aGlzLT50b0hTTCgkY29sb3JbMV0sICRjb2xvclsyXSwgJGNvbG9yWzNdKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKFs0LCA1LCA2XSBhcyAkaSkgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmdzWyRpXSkpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsID0gJHRoaXMtPmFzc2VydE51bWJlcigkYXJnc1skaV0pOwogICAgICAgICAgICAgICAgICAgICRoc2xbJGkgLSAzXSA9IGNhbGxfdXNlcl9mdW5jKCRmbiwgJGhzbFskaSAtIDNdLCAkdmFsLCAkaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZ2IgPSAkdGhpcy0+dG9SR0IoJGhzbFsxXSwgJGhzbFsyXSwgJGhzbFszXSk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJGNvbG9yWzRdKSkgewogICAgICAgICAgICAgICAgJHJnYls0XSA9ICRjb2xvcls0XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGNvbG9yID0gJHJnYjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29sb3I7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliQWRqdXN0Q29sb3IgPSBbCiAgICAgICAgJ2NvbG9yJywgJ3JlZCcsICdncmVlbicsICdibHVlJywKICAgICAgICAnaHVlJywgJ3NhdHVyYXRpb24nLCAnbGlnaHRuZXNzJywgJ2FscGhhJwogICAgXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJBZGp1c3RDb2xvcigkYXJncykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFsdGVyQ29sb3IoJGFyZ3MsIGZ1bmN0aW9uICgkYmFzZSwgJGFsdGVyLCAkaSkgewogICAgICAgICAgICByZXR1cm4gJGJhc2UgKyAkYWx0ZXI7CiAgICAgICAgfSk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliQ2hhbmdlQ29sb3IgPSBbCiAgICAgICAgJ2NvbG9yJywgJ3JlZCcsICdncmVlbicsICdibHVlJywKICAgICAgICAnaHVlJywgJ3NhdHVyYXRpb24nLCAnbGlnaHRuZXNzJywgJ2FscGhhJwogICAgXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJDaGFuZ2VDb2xvcigkYXJncykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFsdGVyQ29sb3IoJGFyZ3MsIGZ1bmN0aW9uICgkYmFzZSwgJGFsdGVyLCAkaSkgewogICAgICAgICAgICByZXR1cm4gJGFsdGVyOwogICAgICAgIH0pOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYlNjYWxlQ29sb3IgPSBbCiAgICAgICAgJ2NvbG9yJywgJ3JlZCcsICdncmVlbicsICdibHVlJywKICAgICAgICAnaHVlJywgJ3NhdHVyYXRpb24nLCAnbGlnaHRuZXNzJywgJ2FscGhhJwogICAgXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJTY2FsZUNvbG9yKCRhcmdzKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWx0ZXJDb2xvcigkYXJncywgZnVuY3Rpb24gKCRiYXNlLCAkc2NhbGUsICRpKSB7CiAgICAgICAgICAgIC8vIDEsIDIsIDMgLSByZ2IKICAgICAgICAgICAgLy8gNCwgNSwgNiAtIGhzbAogICAgICAgICAgICAvLyA3IC0gYQogICAgICAgICAgICBzd2l0Y2ggKCRpKSB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgJG1heCA9IDI1NTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgJG1heCA9IDM2MDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgICAgICAgICAgJG1heCA9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAkbWF4ID0gMTAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkc2NhbGUgPSAkc2NhbGUgLyAxMDA7CgogICAgICAgICAgICBpZiAoJHNjYWxlIDwgMCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRiYXNlICogJHNjYWxlICsgJGJhc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAoJG1heCAtICRiYXNlKSAqICRzY2FsZSArICRiYXNlOwogICAgICAgIH0pOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkllSGV4U3RyID0gWydjb2xvciddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYkllSGV4U3RyKCRhcmdzKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5jb2VyY2VDb2xvcigkYXJnc1swXSk7CiAgICAgICAgJGNvbG9yWzRdID0gaXNzZXQoJGNvbG9yWzRdKSA/IHJvdW5kKDI1NSAqICRjb2xvcls0XSkgOiAyNTU7CgogICAgICAgIHJldHVybiBzcHJpbnRmKCcjJTAyWCUwMlglMDJYJTAyWCcsICRjb2xvcls0XSwgJGNvbG9yWzFdLCAkY29sb3JbMl0sICRjb2xvclszXSk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliUmVkID0gWydjb2xvciddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlJlZCgkYXJncykKICAgIHsKICAgICAgICAkY29sb3IgPSAkdGhpcy0+Y29lcmNlQ29sb3IoJGFyZ3NbMF0pOwoKICAgICAgICByZXR1cm4gJGNvbG9yWzFdOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkdyZWVuID0gWydjb2xvciddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYkdyZWVuKCRhcmdzKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5jb2VyY2VDb2xvcigkYXJnc1swXSk7CgogICAgICAgIHJldHVybiAkY29sb3JbMl07CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliQmx1ZSA9IFsnY29sb3InXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJCbHVlKCRhcmdzKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5jb2VyY2VDb2xvcigkYXJnc1swXSk7CgogICAgICAgIHJldHVybiAkY29sb3JbM107CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliQWxwaGEgPSBbJ2NvbG9yJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliQWxwaGEoJGFyZ3MpCiAgICB7CiAgICAgICAgaWYgKCRjb2xvciA9ICR0aGlzLT5jb2VyY2VDb2xvcigkYXJnc1swXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRjb2xvcls0XSkgPyAkY29sb3JbNF0gOiAxOwogICAgICAgIH0KCiAgICAgICAgLy8gdGhpcyBtaWdodCBiZSB0aGUgSUUgZnVuY3Rpb24sIHNvIHJldHVybiB2YWx1ZSB1bmNoYW5nZWQKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJPcGFjaXR5ID0gWydjb2xvciddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYk9wYWNpdHkoJGFyZ3MpCiAgICB7CiAgICAgICAgJHZhbHVlID0gJGFyZ3NbMF07CgogICAgICAgIGlmICgkdmFsdWVbMF0gPT09IFR5cGU6OlRfTlVNQkVSKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5saWJBbHBoYSgkYXJncyk7CiAgICB9CgogICAgLy8gbWl4IHR3byBjb2xvcnMKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYk1peCA9IFsnY29sb3ItMScsICdjb2xvci0yJywgJ3dlaWdodCddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYk1peCgkYXJncykKICAgIHsKICAgICAgICBsaXN0KCRmaXJzdCwgJHNlY29uZCwgJHdlaWdodCkgPSAkYXJnczsKCiAgICAgICAgJGZpcnN0ID0gJHRoaXMtPmFzc2VydENvbG9yKCRmaXJzdCk7CiAgICAgICAgJHNlY29uZCA9ICR0aGlzLT5hc3NlcnRDb2xvcigkc2Vjb25kKTsKCiAgICAgICAgaWYgKCEgaXNzZXQoJHdlaWdodCkpIHsKICAgICAgICAgICAgJHdlaWdodCA9IDAuNTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkd2VpZ2h0ID0gJHRoaXMtPmNvZXJjZVBlcmNlbnQoJHdlaWdodCk7CiAgICAgICAgfQoKICAgICAgICAkZmlyc3RBbHBoYSA9IGlzc2V0KCRmaXJzdFs0XSkgPyAkZmlyc3RbNF0gOiAxOwogICAgICAgICRzZWNvbmRBbHBoYSA9IGlzc2V0KCRzZWNvbmRbNF0pID8gJHNlY29uZFs0XSA6IDE7CgogICAgICAgICR3ID0gJHdlaWdodCAqIDIgLSAxOwogICAgICAgICRhID0gJGZpcnN0QWxwaGEgLSAkc2Vjb25kQWxwaGE7CgogICAgICAgICR3MSA9ICgoJHcgKiAkYSA9PT0gLTEgPyAkdyA6ICgkdyArICRhKSAvICgxICsgJHcgKiAkYSkpICsgMSkgLyAyLjA7CiAgICAgICAgJHcyID0gMS4wIC0gJHcxOwoKICAgICAgICAkbmV3ID0gW1R5cGU6OlRfQ09MT1IsCiAgICAgICAgICAgICR3MSAqICRmaXJzdFsxXSArICR3MiAqICRzZWNvbmRbMV0sCiAgICAgICAgICAgICR3MSAqICRmaXJzdFsyXSArICR3MiAqICRzZWNvbmRbMl0sCiAgICAgICAgICAgICR3MSAqICRmaXJzdFszXSArICR3MiAqICRzZWNvbmRbM10sCiAgICAgICAgXTsKCiAgICAgICAgaWYgKCRmaXJzdEFscGhhICE9IDEuMCB8fCAkc2Vjb25kQWxwaGEgIT0gMS4wKSB7CiAgICAgICAgICAgICRuZXdbXSA9ICRmaXJzdEFscGhhICogJHdlaWdodCArICRzZWNvbmRBbHBoYSAqICgkd2VpZ2h0IC0gMSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmZpeENvbG9yKCRuZXcpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkhzbCA9IFsnaHVlJywgJ3NhdHVyYXRpb24nLCAnbGlnaHRuZXNzJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliSHNsKCRhcmdzKQogICAgewogICAgICAgIGxpc3QoJGgsICRzLCAkbCkgPSAkYXJnczsKCiAgICAgICAgcmV0dXJuICR0aGlzLT50b1JHQigkaFsxXSwgJHNbMV0sICRsWzFdKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJIc2xhID0gWydodWUnLCAnc2F0dXJhdGlvbicsICdsaWdodG5lc3MnLCAnYWxwaGEnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJIc2xhKCRhcmdzKQogICAgewogICAgICAgIGxpc3QoJGgsICRzLCAkbCwgJGEpID0gJGFyZ3M7CgogICAgICAgICRjb2xvciA9ICR0aGlzLT50b1JHQigkaFsxXSwgJHNbMV0sICRsWzFdKTsKICAgICAgICAkY29sb3JbNF0gPSAkYVsxXTsKCiAgICAgICAgcmV0dXJuICRjb2xvcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJIdWUgPSBbJ2NvbG9yJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliSHVlKCRhcmdzKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5hc3NlcnRDb2xvcigkYXJnc1swXSk7CiAgICAgICAgJGhzbCA9ICR0aGlzLT50b0hTTCgkY29sb3JbMV0sICRjb2xvclsyXSwgJGNvbG9yWzNdKTsKCiAgICAgICAgcmV0dXJuIG5ldyBOb2RlXE51bWJlcigkaHNsWzFdLCAnZGVnJyk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliU2F0dXJhdGlvbiA9IFsnY29sb3InXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJTYXR1cmF0aW9uKCRhcmdzKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5hc3NlcnRDb2xvcigkYXJnc1swXSk7CiAgICAgICAgJGhzbCA9ICR0aGlzLT50b0hTTCgkY29sb3JbMV0sICRjb2xvclsyXSwgJGNvbG9yWzNdKTsKCiAgICAgICAgcmV0dXJuIG5ldyBOb2RlXE51bWJlcigkaHNsWzJdLCAnJScpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkxpZ2h0bmVzcyA9IFsnY29sb3InXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJMaWdodG5lc3MoJGFyZ3MpCiAgICB7CiAgICAgICAgJGNvbG9yID0gJHRoaXMtPmFzc2VydENvbG9yKCRhcmdzWzBdKTsKICAgICAgICAkaHNsID0gJHRoaXMtPnRvSFNMKCRjb2xvclsxXSwgJGNvbG9yWzJdLCAkY29sb3JbM10pOwoKICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKCRoc2xbM10sICclJyk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFkanVzdEhzbCgkY29sb3IsICRpZHgsICRhbW91bnQpCiAgICB7CiAgICAgICAgJGhzbCA9ICR0aGlzLT50b0hTTCgkY29sb3JbMV0sICRjb2xvclsyXSwgJGNvbG9yWzNdKTsKICAgICAgICAkaHNsWyRpZHhdICs9ICRhbW91bnQ7CiAgICAgICAgJG91dCA9ICR0aGlzLT50b1JHQigkaHNsWzFdLCAkaHNsWzJdLCAkaHNsWzNdKTsKCiAgICAgICAgaWYgKGlzc2V0KCRjb2xvcls0XSkpIHsKICAgICAgICAgICAgJG91dFs0XSA9ICRjb2xvcls0XTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkFkanVzdEh1ZSA9IFsnY29sb3InLCAnZGVncmVlcyddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYkFkanVzdEh1ZSgkYXJncykKICAgIHsKICAgICAgICAkY29sb3IgPSAkdGhpcy0+YXNzZXJ0Q29sb3IoJGFyZ3NbMF0pOwogICAgICAgICRkZWdyZWVzID0gJHRoaXMtPmFzc2VydE51bWJlcigkYXJnc1sxXSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+YWRqdXN0SHNsKCRjb2xvciwgMSwgJGRlZ3JlZXMpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkxpZ2h0ZW4gPSBbJ2NvbG9yJywgJ2Ftb3VudCddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYkxpZ2h0ZW4oJGFyZ3MpCiAgICB7CiAgICAgICAgJGNvbG9yID0gJHRoaXMtPmFzc2VydENvbG9yKCRhcmdzWzBdKTsKICAgICAgICAkYW1vdW50ID0gVXRpbDo6Y2hlY2tSYW5nZSgnYW1vdW50JywgbmV3IFJhbmdlKDAsIDEwMCksICRhcmdzWzFdLCAnJScpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmFkanVzdEhzbCgkY29sb3IsIDMsICRhbW91bnQpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkRhcmtlbiA9IFsnY29sb3InLCAnYW1vdW50J107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliRGFya2VuKCRhcmdzKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5hc3NlcnRDb2xvcigkYXJnc1swXSk7CiAgICAgICAgJGFtb3VudCA9IFV0aWw6OmNoZWNrUmFuZ2UoJ2Ftb3VudCcsIG5ldyBSYW5nZSgwLCAxMDApLCAkYXJnc1sxXSwgJyUnKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGp1c3RIc2woJGNvbG9yLCAzLCAtJGFtb3VudCk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliU2F0dXJhdGUgPSBbJ2NvbG9yJywgJ2Ftb3VudCddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlNhdHVyYXRlKCRhcmdzKQogICAgewogICAgICAgICR2YWx1ZSA9ICRhcmdzWzBdOwoKICAgICAgICBpZiAoJHZhbHVlWzBdID09PSBUeXBlOjpUX05VTUJFUikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRjb2xvciA9ICR0aGlzLT5hc3NlcnRDb2xvcigkdmFsdWUpOwogICAgICAgICRhbW91bnQgPSAxMDAgKiAkdGhpcy0+Y29lcmNlUGVyY2VudCgkYXJnc1sxXSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+YWRqdXN0SHNsKCRjb2xvciwgMiwgJGFtb3VudCk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliRGVzYXR1cmF0ZSA9IFsnY29sb3InLCAnYW1vdW50J107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliRGVzYXR1cmF0ZSgkYXJncykKICAgIHsKICAgICAgICAkY29sb3IgPSAkdGhpcy0+YXNzZXJ0Q29sb3IoJGFyZ3NbMF0pOwogICAgICAgICRhbW91bnQgPSAxMDAgKiAkdGhpcy0+Y29lcmNlUGVyY2VudCgkYXJnc1sxXSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+YWRqdXN0SHNsKCRjb2xvciwgMiwgLSRhbW91bnQpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkdyYXlzY2FsZSA9IFsnY29sb3InXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJHcmF5c2NhbGUoJGFyZ3MpCiAgICB7CiAgICAgICAgJHZhbHVlID0gJGFyZ3NbMF07CgogICAgICAgIGlmICgkdmFsdWVbMF0gPT09IFR5cGU6OlRfTlVNQkVSKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGp1c3RIc2woJHRoaXMtPmFzc2VydENvbG9yKCR2YWx1ZSksIDIsIC0xMDApOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkNvbXBsZW1lbnQgPSBbJ2NvbG9yJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliQ29tcGxlbWVudCgkYXJncykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFkanVzdEhzbCgkdGhpcy0+YXNzZXJ0Q29sb3IoJGFyZ3NbMF0pLCAxLCAxODApOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkludmVydCA9IFsnY29sb3InXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJJbnZlcnQoJGFyZ3MpCiAgICB7CiAgICAgICAgJHZhbHVlID0gJGFyZ3NbMF07CgogICAgICAgIGlmICgkdmFsdWVbMF0gPT09IFR5cGU6OlRfTlVNQkVSKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJGNvbG9yID0gJHRoaXMtPmFzc2VydENvbG9yKCR2YWx1ZSk7CiAgICAgICAgJGNvbG9yWzFdID0gMjU1IC0gJGNvbG9yWzFdOwogICAgICAgICRjb2xvclsyXSA9IDI1NSAtICRjb2xvclsyXTsKICAgICAgICAkY29sb3JbM10gPSAyNTUgLSAkY29sb3JbM107CgogICAgICAgIHJldHVybiAkY29sb3I7CiAgICB9CgogICAgLy8gaW5jcmVhc2VzIG9wYWNpdHkgYnkgYW1vdW50CiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJPcGFjaWZ5ID0gWydjb2xvcicsICdhbW91bnQnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJPcGFjaWZ5KCRhcmdzKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5hc3NlcnRDb2xvcigkYXJnc1swXSk7CiAgICAgICAgJGFtb3VudCA9ICR0aGlzLT5jb2VyY2VQZXJjZW50KCRhcmdzWzFdKTsKCiAgICAgICAgJGNvbG9yWzRdID0gKGlzc2V0KCRjb2xvcls0XSkgPyAkY29sb3JbNF0gOiAxKSArICRhbW91bnQ7CiAgICAgICAgJGNvbG9yWzRdID0gbWluKDEsIG1heCgwLCAkY29sb3JbNF0pKTsKCiAgICAgICAgcmV0dXJuICRjb2xvcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJGYWRlSW4gPSBbJ2NvbG9yJywgJ2Ftb3VudCddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYkZhZGVJbigkYXJncykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxpYk9wYWNpZnkoJGFyZ3MpOwogICAgfQoKICAgIC8vIGRlY3JlYXNlcyBvcGFjaXR5IGJ5IGFtb3VudAogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliVHJhbnNwYXJlbnRpemUgPSBbJ2NvbG9yJywgJ2Ftb3VudCddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlRyYW5zcGFyZW50aXplKCRhcmdzKQogICAgewogICAgICAgICRjb2xvciA9ICR0aGlzLT5hc3NlcnRDb2xvcigkYXJnc1swXSk7CiAgICAgICAgJGFtb3VudCA9ICR0aGlzLT5jb2VyY2VQZXJjZW50KCRhcmdzWzFdKTsKCiAgICAgICAgJGNvbG9yWzRdID0gKGlzc2V0KCRjb2xvcls0XSkgPyAkY29sb3JbNF0gOiAxKSAtICRhbW91bnQ7CiAgICAgICAgJGNvbG9yWzRdID0gbWluKDEsIG1heCgwLCAkY29sb3JbNF0pKTsKCiAgICAgICAgcmV0dXJuICRjb2xvcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJGYWRlT3V0ID0gWydjb2xvcicsICdhbW91bnQnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJGYWRlT3V0KCRhcmdzKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGliVHJhbnNwYXJlbnRpemUoJGFyZ3MpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYlVucXVvdGUgPSBbJ3N0cmluZyddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlVucXVvdGUoJGFyZ3MpCiAgICB7CiAgICAgICAgJHN0ciA9ICRhcmdzWzBdOwoKICAgICAgICBpZiAoJHN0clswXSA9PT0gVHlwZTo6VF9TVFJJTkcpIHsKICAgICAgICAgICAgJHN0clsxXSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdHI7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliUXVvdGUgPSBbJ3N0cmluZyddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlF1b3RlKCRhcmdzKQogICAgewogICAgICAgICR2YWx1ZSA9ICRhcmdzWzBdOwoKICAgICAgICBpZiAoJHZhbHVlWzBdID09PSBUeXBlOjpUX1NUUklORyAmJiAhIGVtcHR5KCR2YWx1ZVsxXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9TVFJJTkcsICciJywgWyR2YWx1ZV1dOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYlBlcmNlbnRhZ2UgPSBbJ3ZhbHVlJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliUGVyY2VudGFnZSgkYXJncykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKCR0aGlzLT5jb2VyY2VQZXJjZW50KCRhcmdzWzBdKSAqIDEwMCwgJyUnKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJSb3VuZCA9IFsndmFsdWUnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJSb3VuZCgkYXJncykKICAgIHsKICAgICAgICAkbnVtID0gJGFyZ3NbMF07CiAgICAgICAgJG51bVsxXSA9IHJvdW5kKCRudW1bMV0pOwoKICAgICAgICByZXR1cm4gJG51bTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJGbG9vciA9IFsndmFsdWUnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJGbG9vcigkYXJncykKICAgIHsKICAgICAgICAkbnVtID0gJGFyZ3NbMF07CiAgICAgICAgJG51bVsxXSA9IGZsb29yKCRudW1bMV0pOwoKICAgICAgICByZXR1cm4gJG51bTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJDZWlsID0gWyd2YWx1ZSddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYkNlaWwoJGFyZ3MpCiAgICB7CiAgICAgICAgJG51bSA9ICRhcmdzWzBdOwogICAgICAgICRudW1bMV0gPSBjZWlsKCRudW1bMV0pOwoKICAgICAgICByZXR1cm4gJG51bTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJBYnMgPSBbJ3ZhbHVlJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliQWJzKCRhcmdzKQogICAgewogICAgICAgICRudW0gPSAkYXJnc1swXTsKICAgICAgICAkbnVtWzFdID0gYWJzKCRudW1bMV0pOwoKICAgICAgICByZXR1cm4gJG51bTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliTWluKCRhcmdzKQogICAgewogICAgICAgICRudW1iZXJzID0gJHRoaXMtPmdldE5vcm1hbGl6ZWROdW1iZXJzKCRhcmdzKTsKICAgICAgICAkbWluID0gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAoJG51bWJlcnMgYXMgJGtleSA9PiAkbnVtYmVyKSB7CiAgICAgICAgICAgIGlmIChudWxsID09PSAkbWluIHx8ICRudW1iZXJbMV0gPD0gJG1pblsxXSkgewogICAgICAgICAgICAgICAgJG1pbiA9IFska2V5LCAkbnVtYmVyWzFdXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhcmdzWyRtaW5bMF1dOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJNYXgoJGFyZ3MpCiAgICB7CiAgICAgICAgJG51bWJlcnMgPSAkdGhpcy0+Z2V0Tm9ybWFsaXplZE51bWJlcnMoJGFyZ3MpOwogICAgICAgICRtYXggPSBudWxsOwoKICAgICAgICBmb3JlYWNoICgkbnVtYmVycyBhcyAka2V5ID0+ICRudW1iZXIpIHsKICAgICAgICAgICAgaWYgKG51bGwgPT09ICRtYXggfHwgJG51bWJlclsxXSA+PSAkbWF4WzFdKSB7CiAgICAgICAgICAgICAgICAkbWF4ID0gWyRrZXksICRudW1iZXJbMV1dOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFyZ3NbJG1heFswXV07CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgdG8gbm9ybWFsaXplIGFyZ3MgY29udGFpbmluZyBudW1iZXJzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRhcmdzCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZE51bWJlcnMoJGFyZ3MpCiAgICB7CiAgICAgICAgJHVuaXQgPSBudWxsOwogICAgICAgICRvcmlnaW5hbFVuaXQgPSBudWxsOwogICAgICAgICRudW1iZXJzID0gW107CgogICAgICAgIGZvcmVhY2ggKCRhcmdzIGFzICRrZXkgPT4gJGl0ZW0pIHsKICAgICAgICAgICAgaWYgKCRpdGVtWzBdICE9PSBUeXBlOjpUX05VTUJFUikgewogICAgICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoJyVzIGlzIG5vdCBhIG51bWJlcicsICRpdGVtWzBdKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbnVtYmVyID0gJGl0ZW0tPm5vcm1hbGl6ZSgpOwoKICAgICAgICAgICAgaWYgKG51bGwgPT09ICR1bml0KSB7CiAgICAgICAgICAgICAgICAkdW5pdCA9ICRudW1iZXJbMl07CiAgICAgICAgICAgICAgICAkb3JpZ2luYWxVbml0ID0gJGl0ZW0tPnVuaXRTdHIoKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCR1bml0ICE9PSAkbnVtYmVyWzJdKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+dGhyb3dFcnJvcignSW5jb21wYXRpYmxlIHVuaXRzOiAiJXMiIGFuZCAiJXMiLicsICRvcmlnaW5hbFVuaXQsICRpdGVtLT51bml0U3RyKCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRudW1iZXJzWyRrZXldID0gJG51bWJlcjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbnVtYmVyczsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJMZW5ndGggPSBbJ2xpc3QnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJMZW5ndGgoJGFyZ3MpCiAgICB7CiAgICAgICAgJGxpc3QgPSAkdGhpcy0+Y29lcmNlTGlzdCgkYXJnc1swXSk7CgogICAgICAgIHJldHVybiBjb3VudCgkbGlzdFsyXSk7CiAgICB9CgogICAgLy9wcm90ZWN0ZWQgc3RhdGljICRsaWJMaXN0U2VwYXJhdG9yID0gWydsaXN0Li4uJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliTGlzdFNlcGFyYXRvcigkYXJncykKICAgIHsKICAgICAgICBpZiAoY291bnQoJGFyZ3MpID4gMSkgewogICAgICAgICAgICByZXR1cm4gJ2NvbW1hJzsKICAgICAgICB9CgogICAgICAgICRsaXN0ID0gJHRoaXMtPmNvZXJjZUxpc3QoJGFyZ3NbMF0pOwoKICAgICAgICBpZiAoY291bnQoJGxpc3RbMl0pIDw9IDEpIHsKICAgICAgICAgICAgcmV0dXJuICdzcGFjZSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGxpc3RbMV0gPT09ICcsJykgewogICAgICAgICAgICByZXR1cm4gJ2NvbW1hJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnc3BhY2UnOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYk50aCA9IFsnbGlzdCcsICduJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliTnRoKCRhcmdzKQogICAgewogICAgICAgICRsaXN0ID0gJHRoaXMtPmNvZXJjZUxpc3QoJGFyZ3NbMF0pOwogICAgICAgICRuID0gJHRoaXMtPmFzc2VydE51bWJlcigkYXJnc1sxXSk7CgogICAgICAgIGlmICgkbiA+IDApIHsKICAgICAgICAgICAgJG4tLTsKICAgICAgICB9IGVsc2VpZiAoJG4gPCAwKSB7CiAgICAgICAgICAgICRuICs9IGNvdW50KCRsaXN0WzJdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpc3NldCgkbGlzdFsyXVskbl0pID8gJGxpc3RbMl1bJG5dIDogc2VsZjo6JGRlZmF1bHRWYWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJTZXROdGggPSBbJ2xpc3QnLCAnbicsICd2YWx1ZSddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlNldE50aCgkYXJncykKICAgIHsKICAgICAgICAkbGlzdCA9ICR0aGlzLT5jb2VyY2VMaXN0KCRhcmdzWzBdKTsKICAgICAgICAkbiA9ICR0aGlzLT5hc3NlcnROdW1iZXIoJGFyZ3NbMV0pOwoKICAgICAgICBpZiAoJG4gPiAwKSB7CiAgICAgICAgICAgICRuLS07CiAgICAgICAgfSBlbHNlaWYgKCRuIDwgMCkgewogICAgICAgICAgICAkbiArPSBjb3VudCgkbGlzdFsyXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISBpc3NldCgkbGlzdFsyXVskbl0pKSB7CiAgICAgICAgICAgICR0aGlzLT50aHJvd0Vycm9yKCdJbnZhbGlkIGFyZ3VtZW50IGZvciAibiInKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRsaXN0WzJdWyRuXSA9ICRhcmdzWzJdOwoKICAgICAgICByZXR1cm4gJGxpc3Q7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliTWFwR2V0ID0gWydtYXAnLCAna2V5J107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliTWFwR2V0KCRhcmdzKQogICAgewogICAgICAgICRtYXAgPSAkdGhpcy0+YXNzZXJ0TWFwKCRhcmdzWzBdKTsKICAgICAgICAka2V5ID0gJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCR0aGlzLT5jb2VyY2VTdHJpbmcoJGFyZ3NbMV0pKTsKCiAgICAgICAgZm9yICgkaSA9IGNvdW50KCRtYXBbMV0pIC0gMTsgJGkgPj0gMDsgJGktLSkgewogICAgICAgICAgICBpZiAoJGtleSA9PT0gJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCR0aGlzLT5jb2VyY2VTdHJpbmcoJG1hcFsxXVskaV0pKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRtYXBbMl1bJGldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JG51bGw7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliTWFwS2V5cyA9IFsnbWFwJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliTWFwS2V5cygkYXJncykKICAgIHsKICAgICAgICAkbWFwID0gJHRoaXMtPmFzc2VydE1hcCgkYXJnc1swXSk7CiAgICAgICAgJGtleXMgPSAkbWFwWzFdOwoKICAgICAgICByZXR1cm4gW1R5cGU6OlRfTElTVCwgJywnLCAka2V5c107CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliTWFwVmFsdWVzID0gWydtYXAnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJNYXBWYWx1ZXMoJGFyZ3MpCiAgICB7CiAgICAgICAgJG1hcCA9ICR0aGlzLT5hc3NlcnRNYXAoJGFyZ3NbMF0pOwogICAgICAgICR2YWx1ZXMgPSAkbWFwWzJdOwoKICAgICAgICByZXR1cm4gW1R5cGU6OlRfTElTVCwgJywnLCAkdmFsdWVzXTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJNYXBSZW1vdmUgPSBbJ21hcCcsICdrZXknXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJNYXBSZW1vdmUoJGFyZ3MpCiAgICB7CiAgICAgICAgJG1hcCA9ICR0aGlzLT5hc3NlcnRNYXAoJGFyZ3NbMF0pOwogICAgICAgICRrZXkgPSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHRoaXMtPmNvZXJjZVN0cmluZygkYXJnc1sxXSkpOwoKICAgICAgICBmb3IgKCRpID0gY291bnQoJG1hcFsxXSkgLSAxOyAkaSA+PSAwOyAkaS0tKSB7CiAgICAgICAgICAgIGlmICgka2V5ID09PSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHRoaXMtPmNvZXJjZVN0cmluZygkbWFwWzFdWyRpXSkpKSB7CiAgICAgICAgICAgICAgICBhcnJheV9zcGxpY2UoJG1hcFsxXSwgJGksIDEpOwogICAgICAgICAgICAgICAgYXJyYXlfc3BsaWNlKCRtYXBbMl0sICRpLCAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRtYXA7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliTWFwSGFzS2V5ID0gWydtYXAnLCAna2V5J107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliTWFwSGFzS2V5KCRhcmdzKQogICAgewogICAgICAgICRtYXAgPSAkdGhpcy0+YXNzZXJ0TWFwKCRhcmdzWzBdKTsKICAgICAgICAka2V5ID0gJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCR0aGlzLT5jb2VyY2VTdHJpbmcoJGFyZ3NbMV0pKTsKCiAgICAgICAgZm9yICgkaSA9IGNvdW50KCRtYXBbMV0pIC0gMTsgJGkgPj0gMDsgJGktLSkgewogICAgICAgICAgICBpZiAoJGtleSA9PT0gJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCR0aGlzLT5jb2VyY2VTdHJpbmcoJG1hcFsxXVskaV0pKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJNYXBNZXJnZSA9IFsnbWFwLTEnLCAnbWFwLTInXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJNYXBNZXJnZSgkYXJncykKICAgIHsKICAgICAgICAkbWFwMSA9ICR0aGlzLT5hc3NlcnRNYXAoJGFyZ3NbMF0pOwogICAgICAgICRtYXAyID0gJHRoaXMtPmFzc2VydE1hcCgkYXJnc1sxXSk7CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9NQVAsIGFycmF5X21lcmdlKCRtYXAxWzFdLCAkbWFwMlsxXSksIGFycmF5X21lcmdlKCRtYXAxWzJdLCAkbWFwMlsyXSldOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYktleXdvcmRzID0gWydhcmdzJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliS2V5d29yZHMoJGFyZ3MpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydExpc3QoJGFyZ3NbMF0pOwoKICAgICAgICAka2V5cyA9IFtdOwogICAgICAgICR2YWx1ZXMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGFyZ3NbMF1bMl0gYXMgJG5hbWUgPT4gJGFyZykgewogICAgICAgICAgICAka2V5c1tdID0gW1R5cGU6OlRfS0VZV09SRCwgJG5hbWVdOwogICAgICAgICAgICAkdmFsdWVzW10gPSAkYXJnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFtUeXBlOjpUX01BUCwgJGtleXMsICR2YWx1ZXNdOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaXN0U2VwYXJhdG9yRm9ySm9pbigkbGlzdDEsICRzZXApCiAgICB7CiAgICAgICAgaWYgKCEgaXNzZXQoJHNlcCkpIHsKICAgICAgICAgICAgcmV0dXJuICRsaXN0MVsxXTsKICAgICAgICB9CgogICAgICAgIHN3aXRjaCAoJHRoaXMtPmNvbXBpbGVWYWx1ZSgkc2VwKSkgewogICAgICAgICAgICBjYXNlICdjb21tYSc6CiAgICAgICAgICAgICAgICByZXR1cm4gJywnOwoKICAgICAgICAgICAgY2FzZSAnc3BhY2UnOgogICAgICAgICAgICAgICAgcmV0dXJuICcnOwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiAkbGlzdDFbMV07CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkpvaW4gPSBbJ2xpc3QxJywgJ2xpc3QyJywgJ3NlcGFyYXRvciddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYkpvaW4oJGFyZ3MpCiAgICB7CiAgICAgICAgbGlzdCgkbGlzdDEsICRsaXN0MiwgJHNlcCkgPSAkYXJnczsKCiAgICAgICAgJGxpc3QxID0gJHRoaXMtPmNvZXJjZUxpc3QoJGxpc3QxLCAnICcpOwogICAgICAgICRsaXN0MiA9ICR0aGlzLT5jb2VyY2VMaXN0KCRsaXN0MiwgJyAnKTsKICAgICAgICAkc2VwID0gJHRoaXMtPmxpc3RTZXBhcmF0b3JGb3JKb2luKCRsaXN0MSwgJHNlcCk7CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9MSVNULCAkc2VwLCBhcnJheV9tZXJnZSgkbGlzdDFbMl0sICRsaXN0MlsyXSldOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkFwcGVuZCA9IFsnbGlzdCcsICd2YWwnLCAnc2VwYXJhdG9yJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliQXBwZW5kKCRhcmdzKQogICAgewogICAgICAgIGxpc3QoJGxpc3QxLCAkdmFsdWUsICRzZXApID0gJGFyZ3M7CgogICAgICAgICRsaXN0MSA9ICR0aGlzLT5jb2VyY2VMaXN0KCRsaXN0MSwgJyAnKTsKICAgICAgICAkc2VwID0gJHRoaXMtPmxpc3RTZXBhcmF0b3JGb3JKb2luKCRsaXN0MSwgJHNlcCk7CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9MSVNULCAkc2VwLCBhcnJheV9tZXJnZSgkbGlzdDFbMl0sIFskdmFsdWVdKV07CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlppcCgkYXJncykKICAgIHsKICAgICAgICBmb3JlYWNoICgkYXJncyBhcyAkYXJnKSB7CiAgICAgICAgICAgICR0aGlzLT5hc3NlcnRMaXN0KCRhcmcpOwogICAgICAgIH0KCiAgICAgICAgJGxpc3RzID0gW107CiAgICAgICAgJGZpcnN0TGlzdCA9IGFycmF5X3NoaWZ0KCRhcmdzKTsKCiAgICAgICAgZm9yZWFjaCAoJGZpcnN0TGlzdFsyXSBhcyAka2V5ID0+ICRpdGVtKSB7CiAgICAgICAgICAgICRsaXN0ID0gW1R5cGU6OlRfTElTVCwgJycsIFskaXRlbV1dOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGFyZ3MgYXMgJGFyZykgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmdbMl1bJGtleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpc3RbMl1bXSA9ICRhcmdbMl1bJGtleV07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGJyZWFrIDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRsaXN0c1tdID0gJGxpc3Q7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW1R5cGU6OlRfTElTVCwgJywnLCAkbGlzdHNdOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYlR5cGVPZiA9IFsndmFsdWUnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJUeXBlT2YoJGFyZ3MpCiAgICB7CiAgICAgICAgJHZhbHVlID0gJGFyZ3NbMF07CgogICAgICAgIHN3aXRjaCAoJHZhbHVlWzBdKSB7CiAgICAgICAgICAgIGNhc2UgVHlwZTo6VF9LRVlXT1JEOgogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZSA9PT0gc2VsZjo6JHRydWUgfHwgJHZhbHVlID09PSBzZWxmOjokZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Jvb2wnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+Y29lcmNlQ29sb3IoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29sb3InOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIGZhbGwtdGhydQogICAgICAgICAgICBjYXNlIFR5cGU6OlRfRlVOQ1RJT046CiAgICAgICAgICAgICAgICByZXR1cm4gJ3N0cmluZyc7CgogICAgICAgICAgICBjYXNlIFR5cGU6OlRfTElTVDoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdmFsdWVbM10pICYmICR2YWx1ZVszXSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnYXJnbGlzdCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gZmFsbC10aHJ1CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlWzBdOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJVbml0ID0gWydudW1iZXInXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJVbml0KCRhcmdzKQogICAgewogICAgICAgICRudW0gPSAkYXJnc1swXTsKCiAgICAgICAgaWYgKCRudW1bMF0gPT09IFR5cGU6OlRfTlVNQkVSKSB7CiAgICAgICAgICAgIHJldHVybiBbVHlwZTo6VF9TVFJJTkcsICciJywgWyRudW0tPnVuaXRTdHIoKV1dOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICcnOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYlVuaXRsZXNzID0gWydudW1iZXInXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJVbml0bGVzcygkYXJncykKICAgIHsKICAgICAgICAkdmFsdWUgPSAkYXJnc1swXTsKCiAgICAgICAgcmV0dXJuICR2YWx1ZVswXSA9PT0gVHlwZTo6VF9OVU1CRVIgJiYgJHZhbHVlLT51bml0bGVzcygpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkNvbXBhcmFibGUgPSBbJ251bWJlci0xJywgJ251bWJlci0yJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliQ29tcGFyYWJsZSgkYXJncykKICAgIHsKICAgICAgICBsaXN0KCRudW1iZXIxLCAkbnVtYmVyMikgPSAkYXJnczsKCiAgICAgICAgaWYgKCEgaXNzZXQoJG51bWJlcjFbMF0pIHx8ICRudW1iZXIxWzBdICE9PSBUeXBlOjpUX05VTUJFUiB8fAogICAgICAgICAgICAhIGlzc2V0KCRudW1iZXIyWzBdKSB8fCAkbnVtYmVyMlswXSAhPT0gVHlwZTo6VF9OVU1CRVIKICAgICAgICApIHsKICAgICAgICAgICAgJHRoaXMtPnRocm93RXJyb3IoJ0ludmFsaWQgYXJndW1lbnQocykgZm9yICJjb21wYXJhYmxlIicpOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJG51bWJlcjEgPSAkbnVtYmVyMS0+bm9ybWFsaXplKCk7CiAgICAgICAgJG51bWJlcjIgPSAkbnVtYmVyMi0+bm9ybWFsaXplKCk7CgogICAgICAgIHJldHVybiAkbnVtYmVyMVsyXSA9PT0gJG51bWJlcjJbMl0gfHwgJG51bWJlcjEtPnVuaXRsZXNzKCkgfHwgJG51bWJlcjItPnVuaXRsZXNzKCk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliU3RySW5kZXggPSBbJ3N0cmluZycsICdzdWJzdHJpbmcnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJTdHJJbmRleCgkYXJncykKICAgIHsKICAgICAgICAkc3RyaW5nID0gJHRoaXMtPmNvZXJjZVN0cmluZygkYXJnc1swXSk7CiAgICAgICAgJHN0cmluZ0NvbnRlbnQgPSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHN0cmluZyk7CgogICAgICAgICRzdWJzdHJpbmcgPSAkdGhpcy0+Y29lcmNlU3RyaW5nKCRhcmdzWzFdKTsKICAgICAgICAkc3Vic3RyaW5nQ29udGVudCA9ICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkc3Vic3RyaW5nKTsKCiAgICAgICAgJHJlc3VsdCA9IHN0cnBvcygkc3RyaW5nQ29udGVudCwgJHN1YnN0cmluZ0NvbnRlbnQpOwoKICAgICAgICByZXR1cm4gJHJlc3VsdCA9PT0gZmFsc2UgPyBzZWxmOjokbnVsbCA6IG5ldyBOb2RlXE51bWJlcigkcmVzdWx0ICsgMSwgJycpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYlN0ckluc2VydCA9IFsnc3RyaW5nJywgJ2luc2VydCcsICdpbmRleCddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlN0ckluc2VydCgkYXJncykKICAgIHsKICAgICAgICAkc3RyaW5nID0gJHRoaXMtPmNvZXJjZVN0cmluZygkYXJnc1swXSk7CiAgICAgICAgJHN0cmluZ0NvbnRlbnQgPSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHN0cmluZyk7CgogICAgICAgICRpbnNlcnQgPSAkdGhpcy0+Y29lcmNlU3RyaW5nKCRhcmdzWzFdKTsKICAgICAgICAkaW5zZXJ0Q29udGVudCA9ICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkaW5zZXJ0KTsKCiAgICAgICAgbGlzdCgsICRpbmRleCkgPSAkYXJnc1syXTsKCiAgICAgICAgJHN0cmluZ1syXSA9IFtzdWJzdHJfcmVwbGFjZSgkc3RyaW5nQ29udGVudCwgJGluc2VydENvbnRlbnQsICRpbmRleCAtIDEsIDApXTsKCiAgICAgICAgcmV0dXJuICRzdHJpbmc7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliU3RyTGVuZ3RoID0gWydzdHJpbmcnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJTdHJMZW5ndGgoJGFyZ3MpCiAgICB7CiAgICAgICAgJHN0cmluZyA9ICR0aGlzLT5jb2VyY2VTdHJpbmcoJGFyZ3NbMF0pOwogICAgICAgICRzdHJpbmdDb250ZW50ID0gJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCRzdHJpbmcpOwoKICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKHN0cmxlbigkc3RyaW5nQ29udGVudCksICcnKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJTdHJTbGljZSA9IFsnc3RyaW5nJywgJ3N0YXJ0LWF0JywgJ2VuZC1hdCddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlN0clNsaWNlKCRhcmdzKQogICAgewogICAgICAgIGlmIChpc3NldCgkYXJnc1syXSkgJiYgJGFyZ3NbMl1bMV0gPT0gMCkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JG51bGxTdHJpbmc7CiAgICAgICAgfQoKICAgICAgICAkc3RyaW5nID0gJHRoaXMtPmNvZXJjZVN0cmluZygkYXJnc1swXSk7CiAgICAgICAgJHN0cmluZ0NvbnRlbnQgPSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHN0cmluZyk7CgogICAgICAgICRzdGFydCA9IChpbnQpICRhcmdzWzFdWzFdOwoKICAgICAgICBpZiAoJHN0YXJ0ID4gMCkgewogICAgICAgICAgICAkc3RhcnQtLTsKICAgICAgICB9CgogICAgICAgICRlbmQgICAgPSAoaW50KSAkYXJnc1syXVsxXTsKICAgICAgICAkbGVuZ3RoID0gJGVuZCA8IDAgPyAkZW5kICsgMSA6ICgkZW5kID4gMCA/ICRlbmQgLSAkc3RhcnQgOiAkZW5kKTsKCiAgICAgICAgJHN0cmluZ1syXSA9ICRsZW5ndGgKICAgICAgICAgICAgPyBbc3Vic3RyKCRzdHJpbmdDb250ZW50LCAkc3RhcnQsICRsZW5ndGgpXQogICAgICAgICAgICA6IFtzdWJzdHIoJHN0cmluZ0NvbnRlbnQsICRzdGFydCldOwoKICAgICAgICByZXR1cm4gJHN0cmluZzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJUb0xvd2VyQ2FzZSA9IFsnc3RyaW5nJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliVG9Mb3dlckNhc2UoJGFyZ3MpCiAgICB7CiAgICAgICAgJHN0cmluZyA9ICR0aGlzLT5jb2VyY2VTdHJpbmcoJGFyZ3NbMF0pOwogICAgICAgICRzdHJpbmdDb250ZW50ID0gJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCRzdHJpbmcpOwoKICAgICAgICAkc3RyaW5nWzJdID0gW21iX3N0cnRvbG93ZXIoJHN0cmluZ0NvbnRlbnQpXTsKCiAgICAgICAgcmV0dXJuICRzdHJpbmc7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliVG9VcHBlckNhc2UgPSBbJ3N0cmluZyddOwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpYlRvVXBwZXJDYXNlKCRhcmdzKQogICAgewogICAgICAgICRzdHJpbmcgPSAkdGhpcy0+Y29lcmNlU3RyaW5nKCRhcmdzWzBdKTsKICAgICAgICAkc3RyaW5nQ29udGVudCA9ICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkc3RyaW5nKTsKCiAgICAgICAgJHN0cmluZ1syXSA9IFttYl9zdHJ0b3VwcGVyKCRzdHJpbmdDb250ZW50KV07CgogICAgICAgIHJldHVybiAkc3RyaW5nOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkZlYXR1cmVFeGlzdHMgPSBbJ2ZlYXR1cmUnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJGZWF0dXJlRXhpc3RzKCRhcmdzKQogICAgewogICAgICAgICRzdHJpbmcgPSAkdGhpcy0+Y29lcmNlU3RyaW5nKCRhcmdzWzBdKTsKICAgICAgICAkbmFtZSA9ICR0aGlzLT5jb21waWxlU3RyaW5nQ29udGVudCgkc3RyaW5nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT50b0Jvb2woCiAgICAgICAgICAgIGFycmF5X2tleV9leGlzdHMoJG5hbWUsICR0aGlzLT5yZWdpc3RlcmVkRmVhdHVyZXMpID8gJHRoaXMtPnJlZ2lzdGVyZWRGZWF0dXJlc1skbmFtZV0gOiBmYWxzZQogICAgICAgICk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliRnVuY3Rpb25FeGlzdHMgPSBbJ25hbWUnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJGdW5jdGlvbkV4aXN0cygkYXJncykKICAgIHsKICAgICAgICAkc3RyaW5nID0gJHRoaXMtPmNvZXJjZVN0cmluZygkYXJnc1swXSk7CiAgICAgICAgJG5hbWUgPSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHN0cmluZyk7CgogICAgICAgIC8vIHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMKICAgICAgICBpZiAoJHRoaXMtPmhhcyhzZWxmOjokbmFtZXNwYWNlc1snZnVuY3Rpb24nXSAuICRuYW1lKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICRuYW1lID0gJHRoaXMtPm5vcm1hbGl6ZU5hbWUoJG5hbWUpOwoKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnVzZXJGdW5jdGlvbnNbJG5hbWVdKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIGJ1aWx0LWluIGZ1bmN0aW9ucwogICAgICAgICRmID0gJHRoaXMtPmdldEJ1aWx0aW5GdW5jdGlvbigkbmFtZSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dG9Cb29sKGlzX2NhbGxhYmxlKCRmKSk7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliR2xvYmFsVmFyaWFibGVFeGlzdHMgPSBbJ25hbWUnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJHbG9iYWxWYXJpYWJsZUV4aXN0cygkYXJncykKICAgIHsKICAgICAgICAkc3RyaW5nID0gJHRoaXMtPmNvZXJjZVN0cmluZygkYXJnc1swXSk7CiAgICAgICAgJG5hbWUgPSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHN0cmluZyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+aGFzKCRuYW1lLCAkdGhpcy0+cm9vdEVudik7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkbGliTWl4aW5FeGlzdHMgPSBbJ25hbWUnXTsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJNaXhpbkV4aXN0cygkYXJncykKICAgIHsKICAgICAgICAkc3RyaW5nID0gJHRoaXMtPmNvZXJjZVN0cmluZygkYXJnc1swXSk7CiAgICAgICAgJG5hbWUgPSAkdGhpcy0+Y29tcGlsZVN0cmluZ0NvbnRlbnQoJHN0cmluZyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+aGFzKHNlbGY6OiRuYW1lc3BhY2VzWydtaXhpbiddIC4gJG5hbWUpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYlZhcmlhYmxlRXhpc3RzID0gWyduYW1lJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliVmFyaWFibGVFeGlzdHMoJGFyZ3MpCiAgICB7CiAgICAgICAgJHN0cmluZyA9ICR0aGlzLT5jb2VyY2VTdHJpbmcoJGFyZ3NbMF0pOwogICAgICAgICRuYW1lID0gJHRoaXMtPmNvbXBpbGVTdHJpbmdDb250ZW50KCRzdHJpbmcpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmhhcygkbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXb3JrYXJvdW5kIElFNydzIGNvbnRlbnQgY291bnRlciBidWcuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRhcmdzCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJDb3VudGVyKCRhcmdzKQogICAgewogICAgICAgICRsaXN0ID0gYXJyYXlfbWFwKFskdGhpcywgJ2NvbXBpbGVWYWx1ZSddLCAkYXJncyk7CgogICAgICAgIHJldHVybiBbVHlwZTo6VF9TVFJJTkcsICcnLCBbJ2NvdW50ZXIoJyAuIGltcGxvZGUoJywnLCAkbGlzdCkgLiAnKSddXTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsaWJSYW5kb20gPSBbJ2xpbWl0J107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliUmFuZG9tKCRhcmdzKQogICAgewogICAgICAgIGlmIChpc3NldCgkYXJnc1swXSkpIHsKICAgICAgICAgICAgJG4gPSAkdGhpcy0+YXNzZXJ0TnVtYmVyKCRhcmdzWzBdKTsKCiAgICAgICAgICAgIGlmICgkbiA8IDEpIHsKICAgICAgICAgICAgICAgICR0aGlzLT50aHJvd0Vycm9yKCJsaW1pdCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxIik7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKG10X3JhbmQoMSwgJG4pLCAnJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IE5vZGVcTnVtYmVyKG10X3JhbmQoMSwgbXRfZ2V0cmFuZG1heCgpKSwgJycpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBsaWJVbmlxdWVJZCgpCiAgICB7CiAgICAgICAgc3RhdGljICRpZDsKCiAgICAgICAgaWYgKCEgaXNzZXQoJGlkKSkgewogICAgICAgICAgICAkaWQgPSBtdF9yYW5kKDAsIHBvdygzNiwgOCkpOwogICAgICAgIH0KCiAgICAgICAgJGlkICs9IG10X3JhbmQoMCwgMTApICsgMTsKCiAgICAgICAgcmV0dXJuIFtUeXBlOjpUX1NUUklORywgJycsIFsndScgLiBzdHJfcGFkKGJhc2VfY29udmVydCgkaWQsIDEwLCAzNiksIDgsICcwJywgU1RSX1BBRF9MRUZUKV1dOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgJGxpYkluc3BlY3QgPSBbJ3ZhbHVlJ107CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGliSW5zcGVjdCgkYXJncykKICAgIHsKICAgICAgICBpZiAoJGFyZ3NbMF0gPT09IHNlbGY6OiRudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBbVHlwZTo6VF9LRVlXT1JELCAnbnVsbCddOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhcmdzWzBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Compiler/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Compiler/Environment.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxDb21waWxlcjsKCi8qKgogKiBDb21waWxlciBlbnZpcm9ubWVudAogKgogKiBAYXV0aG9yIEFudGhvbiBQYW5nIDxhbnRob24ucGFuZ0BnbWFpbC5jb20+CiAqLwpjbGFzcyBFbnZpcm9ubWVudAp7CiAgICAvKioKICAgICAqIEB2YXIgXExlYWZvXFNjc3NQaHBcQmxvY2sKICAgICAqLwogICAgcHVibGljICRibG9jazsKCiAgICAvKioKICAgICAqIEB2YXIgXExlYWZvXFNjc3NQaHBcQ29tcGlsZXJcRW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljICRwYXJlbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkc3RvcmU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgcHVibGljICRkZXB0aDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Compiler/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Exception/CompilerException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxFeGNlcHRpb247CgovKioKICogQ29tcGlsZXIgZXhjZXB0aW9uCiAqCiAqIEBhdXRob3IgT2xla3NhbmRyIFNhdmNoZW5rbyA8dHJhdmVsdGlub0BnbWFpbC5jb20+CiAqLwpjbGFzcyBDb21waWxlckV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Exception/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Exception/ParserException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxFeGNlcHRpb247CgovKioKICogUGFyc2VyIEV4Y2VwdGlvbgogKgogKiBAYXV0aG9yIE9sZWtzYW5kciBTYXZjaGVua28gPHRyYXZlbHRpbm9AZ21haWwuY29tPgogKi8KY2xhc3MgUGFyc2VyRXhjZXB0aW9uIGV4dGVuZHMgXEV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Exception/ServerException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxFeGNlcHRpb247CgovKioKICogU2VydmVyIEV4Y2VwdGlvbgogKgogKiBAYXV0aG9yIEFudGhvbiBQYW5nIDxhbnRob24ucGFuZ0BnbWFpbC5jb20+CiAqLwpjbGFzcyBTZXJ2ZXJFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCnVzZSBMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jazsKCi8qKgogKiBCYXNlIGZvcm1hdHRlcgogKgogKiBAYXV0aG9yIExlYWYgQ29yY29yYW4gPGxlYWZvdEBnbWFpbC5jb20+CiAqLwphYnN0cmFjdCBjbGFzcyBGb3JtYXR0ZXIKewogICAgLyoqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgcHVibGljICRpbmRlbnRMZXZlbDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkaW5kZW50Q2hhcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkYnJlYWs7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJG9wZW47CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGNsb3NlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICR0YWdTZXBhcmF0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGFzc2lnblNlcGFyYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbGVhCiAgICAgKi8KICAgIHB1YmxpYyAka2VlcFNlbWljb2xvbnM7CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplIGZvcm1hdHRlcgogICAgICoKICAgICAqIEBhcGkKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gaW5kZW50YXRpb24gKHdoaXRlc3BhY2UpCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGluZGVudFN0cigpCiAgICB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHByb3BlcnR5IGFzc2lnbm1lbnQKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIG1peGVkICAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvcGVydHkoJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gcnRyaW0oJG5hbWUpIC4gJHRoaXMtPmFzc2lnblNlcGFyYXRvciAuICR2YWx1ZSAuICc7JzsKICAgIH0KCiAgICAvKioKICAgICAqIFN0cmlwIHNlbWktY29sb24gYXBwZW5kZWQgYnkgcHJvcGVydHkoKTsgaXQncyBhIHNlcGFyYXRvciwgbm90IGEgdGVybWluYXRvcgogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGxpbmVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJpcFNlbWljb2xvbigmJGxpbmVzKQogICAgewogICAgICAgIGlmICgkdGhpcy0+a2VlcFNlbWljb2xvbnMpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCgkY291bnQgPSBjb3VudCgkbGluZXMpKQogICAgICAgICAgICAmJiBzdWJzdHIoJGxpbmVzWyRjb3VudCAtIDFdLCAtMSkgPT09ICc7JwogICAgICAgICkgewogICAgICAgICAgICAkbGluZXNbJGNvdW50IC0gMV0gPSBzdWJzdHIoJGxpbmVzWyRjb3VudCAtIDFdLCAwLCAtMSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogT3V0cHV0IGxpbmVzIGluc2lkZSBhIGJsb2NrCiAgICAgKgogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jayAkYmxvY2sKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrTGluZXMoT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgICRpbm5lciA9ICR0aGlzLT5pbmRlbnRTdHIoKTsKCiAgICAgICAgJGdsdWUgPSAkdGhpcy0+YnJlYWsgLiAkaW5uZXI7CgogICAgICAgIGVjaG8gJGlubmVyIC4gaW1wbG9kZSgkZ2x1ZSwgJGJsb2NrLT5saW5lcyk7CgogICAgICAgIGlmICghIGVtcHR5KCRibG9jay0+Y2hpbGRyZW4pKSB7CiAgICAgICAgICAgIGVjaG8gJHRoaXMtPmJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIE91dHB1dCBibG9jayBzZWxlY3RvcnMKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcRm9ybWF0dGVyXE91dHB1dEJsb2NrICRibG9jawogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tTZWxlY3RvcnMoT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgICRpbm5lciA9ICR0aGlzLT5pbmRlbnRTdHIoKTsKCiAgICAgICAgZWNobyAkaW5uZXIKICAgICAgICAgICAgLiBpbXBsb2RlKCR0aGlzLT50YWdTZXBhcmF0b3IsICRibG9jay0+c2VsZWN0b3JzKQogICAgICAgICAgICAuICR0aGlzLT5vcGVuIC4gJHRoaXMtPmJyZWFrOwogICAgfQoKICAgIC8qKgogICAgICogT3V0cHV0IGJsb2NrIGNoaWxkcmVuCiAgICAgKgogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jayAkYmxvY2sKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrQ2hpbGRyZW4oT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgIGZvcmVhY2ggKCRibG9jay0+Y2hpbGRyZW4gYXMgJGNoaWxkKSB7CiAgICAgICAgICAgICR0aGlzLT5ibG9jaygkY2hpbGQpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIE91dHB1dCBub24tZW1wdHkgYmxvY2sKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcRm9ybWF0dGVyXE91dHB1dEJsb2NrICRibG9jawogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2soT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgIGlmIChlbXB0eSgkYmxvY2stPmxpbmVzKSAmJiBlbXB0eSgkYmxvY2stPmNoaWxkcmVuKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkcHJlID0gJHRoaXMtPmluZGVudFN0cigpOwoKICAgICAgICBpZiAoISBlbXB0eSgkYmxvY2stPnNlbGVjdG9ycykpIHsKICAgICAgICAgICAgJHRoaXMtPmJsb2NrU2VsZWN0b3JzKCRibG9jayk7CgogICAgICAgICAgICAkdGhpcy0+aW5kZW50TGV2ZWwrKzsKICAgICAgICB9CgogICAgICAgIGlmICghIGVtcHR5KCRibG9jay0+bGluZXMpKSB7CiAgICAgICAgICAgICR0aGlzLT5ibG9ja0xpbmVzKCRibG9jayk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISBlbXB0eSgkYmxvY2stPmNoaWxkcmVuKSkgewogICAgICAgICAgICAkdGhpcy0+YmxvY2tDaGlsZHJlbigkYmxvY2spOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgZW1wdHkoJGJsb2NrLT5zZWxlY3RvcnMpKSB7CiAgICAgICAgICAgICR0aGlzLT5pbmRlbnRMZXZlbC0tOwoKICAgICAgICAgICAgaWYgKGVtcHR5KCRibG9jay0+Y2hpbGRyZW4pKSB7CiAgICAgICAgICAgICAgICBlY2hvICR0aGlzLT5icmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWNobyAkcHJlIC4gJHRoaXMtPmNsb3NlIC4gJHRoaXMtPmJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVudHJ5IHBvaW50IHRvIGZvcm1hdHRpbmcgYSBibG9jawogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcRm9ybWF0dGVyXE91dHB1dEJsb2NrICRibG9jayBBbiBhYnN0cmFjdCBzeW50YXggdHJlZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXQoT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgIG9iX3N0YXJ0KCk7CgogICAgICAgICR0aGlzLT5ibG9jaygkYmxvY2spOwoKICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7CgogICAgICAgIHJldHVybiAkb3V0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/Compact.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7Cgp1c2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7CgovKioKICogQ29tcGFjdCBmb3JtYXR0ZXIKICoKICogQGF1dGhvciBMZWFmIENvcmNvcmFuIDxsZWFmb3RAZ21haWwuY29tPgogKi8KY2xhc3MgQ29tcGFjdCBleHRlbmRzIEZvcm1hdHRlcgp7CiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+aW5kZW50TGV2ZWwgPSAwOwogICAgICAgICR0aGlzLT5pbmRlbnRDaGFyID0gJyc7CiAgICAgICAgJHRoaXMtPmJyZWFrID0gJyc7CiAgICAgICAgJHRoaXMtPm9wZW4gPSAnIHsnOwogICAgICAgICR0aGlzLT5jbG9zZSA9ICJ9XG5cbiI7CiAgICAgICAgJHRoaXMtPnRhZ1NlcGFyYXRvciA9ICcsJzsKICAgICAgICAkdGhpcy0+YXNzaWduU2VwYXJhdG9yID0gJzonOwogICAgICAgICR0aGlzLT5rZWVwU2VtaWNvbG9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRlbnRTdHIoKQogICAgewogICAgICAgIHJldHVybiAnICc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/Compressed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7Cgp1c2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7CnVzZSBMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jazsKCi8qKgogKiBDb21wcmVzc2VkIGZvcm1hdHRlcgogKgogKiBAYXV0aG9yIExlYWYgQ29yY29yYW4gPGxlYWZvdEBnbWFpbC5jb20+CiAqLwpjbGFzcyBDb21wcmVzc2VkIGV4dGVuZHMgRm9ybWF0dGVyCnsKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5pbmRlbnRMZXZlbCA9IDA7CiAgICAgICAgJHRoaXMtPmluZGVudENoYXIgPSAnICAnOwogICAgICAgICR0aGlzLT5icmVhayA9ICcnOwogICAgICAgICR0aGlzLT5vcGVuID0gJ3snOwogICAgICAgICR0aGlzLT5jbG9zZSA9ICd9JzsKICAgICAgICAkdGhpcy0+dGFnU2VwYXJhdG9yID0gJywnOwogICAgICAgICR0aGlzLT5hc3NpZ25TZXBhcmF0b3IgPSAnOic7CiAgICAgICAgJHRoaXMtPmtlZXBTZW1pY29sb25zID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBibG9ja0xpbmVzKE91dHB1dEJsb2NrICRibG9jaykKICAgIHsKICAgICAgICAkaW5uZXIgPSAkdGhpcy0+aW5kZW50U3RyKCk7CgogICAgICAgICRnbHVlID0gJHRoaXMtPmJyZWFrIC4gJGlubmVyOwoKICAgICAgICBmb3JlYWNoICgkYmxvY2stPmxpbmVzIGFzICRpbmRleCA9PiAkbGluZSkgewogICAgICAgICAgICBpZiAoc3Vic3RyKCRsaW5lLCAwLCAyKSA9PT0gJy8qJyAmJiBzdWJzdHIoJGxpbmUsIDIsIDEpICE9PSAnIScpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRibG9jay0+bGluZXNbJGluZGV4XSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChzdWJzdHIoJGxpbmUsIDAsIDMpID09PSAnLyohJykgewogICAgICAgICAgICAgICAgJGJsb2NrLT5saW5lc1skaW5kZXhdID0gJy8qJyAuIHN1YnN0cigkbGluZSwgMyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVjaG8gJGlubmVyIC4gaW1wbG9kZSgkZ2x1ZSwgJGJsb2NrLT5saW5lcyk7CgogICAgICAgIGlmICghIGVtcHR5KCRibG9jay0+Y2hpbGRyZW4pKSB7CiAgICAgICAgICAgIGVjaG8gJHRoaXMtPmJyZWFrOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/Crunched.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7Cgp1c2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7CnVzZSBMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jazsKCi8qKgogKiBDcnVuY2hlZCBmb3JtYXR0ZXIKICoKICogQGF1dGhvciBBbnRob24gUGFuZyA8YW50aG9uLnBhbmdAZ21haWwuY29tPgogKi8KY2xhc3MgQ3J1bmNoZWQgZXh0ZW5kcyBGb3JtYXR0ZXIKewogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmluZGVudExldmVsID0gMDsKICAgICAgICAkdGhpcy0+aW5kZW50Q2hhciA9ICcgICc7CiAgICAgICAgJHRoaXMtPmJyZWFrID0gJyc7CiAgICAgICAgJHRoaXMtPm9wZW4gPSAneyc7CiAgICAgICAgJHRoaXMtPmNsb3NlID0gJ30nOwogICAgICAgICR0aGlzLT50YWdTZXBhcmF0b3IgPSAnLCc7CiAgICAgICAgJHRoaXMtPmFzc2lnblNlcGFyYXRvciA9ICc6JzsKICAgICAgICAkdGhpcy0+a2VlcFNlbWljb2xvbnMgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJsb2NrTGluZXMoT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgICRpbm5lciA9ICR0aGlzLT5pbmRlbnRTdHIoKTsKCiAgICAgICAgJGdsdWUgPSAkdGhpcy0+YnJlYWsgLiAkaW5uZXI7CgogICAgICAgIGZvcmVhY2ggKCRibG9jay0+bGluZXMgYXMgJGluZGV4ID0+ICRsaW5lKSB7CiAgICAgICAgICAgIGlmIChzdWJzdHIoJGxpbmUsIDAsIDIpID09PSAnLyonKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkYmxvY2stPmxpbmVzWyRpbmRleF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlY2hvICRpbm5lciAuIGltcGxvZGUoJGdsdWUsICRibG9jay0+bGluZXMpOwoKICAgICAgICBpZiAoISBlbXB0eSgkYmxvY2stPmNoaWxkcmVuKSkgewogICAgICAgICAgICBlY2hvICR0aGlzLT5icmVhazsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/Debug.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7Cgp1c2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7CnVzZSBMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jazsKCi8qKgogKiBEZWJ1ZyBmb3JtYXR0ZXIKICoKICogQGF1dGhvciBBbnRob24gUGFuZyA8YW50aG9uLnBhbmdAZ21haWwuY29tPgogKi8KY2xhc3MgRGVidWcgZXh0ZW5kcyBGb3JtYXR0ZXIKewogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmluZGVudExldmVsID0gMDsKICAgICAgICAkdGhpcy0+aW5kZW50Q2hhciA9ICcnOwogICAgICAgICR0aGlzLT5icmVhayA9ICJcbiI7CiAgICAgICAgJHRoaXMtPm9wZW4gPSAnIHsnOwogICAgICAgICR0aGlzLT5jbG9zZSA9ICcgfSc7CiAgICAgICAgJHRoaXMtPnRhZ1NlcGFyYXRvciA9ICcsICc7CiAgICAgICAgJHRoaXMtPmFzc2lnblNlcGFyYXRvciA9ICc6ICc7CiAgICAgICAgJHRoaXMtPmtlZXBTZW1pY29sb25zID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGluZGVudFN0cigpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cl9yZXBlYXQoJyAgJywgJHRoaXMtPmluZGVudExldmVsKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrTGluZXMoT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgICRpbmRlbnQgPSAkdGhpcy0+aW5kZW50U3RyKCk7CgogICAgICAgIGlmIChlbXB0eSgkYmxvY2stPmxpbmVzKSkgewogICAgICAgICAgICBlY2hvICJ7JGluZGVudH1ibG9jay0+bGluZXM6IFtdXG4iOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJGJsb2NrLT5saW5lcyBhcyAkaW5kZXggPT4gJGxpbmUpIHsKICAgICAgICAgICAgZWNobyAieyRpbmRlbnR9YmxvY2stPmxpbmVzW3skaW5kZXh9XTogJGxpbmVcbiI7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tTZWxlY3RvcnMoT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgICRpbmRlbnQgPSAkdGhpcy0+aW5kZW50U3RyKCk7CgogICAgICAgIGlmIChlbXB0eSgkYmxvY2stPnNlbGVjdG9ycykpIHsKICAgICAgICAgICAgZWNobyAieyRpbmRlbnR9YmxvY2stPnNlbGVjdG9yczogW11cbiI7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkYmxvY2stPnNlbGVjdG9ycyBhcyAkaW5kZXggPT4gJHNlbGVjdG9yKSB7CiAgICAgICAgICAgIGVjaG8gInskaW5kZW50fWJsb2NrLT5zZWxlY3RvcnNbeyRpbmRleH1dOiAkc2VsZWN0b3JcbiI7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tDaGlsZHJlbihPdXRwdXRCbG9jayAkYmxvY2spCiAgICB7CiAgICAgICAgJGluZGVudCA9ICR0aGlzLT5pbmRlbnRTdHIoKTsKCiAgICAgICAgaWYgKGVtcHR5KCRibG9jay0+Y2hpbGRyZW4pKSB7CiAgICAgICAgICAgIGVjaG8gInskaW5kZW50fWJsb2NrLT5jaGlsZHJlbjogW11cbiI7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aW5kZW50TGV2ZWwrKzsKCiAgICAgICAgZm9yZWFjaCAoJGJsb2NrLT5jaGlsZHJlbiBhcyAkaSA9PiAkY2hpbGQpIHsKICAgICAgICAgICAgJHRoaXMtPmJsb2NrKCRjaGlsZCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aW5kZW50TGV2ZWwtLTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrKE91dHB1dEJsb2NrICRibG9jaykKICAgIHsKICAgICAgICAkaW5kZW50ID0gJHRoaXMtPmluZGVudFN0cigpOwoKICAgICAgICBlY2hvICJ7JGluZGVudH1ibG9jay0+dHlwZTogeyRibG9jay0+dHlwZX1cbiIgLgogICAgICAgICAgICAgInskaW5kZW50fWJsb2NrLT5kZXB0aDogeyRibG9jay0+ZGVwdGh9XG4iOwoKICAgICAgICAkdGhpcy0+YmxvY2tTZWxlY3RvcnMoJGJsb2NrKTsKICAgICAgICAkdGhpcy0+YmxvY2tMaW5lcygkYmxvY2spOwogICAgICAgICR0aGlzLT5ibG9ja0NoaWxkcmVuKCRibG9jayk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/Expanded.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7Cgp1c2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7CnVzZSBMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jazsKCi8qKgogKiBFeHBhbmRlZCBmb3JtYXR0ZXIKICoKICogQGF1dGhvciBMZWFmIENvcmNvcmFuIDxsZWFmb3RAZ21haWwuY29tPgogKi8KY2xhc3MgRXhwYW5kZWQgZXh0ZW5kcyBGb3JtYXR0ZXIKewogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmluZGVudExldmVsID0gMDsKICAgICAgICAkdGhpcy0+aW5kZW50Q2hhciA9ICcgICc7CiAgICAgICAgJHRoaXMtPmJyZWFrID0gIlxuIjsKICAgICAgICAkdGhpcy0+b3BlbiA9ICcgeyc7CiAgICAgICAgJHRoaXMtPmNsb3NlID0gJ30nOwogICAgICAgICR0aGlzLT50YWdTZXBhcmF0b3IgPSAnLCAnOwogICAgICAgICR0aGlzLT5hc3NpZ25TZXBhcmF0b3IgPSAnOiAnOwogICAgICAgICR0aGlzLT5rZWVwU2VtaWNvbG9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpbmRlbnRTdHIoKQogICAgewogICAgICAgIHJldHVybiBzdHJfcmVwZWF0KCR0aGlzLT5pbmRlbnRDaGFyLCAkdGhpcy0+aW5kZW50TGV2ZWwpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tMaW5lcyhPdXRwdXRCbG9jayAkYmxvY2spCiAgICB7CiAgICAgICAgJGlubmVyID0gJHRoaXMtPmluZGVudFN0cigpOwoKICAgICAgICAkZ2x1ZSA9ICR0aGlzLT5icmVhayAuICRpbm5lcjsKCiAgICAgICAgZm9yZWFjaCAoJGJsb2NrLT5saW5lcyBhcyAkaW5kZXggPT4gJGxpbmUpIHsKICAgICAgICAgICAgaWYgKHN1YnN0cigkbGluZSwgMCwgMikgPT09ICcvKicpIHsKICAgICAgICAgICAgICAgICRibG9jay0+bGluZXNbJGluZGV4XSA9IHByZWdfcmVwbGFjZSgnLyhccnxcbikrLycsICRnbHVlLCAkbGluZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVjaG8gJGlubmVyIC4gaW1wbG9kZSgkZ2x1ZSwgJGJsb2NrLT5saW5lcyk7CgogICAgICAgIGlmIChlbXB0eSgkYmxvY2stPnNlbGVjdG9ycykgfHwgISBlbXB0eSgkYmxvY2stPmNoaWxkcmVuKSkgewogICAgICAgICAgICBlY2hvICR0aGlzLT5icmVhazsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/Nested.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7Cgp1c2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7CnVzZSBMZWFmb1xTY3NzUGhwXEZvcm1hdHRlclxPdXRwdXRCbG9jazsKCi8qKgogKiBOZXN0ZWQgZm9ybWF0dGVyCiAqCiAqIEBhdXRob3IgTGVhZiBDb3Jjb3JhbiA8bGVhZm90QGdtYWlsLmNvbT4KICovCmNsYXNzIE5lc3RlZCBleHRlbmRzIEZvcm1hdHRlcgp7CiAgICAvKioKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwcml2YXRlICRkZXB0aDsKCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+aW5kZW50TGV2ZWwgPSAwOwogICAgICAgICR0aGlzLT5pbmRlbnRDaGFyID0gJyAgJzsKICAgICAgICAkdGhpcy0+YnJlYWsgPSAiXG4iOwogICAgICAgICR0aGlzLT5vcGVuID0gJyB7JzsKICAgICAgICAkdGhpcy0+Y2xvc2UgPSAnIH0nOwogICAgICAgICR0aGlzLT50YWdTZXBhcmF0b3IgPSAnLCAnOwogICAgICAgICR0aGlzLT5hc3NpZ25TZXBhcmF0b3IgPSAnOiAnOwogICAgICAgICR0aGlzLT5rZWVwU2VtaWNvbG9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpbmRlbnRTdHIoKQogICAgewogICAgICAgICRuID0gJHRoaXMtPmRlcHRoIC0gMTsKCiAgICAgICAgcmV0dXJuIHN0cl9yZXBlYXQoJHRoaXMtPmluZGVudENoYXIsIG1heCgkdGhpcy0+aW5kZW50TGV2ZWwgKyAkbiwgMCkpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tMaW5lcyhPdXRwdXRCbG9jayAkYmxvY2spCiAgICB7CiAgICAgICAgJGlubmVyID0gJHRoaXMtPmluZGVudFN0cigpOwoKICAgICAgICAkZ2x1ZSA9ICR0aGlzLT5icmVhayAuICRpbm5lcjsKCiAgICAgICAgZm9yZWFjaCAoJGJsb2NrLT5saW5lcyBhcyAkaW5kZXggPT4gJGxpbmUpIHsKICAgICAgICAgICAgaWYgKHN1YnN0cigkbGluZSwgMCwgMikgPT09ICcvKicpIHsKICAgICAgICAgICAgICAgICRibG9jay0+bGluZXNbJGluZGV4XSA9IHByZWdfcmVwbGFjZSgnLyhccnxcbikrLycsICRnbHVlLCAkbGluZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVjaG8gJGlubmVyIC4gaW1wbG9kZSgkZ2x1ZSwgJGJsb2NrLT5saW5lcyk7CgogICAgICAgIGlmICghIGVtcHR5KCRibG9jay0+Y2hpbGRyZW4pKSB7CiAgICAgICAgICAgIGVjaG8gJHRoaXMtPmJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrU2VsZWN0b3JzKE91dHB1dEJsb2NrICRibG9jaykKICAgIHsKICAgICAgICAkaW5uZXIgPSAkdGhpcy0+aW5kZW50U3RyKCk7CgogICAgICAgIGVjaG8gJGlubmVyCiAgICAgICAgICAgIC4gaW1wbG9kZSgkdGhpcy0+dGFnU2VwYXJhdG9yLCAkYmxvY2stPnNlbGVjdG9ycykKICAgICAgICAgICAgLiAkdGhpcy0+b3BlbiAuICR0aGlzLT5icmVhazsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrQ2hpbGRyZW4oT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgIGZvcmVhY2ggKCRibG9jay0+Y2hpbGRyZW4gYXMgJGkgPT4gJGNoaWxkKSB7CiAgICAgICAgICAgICR0aGlzLT5ibG9jaygkY2hpbGQpOwoKICAgICAgICAgICAgaWYgKCRpIDwgY291bnQoJGJsb2NrLT5jaGlsZHJlbikgLSAxKSB7CiAgICAgICAgICAgICAgICBlY2hvICR0aGlzLT5icmVhazsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGJsb2NrLT5jaGlsZHJlblskaSArIDFdKSkgewogICAgICAgICAgICAgICAgICAgICRuZXh0ID0gJGJsb2NrLT5jaGlsZHJlblskaSArIDFdOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJG5leHQtPmRlcHRoID09PSBtYXgoJGJsb2NrLT5kZXB0aCwgMSkgJiYgJGNoaWxkLT5kZXB0aCA+PSAkbmV4dC0+ZGVwdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkdGhpcy0+YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2soT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgIGlmICgkYmxvY2stPnR5cGUgPT09ICdyb290JykgewogICAgICAgICAgICAkdGhpcy0+YWRqdXN0QWxsQ2hpbGRyZW4oJGJsb2NrKTsKICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkYmxvY2stPmxpbmVzKSAmJiBlbXB0eSgkYmxvY2stPmNoaWxkcmVuKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGVwdGggPSAkYmxvY2stPmRlcHRoOwoKICAgICAgICBpZiAoISBlbXB0eSgkYmxvY2stPnNlbGVjdG9ycykpIHsKICAgICAgICAgICAgJHRoaXMtPmJsb2NrU2VsZWN0b3JzKCRibG9jayk7CgogICAgICAgICAgICAkdGhpcy0+aW5kZW50TGV2ZWwrKzsKICAgICAgICB9CgogICAgICAgIGlmICghIGVtcHR5KCRibG9jay0+bGluZXMpKSB7CiAgICAgICAgICAgICR0aGlzLT5ibG9ja0xpbmVzKCRibG9jayk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISBlbXB0eSgkYmxvY2stPmNoaWxkcmVuKSkgewogICAgICAgICAgICAkdGhpcy0+YmxvY2tDaGlsZHJlbigkYmxvY2spOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgZW1wdHkoJGJsb2NrLT5zZWxlY3RvcnMpKSB7CiAgICAgICAgICAgICR0aGlzLT5pbmRlbnRMZXZlbC0tOwoKICAgICAgICAgICAgZWNobyAkdGhpcy0+Y2xvc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGJsb2NrLT50eXBlID09PSAncm9vdCcpIHsKICAgICAgICAgICAgZWNobyAkdGhpcy0+YnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQWRqdXN0IHRoZSBkZXB0aHMgb2YgYWxsIGNoaWxkcmVuLCBkZXB0aCBmaXJzdAogICAgICoKICAgICAqIEBwYXJhbSBcTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXJcT3V0cHV0QmxvY2sgJGJsb2NrCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRqdXN0QWxsQ2hpbGRyZW4oT3V0cHV0QmxvY2sgJGJsb2NrKQogICAgewogICAgICAgIC8vIGZsYXR0ZW4gZW1wdHkgbmVzdGVkIGJsb2NrcwogICAgICAgICRjaGlsZHJlbiA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkYmxvY2stPmNoaWxkcmVuIGFzICRpID0+ICRjaGlsZCkgewogICAgICAgICAgICBpZiAoZW1wdHkoJGNoaWxkLT5saW5lcykgJiYgZW1wdHkoJGNoaWxkLT5jaGlsZHJlbikpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkYmxvY2stPmNoaWxkcmVuWyRpICsgMV0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGJsb2NrLT5jaGlsZHJlblskaSArIDFdLT5kZXB0aCA9ICRjaGlsZC0+ZGVwdGg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRjaGlsZHJlbltdID0gJGNoaWxkOwogICAgICAgIH0KCiAgICAgICAgJGNvdW50ID0gY291bnQoJGNoaWxkcmVuKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGNvdW50OyAkaSsrKSB7CiAgICAgICAgICAgICRkZXB0aCA9ICRjaGlsZHJlblskaV0tPmRlcHRoOwogICAgICAgICAgICAkaiA9ICRpICsgMTsKCiAgICAgICAgICAgIGlmIChpc3NldCgkY2hpbGRyZW5bJGpdKSAmJiAkZGVwdGggPCAkY2hpbGRyZW5bJGpdLT5kZXB0aCkgewogICAgICAgICAgICAgICAgJGNoaWxkRGVwdGggPSAkY2hpbGRyZW5bJGpdLT5kZXB0aDsKCiAgICAgICAgICAgICAgICBmb3IgKDsgJGogPCAkY291bnQ7ICRqKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGRlcHRoIDwgJGNoaWxkcmVuWyRqXS0+ZGVwdGggJiYgJGNoaWxkRGVwdGggPj0gJGNoaWxkcmVuWyRqXS0+ZGVwdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoaWxkcmVuWyRqXS0+ZGVwdGggPSAkZGVwdGggKyAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGJsb2NrLT5jaGlsZHJlbiA9ICRjaGlsZHJlbjsKCiAgICAgICAgLy8gbWFrZSByZWxhdGl2ZSB0byBwYXJlbnQKICAgICAgICBmb3JlYWNoICgkYmxvY2stPmNoaWxkcmVuIGFzICRjaGlsZCkgewogICAgICAgICAgICAkdGhpcy0+YWRqdXN0QWxsQ2hpbGRyZW4oJGNoaWxkKTsKCiAgICAgICAgICAgICRjaGlsZC0+ZGVwdGggPSAkY2hpbGQtPmRlcHRoIC0gJGJsb2NrLT5kZXB0aDsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Formatter/OutputBlock.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXI7CgovKioKICogT3V0cHV0IGJsb2NrCiAqCiAqIEBhdXRob3IgQW50aG9uIFBhbmcgPGFudGhvbi5wYW5nQGdtYWlsLmNvbT4KICovCmNsYXNzIE91dHB1dEJsb2NrCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICR0eXBlOwoKICAgIC8qKgogICAgICogQHZhciBpbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyAkZGVwdGg7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkc2VsZWN0b3JzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJGxpbmVzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJGNoaWxkcmVuOwoKICAgIC8qKgogICAgICogQHZhciBcTGVhZm9cU2Nzc1BocFxGb3JtYXR0ZXJcT3V0cHV0QmxvY2sKICAgICAqLwogICAgcHVibGljICRwYXJlbnQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Node.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCi8qKgogKiBCYXNlIG5vZGUKICoKICogQGF1dGhvciBBbnRob24gUGFuZyA8YW50aG9uLnBhbmdAZ21haWwuY29tPgogKi8KYWJzdHJhY3QgY2xhc3MgTm9kZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgJHNvdXJjZUluZGV4OwoKICAgIC8qKgogICAgICogQHZhciBpbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyAkc291cmNlTGluZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgJHNvdXJjZUNvbHVtbjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Node/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Node/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Node/Number.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocFxOb2RlOwoKdXNlIExlYWZvXFNjc3NQaHBcQ29tcGlsZXI7CnVzZSBMZWFmb1xTY3NzUGhwXE5vZGU7CnVzZSBMZWFmb1xTY3NzUGhwXFR5cGU7CgovKioKICogRGltZW5zaW9uICsgb3B0aW9uYWwgdW5pdHMKICoKICoge0BpbnRlcm5hbAogKiAgICAgVGhpcyBpcyBhIHdvcmstaW4tcHJvZ3Jlc3MuCiAqCiAqICAgICBUaGUgXEFycmF5QWNjZXNzIGludGVyZmFjZSBpcyB0ZW1wb3JhcnkgdW50aWwgdGhlIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS4KICogfX0KICoKICogQGF1dGhvciBBbnRob24gUGFuZyA8YW50aG9uLnBhbmdAZ21haWwuY29tPgogKi8KY2xhc3MgTnVtYmVyIGV4dGVuZHMgTm9kZSBpbXBsZW1lbnRzIFxBcnJheUFjY2Vzcwp7CiAgICAvKioKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBzdGF0aWMgcHVibGljICRwcmVjaXNpb24gPSA1OwoKICAgIC8qKgogICAgICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWNzczMtdmFsdWVzLTIwMTIwMzA4LwogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgc3RhdGljIHByb3RlY3RlZCAkdW5pdFRhYmxlID0gWwogICAgICAgICdpbicgPT4gWwogICAgICAgICAgICAnaW4nID0+IDEsCiAgICAgICAgICAgICdwYycgPT4gNiwKICAgICAgICAgICAgJ3B0JyA9PiA3MiwKICAgICAgICAgICAgJ3B4JyA9PiA5NiwKICAgICAgICAgICAgJ2NtJyA9PiAyLjU0LAogICAgICAgICAgICAnbW0nID0+IDI1LjQsCiAgICAgICAgICAgICdxJyAgPT4gMTAxLjYsCiAgICAgICAgXSwKICAgICAgICAndHVybicgPT4gWwogICAgICAgICAgICAnZGVnJyAgPT4gMzYwLAogICAgICAgICAgICAnZ3JhZCcgPT4gNDAwLAogICAgICAgICAgICAncmFkJyAgPT4gNi4yODMxODUzMDcxNzk1ODY0NzY5MjUyODY3NiwgLy8gMiAqIE1fUEkKICAgICAgICAgICAgJ3R1cm4nID0+IDEsCiAgICAgICAgXSwKICAgICAgICAncycgPT4gWwogICAgICAgICAgICAncycgID0+IDEsCiAgICAgICAgICAgICdtcycgPT4gMTAwMCwKICAgICAgICBdLAogICAgICAgICdIeicgPT4gWwogICAgICAgICAgICAnSHonICA9PiAxLAogICAgICAgICAgICAna0h6JyA9PiAwLjAwMSwKICAgICAgICBdLAogICAgICAgICdkcGknID0+IFsKICAgICAgICAgICAgJ2RwaScgID0+IDEsCiAgICAgICAgICAgICdkcGNtJyA9PiAyLjU0LAogICAgICAgICAgICAnZHBweCcgPT4gOTYsCiAgICAgICAgXSwKICAgIF07CgogICAgLyoqCiAgICAgKiBAdmFyIGludGVnZXJ8ZmxvYXQKICAgICAqLwogICAgcHVibGljICRkaW1lbnNpb247CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkdW5pdHM7CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplIG51bWJlcgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkZGltZW5zaW9uCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGluaXRpYWxVbml0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGltZW5zaW9uLCAkaW5pdGlhbFVuaXQpCiAgICB7CiAgICAgICAgJHRoaXMtPnR5cGUgICAgICA9IFR5cGU6OlRfTlVNQkVSOwogICAgICAgICR0aGlzLT5kaW1lbnNpb24gPSAkZGltZW5zaW9uOwogICAgICAgICR0aGlzLT51bml0cyAgICAgPSBpc19hcnJheSgkaW5pdGlhbFVuaXQpCiAgICAgICAgICAgID8gJGluaXRpYWxVbml0CiAgICAgICAgICAgIDogKCRpbml0aWFsVW5pdCA/IFskaW5pdGlhbFVuaXQgPT4gMV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW10pOwogICAgfQoKICAgIC8qKgogICAgICogQ29lcmNlIG51bWJlciB0byB0YXJnZXQgdW5pdHMKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHVuaXRzCiAgICAgKgogICAgICogQHJldHVybiBcTGVhZm9cU2Nzc1BocFxOb2RlXE51bWJlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29lcmNlKCR1bml0cykKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnVuaXRsZXNzKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXIoJHRoaXMtPmRpbWVuc2lvbiwgJHVuaXRzKTsKICAgICAgICB9CgogICAgICAgICRkaW1lbnNpb24gPSAkdGhpcy0+ZGltZW5zaW9uOwoKICAgICAgICBmb3JlYWNoIChzZWxmOjokdW5pdFRhYmxlWydpbiddIGFzICR1bml0ID0+ICRjb252KSB7CiAgICAgICAgICAgICRmcm9tICAgICAgID0gaXNzZXQoJHRoaXMtPnVuaXRzWyR1bml0XSkgPyAkdGhpcy0+dW5pdHNbJHVuaXRdIDogMDsKICAgICAgICAgICAgJHRvICAgICAgICAgPSBpc3NldCgkdW5pdHNbJHVuaXRdKSA/ICR1bml0c1skdW5pdF0gOiAwOwogICAgICAgICAgICAkZmFjdG9yICAgICA9IHBvdygkY29udiwgJGZyb20gLSAkdG8pOwogICAgICAgICAgICAkZGltZW5zaW9uIC89ICRmYWN0b3I7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IE51bWJlcigkZGltZW5zaW9uLCAkdW5pdHMpOwogICAgfQoKICAgIC8qKgogICAgICogTm9ybWFsaXplIG51bWJlcgogICAgICoKICAgICAqIEByZXR1cm4gXExlYWZvXFNjc3NQaHBcTm9kZVxOdW1iZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpCiAgICB7CiAgICAgICAgJGRpbWVuc2lvbiA9ICR0aGlzLT5kaW1lbnNpb247CiAgICAgICAgJHVuaXRzICAgICA9IFtdOwoKICAgICAgICAkdGhpcy0+bm9ybWFsaXplVW5pdHMoJGRpbWVuc2lvbiwgJHVuaXRzLCAnaW4nKTsKCiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXIoJGRpbWVuc2lvbiwgJHVuaXRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkb2Zmc2V0KQogICAgewogICAgICAgIGlmICgkb2Zmc2V0ID09PSAtMykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNvdXJjZUNvbHVtbiAhPT0gbnVsbDsKICAgICAgICB9CgogICAgICAgIGlmICgkb2Zmc2V0ID09PSAtMikgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNvdXJjZUxpbmUgIT09IG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG9mZnNldCA9PT0gLTEKICAgICAgICAgICAgfHwgJG9mZnNldCA9PT0gMAogICAgICAgICAgICB8fCAkb2Zmc2V0ID09PSAxCiAgICAgICAgICAgIHx8ICRvZmZzZXQgPT09IDIKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCRvZmZzZXQpIHsKICAgICAgICAgICAgY2FzZSAtMzoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c291cmNlQ29sdW1uOwoKICAgICAgICAgICAgY2FzZSAtMjoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c291cmNlTGluZTsKCiAgICAgICAgICAgIGNhc2UgLTE6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNvdXJjZUluZGV4OwoKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOwoKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5kaW1lbnNpb247CgogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnVuaXRzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCRvZmZzZXQgPT09IDEpIHsKICAgICAgICAgICAgJHRoaXMtPmRpbWVuc2lvbiA9ICR2YWx1ZTsKICAgICAgICB9IGVsc2VpZiAoJG9mZnNldCA9PT0gMikgewogICAgICAgICAgICAkdGhpcy0+dW5pdHMgPSAkdmFsdWU7CiAgICAgICAgfSBlbHNlaWYgKCRvZmZzZXQgPT0gLTEpIHsKICAgICAgICAgICAgJHRoaXMtPnNvdXJjZUluZGV4ID0gJHZhbHVlOwogICAgICAgIH0gZWxzZWlmICgkb2Zmc2V0ID09IC0yKSB7CiAgICAgICAgICAgICR0aGlzLT5zb3VyY2VMaW5lID0gJHZhbHVlOwogICAgICAgIH0gZWxzZWlmICgkb2Zmc2V0ID09IC0zKSB7CiAgICAgICAgICAgICR0aGlzLT5zb3VyY2VDb2x1bW4gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCkKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gMSkgewogICAgICAgICAgICAkdGhpcy0+ZGltZW5zaW9uID0gbnVsbDsKICAgICAgICB9IGVsc2VpZiAoJG9mZnNldCA9PT0gMikgewogICAgICAgICAgICAkdGhpcy0+dW5pdHMgPSBudWxsOwogICAgICAgIH0gZWxzZWlmICgkb2Zmc2V0ID09PSAtMSkgewogICAgICAgICAgICAkdGhpcy0+c291cmNlSW5kZXggPSBudWxsOwogICAgICAgIH0gZWxzZWlmICgkb2Zmc2V0ID09PSAtMikgewogICAgICAgICAgICAkdGhpcy0+c291cmNlTGluZSA9IG51bGw7CiAgICAgICAgfSBlbHNlaWYgKCRvZmZzZXQgPT09IC0zKSB7CiAgICAgICAgICAgICR0aGlzLT5zb3VyY2VDb2x1bW4gPSBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIHVuaXRsZXNzCiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bml0bGVzcygpCiAgICB7CiAgICAgICAgcmV0dXJuICEgYXJyYXlfc3VtKCR0aGlzLT51bml0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHVuaXQocykgYXMgdGhlIHByb2R1Y3Qgb2YgbnVtZXJhdG9yIHVuaXRzIGRpdmlkZWQgYnkgdGhlIHByb2R1Y3Qgb2YgZGVub21pbmF0b3IgdW5pdHMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5pdFN0cigpCiAgICB7CiAgICAgICAgJG51bWVyYXRvcnMgICA9IFtdOwogICAgICAgICRkZW5vbWluYXRvcnMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnVuaXRzIGFzICR1bml0ID0+ICR1bml0U2l6ZSkgewogICAgICAgICAgICBpZiAoJHVuaXRTaXplID4gMCkgewogICAgICAgICAgICAgICAgJG51bWVyYXRvcnMgPSBhcnJheV9wYWQoJG51bWVyYXRvcnMsIGNvdW50KCRudW1lcmF0b3JzKSArICR1bml0U2l6ZSwgJHVuaXQpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdW5pdFNpemUgPCAwKSB7CiAgICAgICAgICAgICAgICAkZGVub21pbmF0b3JzID0gYXJyYXlfcGFkKCRkZW5vbWluYXRvcnMsIGNvdW50KCRkZW5vbWluYXRvcnMpICsgJHVuaXRTaXplLCAkdW5pdCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGltcGxvZGUoJyonLCAkbnVtZXJhdG9ycykgLiAoY291bnQoJGRlbm9taW5hdG9ycykgPyAnLycgLiBpbXBsb2RlKCcqJywgJGRlbm9taW5hdG9ycykgOiAnJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBPdXRwdXQgbnVtYmVyCiAgICAgKgogICAgICogQHBhcmFtIFxMZWFmb1xTY3NzUGhwXENvbXBpbGVyICRjb21waWxlcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvdXRwdXQoQ29tcGlsZXIgJGNvbXBpbGVyID0gbnVsbCkKICAgIHsKICAgICAgICAkZGltZW5zaW9uID0gcm91bmQoJHRoaXMtPmRpbWVuc2lvbiwgc2VsZjo6JHByZWNpc2lvbik7CgogICAgICAgICR1bml0cyA9IGFycmF5X2ZpbHRlcigkdGhpcy0+dW5pdHMsIGZ1bmN0aW9uICgkdW5pdFNpemUpIHsKICAgICAgICAgICAgcmV0dXJuICR1bml0U2l6ZTsKICAgICAgICB9KTsKCiAgICAgICAgaWYgKGNvdW50KCR1bml0cykgPiAxICYmIGFycmF5X3N1bSgkdW5pdHMpID09PSAwKSB7CiAgICAgICAgICAgICRkaW1lbnNpb24gPSAkdGhpcy0+ZGltZW5zaW9uOwogICAgICAgICAgICAkdW5pdHMgICAgID0gW107CgogICAgICAgICAgICAkdGhpcy0+bm9ybWFsaXplVW5pdHMoJGRpbWVuc2lvbiwgJHVuaXRzLCAnaW4nKTsKCiAgICAgICAgICAgICRkaW1lbnNpb24gPSByb3VuZCgkZGltZW5zaW9uLCBzZWxmOjokcHJlY2lzaW9uKTsKICAgICAgICAgICAgJHVuaXRzICAgICA9IGFycmF5X2ZpbHRlcigkdW5pdHMsIGZ1bmN0aW9uICgkdW5pdFNpemUpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdW5pdFNpemU7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgJHVuaXRTaXplID0gYXJyYXlfc3VtKCR1bml0cyk7CgogICAgICAgIGlmICgkY29tcGlsZXIgJiYgKCR1bml0U2l6ZSA+IDEgfHwgJHVuaXRTaXplIDwgMCB8fCBjb3VudCgkdW5pdHMpID4gMSkpIHsKICAgICAgICAgICAgJGNvbXBpbGVyLT50aHJvd0Vycm9yKChzdHJpbmcpICRkaW1lbnNpb24gLiAkdGhpcy0+dW5pdFN0cigpIC4gIiBpc24ndCBhIHZhbGlkIENTUyB2YWx1ZS4iKTsKICAgICAgICB9CgogICAgICAgIHJlc2V0KCR1bml0cyk7CiAgICAgICAgbGlzdCgkdW5pdCwgKSA9IGVhY2goJHVuaXRzKTsKCiAgICAgICAgcmV0dXJuIChzdHJpbmcpICRkaW1lbnNpb24gLiAkdW5pdDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3V0cHV0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBOb3JtYWxpemUgdW5pdHMKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlcnxmbG9hdCAkZGltZW5zaW9uCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAkdW5pdHMKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICRiYXNlVW5pdAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKCYkZGltZW5zaW9uLCAmJHVuaXRzLCAkYmFzZVVuaXQgPSAnaW4nKQogICAgewogICAgICAgICRkaW1lbnNpb24gPSAkdGhpcy0+ZGltZW5zaW9uOwogICAgICAgICR1bml0cyAgICAgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnVuaXRzIGFzICR1bml0ID0+ICRleHApIHsKICAgICAgICAgICAgaWYgKGlzc2V0KHNlbGY6OiR1bml0VGFibGVbJGJhc2VVbml0XVskdW5pdF0pKSB7CiAgICAgICAgICAgICAgICAkZmFjdG9yID0gcG93KHNlbGY6OiR1bml0VGFibGVbJGJhc2VVbml0XVskdW5pdF0sICRleHApOwoKICAgICAgICAgICAgICAgICR1bml0ID0gJGJhc2VVbml0OwogICAgICAgICAgICAgICAgJGRpbWVuc2lvbiAvPSAkZmFjdG9yOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdW5pdHNbJHVuaXRdID0gJGV4cCArIChpc3NldCgkdW5pdHNbJHVuaXRdKSA/ICR1bml0c1skdW5pdF0gOiAwKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCnVzZSBMZWFmb1xTY3NzUGhwXEJsb2NrOwp1c2UgTGVhZm9cU2Nzc1BocFxDb21waWxlcjsKdXNlIExlYWZvXFNjc3NQaHBcRXhjZXB0aW9uXFBhcnNlckV4Y2VwdGlvbjsKdXNlIExlYWZvXFNjc3NQaHBcTm9kZTsKdXNlIExlYWZvXFNjc3NQaHBcVHlwZTsKCi8qKgogKiBQYXJzZXIKICoKICogQGF1dGhvciBMZWFmIENvcmNvcmFuIDxsZWFmb3RAZ21haWwuY29tPgogKi8KY2xhc3MgUGFyc2VyCnsKICAgIGNvbnN0IFNPVVJDRV9JTkRFWCAgPSAtMTsKICAgIGNvbnN0IFNPVVJDRV9MSU5FICAgPSAtMjsKICAgIGNvbnN0IFNPVVJDRV9DT0xVTU4gPSAtMzsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkcHJlY2VkZW5jZSA9IFsKICAgICAgICAnPScgICA9PiAwLAogICAgICAgICdvcicgID0+IDEsCiAgICAgICAgJ2FuZCcgPT4gMiwKICAgICAgICAnPT0nICA9PiAzLAogICAgICAgICchPScgID0+IDMsCiAgICAgICAgJzw9PicgPT4gMywKICAgICAgICAnPD0nICA9PiA0LAogICAgICAgICc+PScgID0+IDQsCiAgICAgICAgJzwnICAgPT4gNCwKICAgICAgICAnPicgICA9PiA0LAogICAgICAgICcrJyAgID0+IDUsCiAgICAgICAgJy0nICAgPT4gNSwKICAgICAgICAnKicgICA9PiA2LAogICAgICAgICcvJyAgID0+IDYsCiAgICAgICAgJyUnICAgPT4gNiwKICAgIF07CgogICAgcHJvdGVjdGVkIHN0YXRpYyAkY29tbWVudFBhdHRlcm47CiAgICBwcm90ZWN0ZWQgc3RhdGljICRvcGVyYXRvclBhdHRlcm47CiAgICBwcm90ZWN0ZWQgc3RhdGljICR3aGl0ZVBhdHRlcm47CgogICAgcHJpdmF0ZSAkc291cmNlTmFtZTsKICAgIHByaXZhdGUgJHNvdXJjZUluZGV4OwogICAgcHJpdmF0ZSAkc291cmNlUG9zaXRpb25zOwogICAgcHJpdmF0ZSAkY2hhcnNldDsKICAgIHByaXZhdGUgJGNvdW50OwogICAgcHJpdmF0ZSAkZW52OwogICAgcHJpdmF0ZSAkaW5QYXJlbnM7CiAgICBwcml2YXRlICRlYXRXaGl0ZURlZmF1bHQ7CiAgICBwcml2YXRlICRidWZmZXI7CiAgICBwcml2YXRlICR1dGY4OwogICAgcHJpdmF0ZSAkZW5jb2Rpbmc7CiAgICBwcml2YXRlICRwYXR0ZXJuTW9kaWZpZXJzOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJHNvdXJjZU5hbWUKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRzb3VyY2VJbmRleAogICAgICogQHBhcmFtIHN0cmluZyAgJGVuY29kaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc291cmNlTmFtZSwgJHNvdXJjZUluZGV4ID0gMCwgJGVuY29kaW5nID0gJ3V0Zi04JykKICAgIHsKICAgICAgICAkdGhpcy0+c291cmNlTmFtZSAgICAgICA9ICRzb3VyY2VOYW1lID86ICcoc3RkaW4pJzsKICAgICAgICAkdGhpcy0+c291cmNlSW5kZXggICAgICA9ICRzb3VyY2VJbmRleDsKICAgICAgICAkdGhpcy0+Y2hhcnNldCAgICAgICAgICA9IG51bGw7CiAgICAgICAgJHRoaXMtPnV0ZjggICAgICAgICAgICAgPSAhICRlbmNvZGluZyB8fCBzdHJ0b2xvd2VyKCRlbmNvZGluZykgPT09ICd1dGYtOCc7CiAgICAgICAgJHRoaXMtPnBhdHRlcm5Nb2RpZmllcnMgPSAkdGhpcy0+dXRmOCA/ICdBaXN1JyA6ICdBaXMnOwoKICAgICAgICBpZiAoZW1wdHkoc2VsZjo6JG9wZXJhdG9yUGF0dGVybikpIHsKICAgICAgICAgICAgc2VsZjo6JG9wZXJhdG9yUGF0dGVybiA9ICcoWypcLyUrLV18WyE9XVw9fFw+XD0/fFw8XD1cPnxcPFw9P3xhbmR8b3IpJzsKCiAgICAgICAgICAgICRjb21tZW50U2luZ2xlICAgICAgPSAnXC9cLyc7CiAgICAgICAgICAgICRjb21tZW50TXVsdGlMZWZ0ICAgPSAnXC9cKic7CiAgICAgICAgICAgICRjb21tZW50TXVsdGlSaWdodCAgPSAnXCpcLyc7CgogICAgICAgICAgICBzZWxmOjokY29tbWVudFBhdHRlcm4gPSAkY29tbWVudE11bHRpTGVmdCAuICcuKj8nIC4gJGNvbW1lbnRNdWx0aVJpZ2h0OwogICAgICAgICAgICBzZWxmOjokd2hpdGVQYXR0ZXJuID0gJHRoaXMtPnV0ZjgKICAgICAgICAgICAgICAgID8gJy8nIC4gJGNvbW1lbnRTaW5nbGUgLiAnW15cbl0qXHMqfCgnIC4gc2VsZjo6JGNvbW1lbnRQYXR0ZXJuIC4gJylccyp8XHMrL0Fpc3VTJwogICAgICAgICAgICAgICAgOiAnLycgLiAkY29tbWVudFNpbmdsZSAuICdbXlxuXSpccyp8KCcgLiBzZWxmOjokY29tbWVudFBhdHRlcm4gLiAnKVxzKnxccysvQWlzUyc7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogR2V0IHNvdXJjZSBmaWxlIG5hbWUKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNvdXJjZU5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c291cmNlTmFtZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRocm93IHBhcnNlciBlcnJvcgogICAgICoKICAgICAqIEBhcGkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtc2cKICAgICAqCiAgICAgKiBAdGhyb3dzIFxMZWFmb1xTY3NzUGhwXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRocm93UGFyc2VFcnJvcigkbXNnID0gJ3BhcnNlIGVycm9yJykKICAgIHsKICAgICAgICBsaXN0KCRsaW5lLCAvKiAkY29sdW1uICovKSA9ICR0aGlzLT5nZXRTb3VyY2VQb3NpdGlvbigkdGhpcy0+Y291bnQpOwoKICAgICAgICAkbG9jID0gZW1wdHkoJHRoaXMtPnNvdXJjZU5hbWUpID8gImxpbmU6ICRsaW5lIiA6ICIkdGhpcy0+c291cmNlTmFtZSBvbiBsaW5lICRsaW5lIjsKCiAgICAgICAgaWYgKCR0aGlzLT5wZWVrKCIoLio/KShcbnwkKSIsICRtLCAkdGhpcy0+Y291bnQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oIiRtc2c6IGZhaWxlZCBhdCBgJG1bMV1gICRsb2MiKTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oIiRtc2c6ICRsb2MiKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlciBidWZmZXIKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnVmZmVyCiAgICAgKgogICAgICogQHJldHVybiBcTGVhZm9cU2Nzc1BocFxCbG9jawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2UoJGJ1ZmZlcikKICAgIHsKICAgICAgICAkdGhpcy0+Y291bnQgICAgICAgICAgID0gMDsKICAgICAgICAkdGhpcy0+ZW52ICAgICAgICAgICAgID0gbnVsbDsKICAgICAgICAkdGhpcy0+aW5QYXJlbnMgICAgICAgID0gZmFsc2U7CiAgICAgICAgJHRoaXMtPmVhdFdoaXRlRGVmYXVsdCA9IHRydWU7CiAgICAgICAgJHRoaXMtPmJ1ZmZlciAgICAgICAgICA9IHJ0cmltKCRidWZmZXIsICJceDAwLi5ceDFmIik7CgogICAgICAgICR0aGlzLT5zYXZlRW5jb2RpbmcoKTsKICAgICAgICAkdGhpcy0+ZXh0cmFjdExpbmVOdW1iZXJzKCRidWZmZXIpOwoKICAgICAgICAkdGhpcy0+cHVzaEJsb2NrKG51bGwpOyAvLyByb290IGJsb2NrCiAgICAgICAgJHRoaXMtPndoaXRlc3BhY2UoKTsKICAgICAgICAkdGhpcy0+cHVzaEJsb2NrKG51bGwpOwogICAgICAgICR0aGlzLT5wb3BCbG9jaygpOwoKICAgICAgICB3aGlsZSAoJHRoaXMtPnBhcnNlQ2h1bmsoKSkgewogICAgICAgICAgICA7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmNvdW50ICE9PSBzdHJsZW4oJHRoaXMtPmJ1ZmZlcikpIHsKICAgICAgICAgICAgJHRoaXMtPnRocm93UGFyc2VFcnJvcigpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgZW1wdHkoJHRoaXMtPmVudi0+cGFyZW50KSkgewogICAgICAgICAgICAkdGhpcy0+dGhyb3dQYXJzZUVycm9yKCd1bmNsb3NlZCBibG9jaycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5jaGFyc2V0KSB7CiAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJHRoaXMtPmVudi0+Y2hpbGRyZW4sICR0aGlzLT5jaGFyc2V0KTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5lbnYtPmlzUm9vdCAgICA9IHRydWU7CgogICAgICAgICR0aGlzLT5yZXN0b3JlRW5jb2RpbmcoKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5lbnY7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBhIHZhbHVlIG9yIHZhbHVlIGxpc3QKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnVmZmVyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlVmFsdWUoJGJ1ZmZlciwgJiRvdXQpCiAgICB7CiAgICAgICAgJHRoaXMtPmNvdW50ICAgICAgICAgICA9IDA7CiAgICAgICAgJHRoaXMtPmVudiAgICAgICAgICAgICA9IG51bGw7CiAgICAgICAgJHRoaXMtPmluUGFyZW5zICAgICAgICA9IGZhbHNlOwogICAgICAgICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQgPSB0cnVlOwogICAgICAgICR0aGlzLT5idWZmZXIgICAgICAgICAgPSAoc3RyaW5nKSAkYnVmZmVyOwoKICAgICAgICAkdGhpcy0+c2F2ZUVuY29kaW5nKCk7CgogICAgICAgICRsaXN0ID0gJHRoaXMtPnZhbHVlTGlzdCgkb3V0KTsKCiAgICAgICAgJHRoaXMtPnJlc3RvcmVFbmNvZGluZygpOwoKICAgICAgICByZXR1cm4gJGxpc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBhIHNlbGVjdG9yIG9yIHNlbGVjdG9yIGxpc3QKICAgICAqCiAgICAgKiBAYXBpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnVmZmVyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlU2VsZWN0b3IoJGJ1ZmZlciwgJiRvdXQpCiAgICB7CiAgICAgICAgJHRoaXMtPmNvdW50ICAgICAgICAgICA9IDA7CiAgICAgICAgJHRoaXMtPmVudiAgICAgICAgICAgICA9IG51bGw7CiAgICAgICAgJHRoaXMtPmluUGFyZW5zICAgICAgICA9IGZhbHNlOwogICAgICAgICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQgPSB0cnVlOwogICAgICAgICR0aGlzLT5idWZmZXIgICAgICAgICAgPSAoc3RyaW5nKSAkYnVmZmVyOwoKICAgICAgICAkdGhpcy0+c2F2ZUVuY29kaW5nKCk7CgogICAgICAgICRzZWxlY3RvciA9ICR0aGlzLT5zZWxlY3RvcnMoJG91dCk7CgogICAgICAgICR0aGlzLT5yZXN0b3JlRW5jb2RpbmcoKTsKCiAgICAgICAgcmV0dXJuICRzZWxlY3RvcjsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGEgc2luZ2xlIGNodW5rIG9mZiB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyIGFuZCBhcHBlbmQgaXQgdG8gdGhlCiAgICAgKiBjdXJyZW50IHBhcnNlIGVudmlyb25tZW50LgogICAgICoKICAgICAqIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgYnVmZmVyIGlzIGVtcHR5LCBvciB3aGVuIHRoZXJlIGlzIGFuIGVycm9yLgogICAgICoKICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgdGhlIGVudGlyZSBkb2N1bWVudCBpcwogICAgICogcGFyc2VkLgogICAgICoKICAgICAqIFRoaXMgcGFyc2VyIGlzIG1vc3Qgc2ltaWxhciB0byBhIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4gU2luZ2xlCiAgICAgKiBmdW5jdGlvbnMgcmVwcmVzZW50IGRpc2NyZXRlIGdyYW1tYXRpY2FsIHJ1bGVzIGZvciB0aGUgbGFuZ3VhZ2UsIGFuZAogICAgICogdGhleSBhcmUgYWJsZSB0byBjYXB0dXJlIHRoZSB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aG9zZSBydWxlcy4KICAgICAqCiAgICAgKiBDb25zaWRlciB0aGUgZnVuY3Rpb24gQ29tcGlsZXI6OmtleXdvcmQoKS4gKEFsbCBwYXJzZSBmdW5jdGlvbnMgYXJlCiAgICAgKiBzdHJ1Y3R1cmVkIHRoZSBzYW1lLikKICAgICAqCiAgICAgKiBUaGUgZnVuY3Rpb24gdGFrZXMgYSBzaW5nbGUgcmVmZXJlbmNlIGFyZ3VtZW50LiBXaGVuIGNhbGxpbmcgdGhlCiAgICAgKiBmdW5jdGlvbiBpdCB3aWxsIGF0dGVtcHQgdG8gbWF0Y2ggYSBrZXl3b3JkIG9uIHRoZSBoZWFkIG9mIHRoZSBidWZmZXIuCiAgICAgKiBJZiBpdCBpcyBzdWNjZXNzZnVsLCBpdCB3aWxsIHBsYWNlIHRoZSBrZXl3b3JkIGluIHRoZSByZWZlcmVuY2VkCiAgICAgKiBhcmd1bWVudCwgYWR2YW5jZSB0aGUgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciwgYW5kIHJldHVybiB0cnVlLiBJZiBpdAogICAgICogZmFpbHMgdGhlbiBpdCB3b24ndCBhZHZhbmNlIHRoZSBidWZmZXIgYW5kIGl0IHdpbGwgcmV0dXJuIGZhbHNlLgogICAgICoKICAgICAqIEFsbCBvZiB0aGVzZSBwYXJzZSBmdW5jdGlvbnMgYXJlIHBvd2VyZWQgYnkgQ29tcGlsZXI6Om1hdGNoKCksIHdoaWNoIGJlaGF2ZXMKICAgICAqIHRoZSBzYW1lIHdheSwgYnV0IHRha2VzIGEgbGl0ZXJhbCByZWd1bGFyIGV4cHJlc3Npb24uIFNvbWV0aW1lcyBpdCBpcwogICAgICogbW9yZSBjb252ZW5pZW50IHRvIHVzZSBtYXRjaCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IGZ1bmN0aW9uLgogICAgICoKICAgICAqIEJlY2F1c2Ugb2YgdGhlIGZvcm1hdCBvZiB0aGUgZnVuY3Rpb25zLCB0byBwYXJzZSBhbiBlbnRpcmUgc3RyaW5nIG9mCiAgICAgKiBncmFtbWF0aWNhbCBydWxlcywgeW91IGNhbiBjaGFpbiB0aGVtIHRvZ2V0aGVyIHVzaW5nICYmLgogICAgICoKICAgICAqIEJ1dCwgaWYgc29tZSBvZiB0aGUgcnVsZXMgaW4gdGhlIGNoYWluIHN1Y2NlZWQgYmVmb3JlIG9uZSBmYWlscywgdGhlbgogICAgICogdGhlIGJ1ZmZlciBwb3NpdGlvbiB3aWxsIGJlIGxlZnQgYXQgYW4gaW52YWxpZCBzdGF0ZS4gSW4gb3JkZXIgdG8KICAgICAqIGF2b2lkIHRoaXMsIENvbXBpbGVyOjpzZWVrKCkgaXMgdXNlZCB0byByZW1lbWJlciBhbmQgc2V0IGJ1ZmZlciBwb3NpdGlvbnMuCiAgICAgKgogICAgICogQmVmb3JlIHBhcnNpbmcgYSBjaGFpbiwgdXNlICRzID0gJHRoaXMtPnNlZWsoKSB0byByZW1lbWJlciB0aGUgY3VycmVudAogICAgICogcG9zaXRpb24gaW50byAkcy4gVGhlbiBpZiBhIGNoYWluIGZhaWxzLCB1c2UgJHRoaXMtPnNlZWsoJHMpIHRvCiAgICAgKiBnbyBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZUNodW5rKCkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CgogICAgICAgIC8vIHRoZSBkaXJlY3RpdmVzCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5idWZmZXJbJHRoaXMtPmNvdW50XSkgJiYgJHRoaXMtPmJ1ZmZlclskdGhpcy0+Y291bnRdID09PSAnQCcpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdAYXQtcm9vdCcpICYmCiAgICAgICAgICAgICAgICAoJHRoaXMtPnNlbGVjdG9ycygkc2VsZWN0b3IpIHx8IHRydWUpICYmCiAgICAgICAgICAgICAgICAoJHRoaXMtPm1hcCgkd2l0aCkgfHwgdHJ1ZSkgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCd7JykKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkYXRSb290ID0gJHRoaXMtPnB1c2hTcGVjaWFsQmxvY2soVHlwZTo6VF9BVF9ST09ULCAkcyk7CiAgICAgICAgICAgICAgICAkYXRSb290LT5zZWxlY3RvciA9ICRzZWxlY3RvcjsKICAgICAgICAgICAgICAgICRhdFJvb3QtPndpdGggPSAkd2l0aDsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdAbWVkaWEnKSAmJiAkdGhpcy0+bWVkaWFRdWVyeUxpc3QoJG1lZGlhUXVlcnlMaXN0KSAmJiAkdGhpcy0+bGl0ZXJhbCgneycpKSB7CiAgICAgICAgICAgICAgICAkbWVkaWEgPSAkdGhpcy0+cHVzaFNwZWNpYWxCbG9jayhUeXBlOjpUX01FRElBLCAkcyk7CiAgICAgICAgICAgICAgICAkbWVkaWEtPnF1ZXJ5TGlzdCA9ICRtZWRpYVF1ZXJ5TGlzdFsyXTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdAbWl4aW4nKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmtleXdvcmQoJG1peGluTmFtZSkgJiYKICAgICAgICAgICAgICAgICgkdGhpcy0+YXJndW1lbnREZWYoJGFyZ3MpIHx8IHRydWUpICYmCiAgICAgICAgICAgICAgICAkdGhpcy0+bGl0ZXJhbCgneycpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJG1peGluID0gJHRoaXMtPnB1c2hTcGVjaWFsQmxvY2soVHlwZTo6VF9NSVhJTiwgJHMpOwogICAgICAgICAgICAgICAgJG1peGluLT5uYW1lID0gJG1peGluTmFtZTsKICAgICAgICAgICAgICAgICRtaXhpbi0+YXJncyA9ICRhcmdzOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ0BpbmNsdWRlJykgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5rZXl3b3JkKCRtaXhpbk5hbWUpICYmCiAgICAgICAgICAgICAgICAoJHRoaXMtPmxpdGVyYWwoJygnKSAmJgogICAgICAgICAgICAgICAgICAgICgkdGhpcy0+YXJnVmFsdWVzKCRhcmdWYWx1ZXMpIHx8IHRydWUpICYmCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpdGVyYWwoJyknKSB8fCB0cnVlKSAmJgogICAgICAgICAgICAgICAgKCR0aGlzLT5lbmQoKSB8fAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCd7JykgJiYgJGhhc0Jsb2NrID0gdHJ1ZSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkY2hpbGQgPSBbVHlwZTo6VF9JTkNMVURFLCAkbWl4aW5OYW1lLCBpc3NldCgkYXJnVmFsdWVzKSA/ICRhcmdWYWx1ZXMgOiBudWxsLCBudWxsXTsKCiAgICAgICAgICAgICAgICBpZiAoISBlbXB0eSgkaGFzQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgJGluY2x1ZGUgPSAkdGhpcy0+cHVzaFNwZWNpYWxCbG9jayhUeXBlOjpUX0lOQ0xVREUsICRzKTsKICAgICAgICAgICAgICAgICAgICAkaW5jbHVkZS0+Y2hpbGQgPSAkY2hpbGQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5hcHBlbmQoJGNoaWxkLCAkcyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQHNjc3NwaHAtaW1wb3J0LW9uY2UnKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPnZhbHVlTGlzdCgkaW1wb3J0UGF0aCkgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5lbmQoKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hcHBlbmQoW1R5cGU6OlRfU0NTU1BIUF9JTVBPUlRfT05DRSwgJGltcG9ydFBhdGhdLCAkcyk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQGltcG9ydCcpICYmCiAgICAgICAgICAgICAgICAkdGhpcy0+dmFsdWVMaXN0KCRpbXBvcnRQYXRoKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmVuZCgpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRoaXMtPmFwcGVuZChbVHlwZTo6VF9JTVBPUlQsICRpbXBvcnRQYXRoXSwgJHMpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ0BpbXBvcnQnKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPnVybCgkaW1wb3J0UGF0aCkgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5lbmQoKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hcHBlbmQoW1R5cGU6OlRfSU1QT1JULCAkaW1wb3J0UGF0aF0sICRzKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdAZXh0ZW5kJykgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5zZWxlY3RvcnMoJHNlbGVjdG9ycykgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5lbmQoKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciAnIWZsYWcnCiAgICAgICAgICAgICAgICAkb3B0aW9uYWwgPSAkdGhpcy0+c3RyaXBPcHRpb25hbEZsYWcoJHNlbGVjdG9ycyk7CiAgICAgICAgICAgICAgICAkdGhpcy0+YXBwZW5kKFtUeXBlOjpUX0VYVEVORCwgJHNlbGVjdG9ycywgJG9wdGlvbmFsXSwgJHMpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ0BmdW5jdGlvbicpICYmCiAgICAgICAgICAgICAgICAkdGhpcy0+a2V5d29yZCgkZm5OYW1lKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmFyZ3VtZW50RGVmKCRhcmdzKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmxpdGVyYWwoJ3snKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRmdW5jID0gJHRoaXMtPnB1c2hTcGVjaWFsQmxvY2soVHlwZTo6VF9GVU5DVElPTiwgJHMpOwogICAgICAgICAgICAgICAgJGZ1bmMtPm5hbWUgPSAkZm5OYW1lOwogICAgICAgICAgICAgICAgJGZ1bmMtPmFyZ3MgPSAkYXJnczsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdAYnJlYWsnKSAmJiAkdGhpcy0+ZW5kKCkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hcHBlbmQoW1R5cGU6OlRfQlJFQUtdLCAkcyk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQGNvbnRpbnVlJykgJiYgJHRoaXMtPmVuZCgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YXBwZW5kKFtUeXBlOjpUX0NPTlRJTlVFXSwgJHMpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgoKICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdAcmV0dXJuJykgJiYgKCR0aGlzLT52YWx1ZUxpc3QoJHJldFZhbCkgfHwgdHJ1ZSkgJiYgJHRoaXMtPmVuZCgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YXBwZW5kKFtUeXBlOjpUX1JFVFVSTiwgaXNzZXQoJHJldFZhbCkgPyAkcmV0VmFsIDogW1R5cGU6OlRfTlVMTF1dLCAkcyk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQGVhY2gnKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmdlbmVyaWNMaXN0KCR2YXJOYW1lcywgJ3ZhcmlhYmxlJywgJywnLCBmYWxzZSkgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCdpbicpICYmCiAgICAgICAgICAgICAgICAkdGhpcy0+dmFsdWVMaXN0KCRsaXN0KSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmxpdGVyYWwoJ3snKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRlYWNoID0gJHRoaXMtPnB1c2hTcGVjaWFsQmxvY2soVHlwZTo6VF9FQUNILCAkcyk7CgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHZhck5hbWVzWzJdIGFzICR2YXJOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgJGVhY2gtPnZhcnNbXSA9ICR2YXJOYW1lWzFdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRlYWNoLT5saXN0ID0gJGxpc3Q7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQHdoaWxlJykgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5leHByZXNzaW9uKCRjb25kKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmxpdGVyYWwoJ3snKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICR3aGlsZSA9ICR0aGlzLT5wdXNoU3BlY2lhbEJsb2NrKFR5cGU6OlRfV0hJTEUsICRzKTsKICAgICAgICAgICAgICAgICR3aGlsZS0+Y29uZCA9ICRjb25kOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ0Bmb3InKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPnZhcmlhYmxlKCR2YXJOYW1lKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmxpdGVyYWwoJ2Zyb20nKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmV4cHJlc3Npb24oJHN0YXJ0KSAmJgogICAgICAgICAgICAgICAgKCR0aGlzLT5saXRlcmFsKCd0aHJvdWdoJykgfHwKICAgICAgICAgICAgICAgICAgICAoJGZvclVudGlsID0gdHJ1ZSAmJiAkdGhpcy0+bGl0ZXJhbCgndG8nKSkpICYmCiAgICAgICAgICAgICAgICAkdGhpcy0+ZXhwcmVzc2lvbigkZW5kKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmxpdGVyYWwoJ3snKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRmb3IgPSAkdGhpcy0+cHVzaFNwZWNpYWxCbG9jayhUeXBlOjpUX0ZPUiwgJHMpOwogICAgICAgICAgICAgICAgJGZvci0+dmFyID0gJHZhck5hbWVbMV07CiAgICAgICAgICAgICAgICAkZm9yLT5zdGFydCA9ICRzdGFydDsKICAgICAgICAgICAgICAgICRmb3ItPmVuZCA9ICRlbmQ7CiAgICAgICAgICAgICAgICAkZm9yLT51bnRpbCA9IGlzc2V0KCRmb3JVbnRpbCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQGlmJykgJiYgJHRoaXMtPnZhbHVlTGlzdCgkY29uZCkgJiYgJHRoaXMtPmxpdGVyYWwoJ3snKSkgewogICAgICAgICAgICAgICAgJGlmID0gJHRoaXMtPnB1c2hTcGVjaWFsQmxvY2soVHlwZTo6VF9JRiwgJHMpOwogICAgICAgICAgICAgICAgJGlmLT5jb25kID0gJGNvbmQ7CiAgICAgICAgICAgICAgICAkaWYtPmNhc2VzID0gW107CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQGRlYnVnJykgJiYKICAgICAgICAgICAgICAgICR0aGlzLT52YWx1ZUxpc3QoJHZhbHVlKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmVuZCgpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRoaXMtPmFwcGVuZChbVHlwZTo6VF9ERUJVRywgJHZhbHVlXSwgJHMpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ0B3YXJuJykgJiYKICAgICAgICAgICAgICAgICR0aGlzLT52YWx1ZUxpc3QoJHZhbHVlKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmVuZCgpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRoaXMtPmFwcGVuZChbVHlwZTo6VF9XQVJOLCAkdmFsdWVdLCAkcyk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQGVycm9yJykgJiYKICAgICAgICAgICAgICAgICR0aGlzLT52YWx1ZUxpc3QoJHZhbHVlKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmVuZCgpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRoaXMtPmFwcGVuZChbVHlwZTo6VF9FUlJPUiwgJHZhbHVlXSwgJHMpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ0Bjb250ZW50JykgJiYgJHRoaXMtPmVuZCgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YXBwZW5kKFtUeXBlOjpUX01JWElOX0NPTlRFTlRdLCAkcyk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgICRsYXN0ID0gJHRoaXMtPmxhc3QoKTsKCiAgICAgICAgICAgIGlmIChpc3NldCgkbGFzdCkgJiYgJGxhc3RbMF0gPT09IFR5cGU6OlRfSUYpIHsKICAgICAgICAgICAgICAgIGxpc3QoLCAkaWYpID0gJGxhc3Q7CgogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdAZWxzZScpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCd7JykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGVsc2UgPSAkdGhpcy0+cHVzaFNwZWNpYWxCbG9jayhUeXBlOjpUX0VMU0UsICRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPmxpdGVyYWwoJ2lmJykgJiYgJHRoaXMtPnZhbHVlTGlzdCgkY29uZCkgJiYgJHRoaXMtPmxpdGVyYWwoJ3snKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZWxzZSA9ICR0aGlzLT5wdXNoU3BlY2lhbEJsb2NrKFR5cGU6OlRfRUxTRUlGLCAkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICRlbHNlLT5jb25kID0gJGNvbmQ7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGVsc2UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlbHNlLT5kb250QXBwZW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgJGlmLT5jYXNlc1tdID0gJGVsc2U7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBvbmx5IHJldGFpbiB0aGUgZmlyc3QgQGNoYXJzZXQgZGlyZWN0aXZlIGVuY291bnRlcmVkCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQGNoYXJzZXQnKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPnZhbHVlTGlzdCgkY2hhcnNldCkgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5lbmQoKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGlmICghIGlzc2V0KCR0aGlzLT5jaGFyc2V0KSkgewogICAgICAgICAgICAgICAgICAgICRzdGF0ZW1lbnQgPSBbVHlwZTo6VF9DSEFSU0VULCAkY2hhcnNldF07CgogICAgICAgICAgICAgICAgICAgIGxpc3QoJGxpbmUsICRjb2x1bW4pID0gJHRoaXMtPmdldFNvdXJjZVBvc2l0aW9uKCRzKTsKCiAgICAgICAgICAgICAgICAgICAgJHN0YXRlbWVudFtzZWxmOjpTT1VSQ0VfTElORV0gICA9ICRsaW5lOwogICAgICAgICAgICAgICAgICAgICRzdGF0ZW1lbnRbc2VsZjo6U09VUkNFX0NPTFVNTl0gPSAkY29sdW1uOwogICAgICAgICAgICAgICAgICAgICRzdGF0ZW1lbnRbc2VsZjo6U09VUkNFX0lOREVYXSAgPSAkdGhpcy0+c291cmNlSW5kZXg7CgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5jaGFyc2V0ID0gJHN0YXRlbWVudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwoKICAgICAgICAgICAgLy8gZG9lc24ndCBtYXRjaCBidWlsdCBpbiBkaXJlY3RpdmUsIGRvIGdlbmVyaWMgb25lCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnQCcsIGZhbHNlKSAmJgogICAgICAgICAgICAgICAgJHRoaXMtPmtleXdvcmQoJGRpck5hbWUpICYmCiAgICAgICAgICAgICAgICAoJHRoaXMtPnZhcmlhYmxlKCRkaXJWYWx1ZSkgfHwgJHRoaXMtPm9wZW5TdHJpbmcoJ3snLCAkZGlyVmFsdWUpIHx8IHRydWUpICYmCiAgICAgICAgICAgICAgICAkdGhpcy0+bGl0ZXJhbCgneycpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKCRkaXJOYW1lID09PSAnbWVkaWEnKSB7CiAgICAgICAgICAgICAgICAgICAgJGRpcmVjdGl2ZSA9ICR0aGlzLT5wdXNoU3BlY2lhbEJsb2NrKFR5cGU6OlRfTUVESUEsICRzKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGRpcmVjdGl2ZSA9ICR0aGlzLT5wdXNoU3BlY2lhbEJsb2NrKFR5cGU6OlRfRElSRUNUSVZFLCAkcyk7CiAgICAgICAgICAgICAgICAgICAgJGRpcmVjdGl2ZS0+bmFtZSA9ICRkaXJOYW1lOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZGlyVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgJGRpcmVjdGl2ZS0+dmFsdWUgPSAkZGlyVmFsdWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIHByb3BlcnR5IHNob3J0Y3V0CiAgICAgICAgLy8gY2FwdHVyZXMgbW9zdCBwcm9wZXJ0aWVzIGJlZm9yZSBoYXZpbmcgdG8gcGFyc2UgYSBzZWxlY3RvcgogICAgICAgIGlmICgkdGhpcy0+a2V5d29yZCgkbmFtZSwgZmFsc2UpICYmCiAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCc6ICcpICYmCiAgICAgICAgICAgICR0aGlzLT52YWx1ZUxpc3QoJHZhbHVlKSAmJgogICAgICAgICAgICAkdGhpcy0+ZW5kKCkKICAgICAgICApIHsKICAgICAgICAgICAgJG5hbWUgPSBbVHlwZTo6VF9TVFJJTkcsICcnLCBbJG5hbWVdXTsKICAgICAgICAgICAgJHRoaXMtPmFwcGVuZChbVHlwZTo6VF9BU1NJR04sICRuYW1lLCAkdmFsdWVdLCAkcyk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgLy8gdmFyaWFibGUgYXNzaWducwogICAgICAgIGlmICgkdGhpcy0+dmFyaWFibGUoJG5hbWUpICYmCiAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCc6JykgJiYKICAgICAgICAgICAgJHRoaXMtPnZhbHVlTGlzdCgkdmFsdWUpICYmCiAgICAgICAgICAgICR0aGlzLT5lbmQoKQogICAgICAgICkgewogICAgICAgICAgICAvLyBjaGVjayBmb3IgJyFmbGFnJwogICAgICAgICAgICAkYXNzaWdubWVudEZsYWcgPSAkdGhpcy0+c3RyaXBBc3NpZ25tZW50RmxhZygkdmFsdWUpOwogICAgICAgICAgICAkdGhpcy0+YXBwZW5kKFtUeXBlOjpUX0FTU0lHTiwgJG5hbWUsICR2YWx1ZSwgJGFzc2lnbm1lbnRGbGFnXSwgJHMpOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgIC8vIG1pc2MKICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJy0tPicpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gb3BlbmluZyBjc3MgYmxvY2sKICAgICAgICBpZiAoJHRoaXMtPnNlbGVjdG9ycygkc2VsZWN0b3JzKSAmJiAkdGhpcy0+bGl0ZXJhbCgneycpKSB7CiAgICAgICAgICAgICR0aGlzLT5wdXNoQmxvY2soJHNlbGVjdG9ycywgJHMpOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgIC8vIHByb3BlcnR5IGFzc2lnbiwgb3IgbmVzdGVkIGFzc2lnbgogICAgICAgIGlmICgkdGhpcy0+cHJvcGVydHlOYW1lKCRuYW1lKSAmJiAkdGhpcy0+bGl0ZXJhbCgnOicpKSB7CiAgICAgICAgICAgICRmb3VuZFNvbWV0aGluZyA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT52YWx1ZUxpc3QoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmFwcGVuZChbVHlwZTo6VF9BU1NJR04sICRuYW1lLCAkdmFsdWVdLCAkcyk7CiAgICAgICAgICAgICAgICAkZm91bmRTb21ldGhpbmcgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ3snKSkgewogICAgICAgICAgICAgICAgJHByb3BCbG9jayA9ICR0aGlzLT5wdXNoU3BlY2lhbEJsb2NrKFR5cGU6OlRfTkVTVEVEX1BST1BFUlRZLCAkcyk7CiAgICAgICAgICAgICAgICAkcHJvcEJsb2NrLT5wcmVmaXggPSAkbmFtZTsKICAgICAgICAgICAgICAgICRmb3VuZFNvbWV0aGluZyA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZm91bmRTb21ldGhpbmcpIHsKICAgICAgICAgICAgICAgICRmb3VuZFNvbWV0aGluZyA9ICR0aGlzLT5lbmQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRmb3VuZFNvbWV0aGluZykgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgLy8gY2xvc2luZyBhIGJsb2NrCiAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCd9JykpIHsKICAgICAgICAgICAgJGJsb2NrID0gJHRoaXMtPnBvcEJsb2NrKCk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJGJsb2NrLT50eXBlKSAmJiAkYmxvY2stPnR5cGUgPT09IFR5cGU6OlRfSU5DTFVERSkgewogICAgICAgICAgICAgICAgJGluY2x1ZGUgPSAkYmxvY2stPmNoaWxkOwogICAgICAgICAgICAgICAgdW5zZXQoJGJsb2NrLT5jaGlsZCk7CiAgICAgICAgICAgICAgICAkaW5jbHVkZVszXSA9ICRibG9jazsKICAgICAgICAgICAgICAgICR0aGlzLT5hcHBlbmQoJGluY2x1ZGUsICRzKTsKICAgICAgICAgICAgfSBlbHNlaWYgKGVtcHR5KCRibG9jay0+ZG9udEFwcGVuZCkpIHsKICAgICAgICAgICAgICAgICR0eXBlID0gaXNzZXQoJGJsb2NrLT50eXBlKSA/ICRibG9jay0+dHlwZSA6IFR5cGU6OlRfQkxPQ0s7CiAgICAgICAgICAgICAgICAkdGhpcy0+YXBwZW5kKFskdHlwZSwgJGJsb2NrXSwgJHMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIGV4dHJhIHN0dWZmCiAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCc7JykgfHwKICAgICAgICAgICAgJHRoaXMtPmxpdGVyYWwoJzwhLS0nKQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFB1c2ggYmxvY2sgb250byBwYXJzZSB0cmVlCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgJHNlbGVjdG9ycwogICAgICogQHBhcmFtIGludGVnZXIgJHBvcwogICAgICoKICAgICAqIEByZXR1cm4gXExlYWZvXFNjc3NQaHBcQmxvY2sKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHB1c2hCbG9jaygkc2VsZWN0b3JzLCAkcG9zID0gMCkKICAgIHsKICAgICAgICBsaXN0KCRsaW5lLCAkY29sdW1uKSA9ICR0aGlzLT5nZXRTb3VyY2VQb3NpdGlvbigkcG9zKTsKCiAgICAgICAgJGIgPSBuZXcgQmxvY2s7CiAgICAgICAgJGItPnNvdXJjZUxpbmUgICA9ICRsaW5lOwogICAgICAgICRiLT5zb3VyY2VDb2x1bW4gPSAkY29sdW1uOwogICAgICAgICRiLT5zb3VyY2VJbmRleCAgPSAkdGhpcy0+c291cmNlSW5kZXg7CiAgICAgICAgJGItPnNlbGVjdG9ycyAgICA9ICRzZWxlY3RvcnM7CiAgICAgICAgJGItPmNvbW1lbnRzICAgICA9IFtdOwogICAgICAgICRiLT5wYXJlbnQgICAgICAgPSAkdGhpcy0+ZW52OwoKICAgICAgICBpZiAoISAkdGhpcy0+ZW52KSB7CiAgICAgICAgICAgICRiLT5jaGlsZHJlbiA9IFtdOwogICAgICAgIH0gZWxzZWlmIChlbXB0eSgkdGhpcy0+ZW52LT5jaGlsZHJlbikpIHsKICAgICAgICAgICAgJHRoaXMtPmVudi0+Y2hpbGRyZW4gPSAkdGhpcy0+ZW52LT5jb21tZW50czsKICAgICAgICAgICAgJGItPmNoaWxkcmVuID0gW107CiAgICAgICAgICAgICR0aGlzLT5lbnYtPmNvbW1lbnRzID0gW107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGItPmNoaWxkcmVuID0gJHRoaXMtPmVudi0+Y29tbWVudHM7CiAgICAgICAgICAgICR0aGlzLT5lbnYtPmNvbW1lbnRzID0gW107CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZW52ID0gJGI7CgogICAgICAgIHJldHVybiAkYjsKICAgIH0KCiAgICAvKioKICAgICAqIFB1c2ggc3BlY2lhbCAobmFtZWQpIGJsb2NrIG9udG8gcGFyc2UgdHJlZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICR0eXBlCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkcG9zCiAgICAgKgogICAgICogQHJldHVybiBcTGVhZm9cU2Nzc1BocFxCbG9jawogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcHVzaFNwZWNpYWxCbG9jaygkdHlwZSwgJHBvcykKICAgIHsKICAgICAgICAkYmxvY2sgPSAkdGhpcy0+cHVzaEJsb2NrKG51bGwsICRwb3MpOwogICAgICAgICRibG9jay0+dHlwZSA9ICR0eXBlOwoKICAgICAgICByZXR1cm4gJGJsb2NrOwogICAgfQoKICAgIC8qKgogICAgICogUG9wIHNjb3BlIGFuZCByZXR1cm4gbGFzdCBibG9jawogICAgICoKICAgICAqIEByZXR1cm4gXExlYWZvXFNjc3NQaHBcQmxvY2sKICAgICAqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBvcEJsb2NrKCkKICAgIHsKICAgICAgICAkYmxvY2sgPSAkdGhpcy0+ZW52OwoKICAgICAgICBpZiAoZW1wdHkoJGJsb2NrLT5wYXJlbnQpKSB7CiAgICAgICAgICAgICR0aGlzLT50aHJvd1BhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQgfScpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmVudiA9ICRibG9jay0+cGFyZW50OwogICAgICAgIHVuc2V0KCRibG9jay0+cGFyZW50KTsKCiAgICAgICAgJGNvbW1lbnRzID0gJGJsb2NrLT5jb21tZW50czsKICAgICAgICBpZiAoY291bnQoJGNvbW1lbnRzKSkgewogICAgICAgICAgICAkdGhpcy0+ZW52LT5jb21tZW50cyA9ICRjb21tZW50czsKICAgICAgICAgICAgdW5zZXQoJGJsb2NrLT5jb21tZW50cyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGJsb2NrOwogICAgfQoKICAgIC8qKgogICAgICogUGVlayBpbnB1dCBzdHJlYW0KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkcmVnZXgKICAgICAqIEBwYXJhbSBhcnJheSAgICRvdXQKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRmcm9tCiAgICAgKgogICAgICogQHJldHVybiBpbnRlZ2VyCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwZWVrKCRyZWdleCwgJiRvdXQsICRmcm9tID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISBpc3NldCgkZnJvbSkpIHsKICAgICAgICAgICAgJGZyb20gPSAkdGhpcy0+Y291bnQ7CiAgICAgICAgfQoKICAgICAgICAkciA9ICcvJyAuICRyZWdleCAuICcvJyAuICR0aGlzLT5wYXR0ZXJuTW9kaWZpZXJzOwogICAgICAgICRyZXN1bHQgPSBwcmVnX21hdGNoKCRyLCAkdGhpcy0+YnVmZmVyLCAkb3V0LCBudWxsLCAkZnJvbSk7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogU2VlayB0byBwb3NpdGlvbiBpbiBpbnB1dCBzdHJlYW0gKG9yIHJldHVybiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IHN0cmVhbSkKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkd2hlcmUKICAgICAqCiAgICAgKiBAcmV0dXJuIGludGVnZXIKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNlZWsoJHdoZXJlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHdoZXJlID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y291bnQ7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y291bnQgPSAkd2hlcmU7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogTWF0Y2ggc3RyaW5nIGxvb2tpbmcgZm9yIGVpdGhlciBlbmRpbmcgZGVsaW0sIGVzY2FwZSwgb3Igc3RyaW5nIGludGVycG9sYXRpb24KICAgICAqCiAgICAgKiB7QGludGVybmFsIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBwcmVnX21hdGNoJ3MgMjUwSyBzdHJpbmcgbWF0Y2ggbGltaXQuIH19CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAkbSAgICAgTWF0Y2hlcyAocGFzc2VkIGJ5IHJlZmVyZW5jZSkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlbGltIERlbGltZXRlcgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIG1hdGNoOyBmYWxzZSBvdGhlcndpc2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hdGNoU3RyaW5nKCYkbSwgJGRlbGltKQogICAgewogICAgICAgICR0b2tlbiA9IG51bGw7CgogICAgICAgICRlbmQgPSBzdHJsZW4oJHRoaXMtPmJ1ZmZlcik7CgogICAgICAgIC8vIGxvb2sgZm9yIGVpdGhlciBlbmRpbmcgZGVsaW0sIGVzY2FwZSwgb3Igc3RyaW5nIGludGVycG9sYXRpb24KICAgICAgICBmb3JlYWNoIChbJyN7JywgJ1xcJywgJGRlbGltXSBhcyAkbG9va2FoZWFkKSB7CiAgICAgICAgICAgICRwb3MgPSBzdHJwb3MoJHRoaXMtPmJ1ZmZlciwgJGxvb2thaGVhZCwgJHRoaXMtPmNvdW50KTsKCiAgICAgICAgICAgIGlmICgkcG9zICE9PSBmYWxzZSAmJiAkcG9zIDwgJGVuZCkgewogICAgICAgICAgICAgICAgJGVuZCA9ICRwb3M7CiAgICAgICAgICAgICAgICAkdG9rZW4gPSAkbG9va2FoZWFkOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoISBpc3NldCgkdG9rZW4pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRtYXRjaCA9IHN1YnN0cigkdGhpcy0+YnVmZmVyLCAkdGhpcy0+Y291bnQsICRlbmQgLSAkdGhpcy0+Y291bnQpOwogICAgICAgICRtID0gWwogICAgICAgICAgICAkbWF0Y2ggLiAkdG9rZW4sCiAgICAgICAgICAgICRtYXRjaCwKICAgICAgICAgICAgJHRva2VuCiAgICAgICAgXTsKICAgICAgICAkdGhpcy0+Y291bnQgPSAkZW5kICsgc3RybGVuKCR0b2tlbik7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogVHJ5IHRvIG1hdGNoIHNvbWV0aGluZyBvbiBoZWFkIG9mIGJ1ZmZlcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRyZWdleAogICAgICogQHBhcmFtIGFycmF5ICAgJG91dAogICAgICogQHBhcmFtIGJvb2xlYW4gJGVhdFdoaXRlc3BhY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hdGNoKCRyZWdleCwgJiRvdXQsICRlYXRXaGl0ZXNwYWNlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISBpc3NldCgkZWF0V2hpdGVzcGFjZSkpIHsKICAgICAgICAgICAgJGVhdFdoaXRlc3BhY2UgPSAkdGhpcy0+ZWF0V2hpdGVEZWZhdWx0OwogICAgICAgIH0KCiAgICAgICAgJHIgPSAnLycgLiAkcmVnZXggLiAnLycgLiAkdGhpcy0+cGF0dGVybk1vZGlmaWVyczsKCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJHIsICR0aGlzLT5idWZmZXIsICRvdXQsIG51bGwsICR0aGlzLT5jb3VudCkpIHsKICAgICAgICAgICAgJHRoaXMtPmNvdW50ICs9IHN0cmxlbigkb3V0WzBdKTsKCiAgICAgICAgICAgIGlmICgkZWF0V2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPndoaXRlc3BhY2UoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXRjaCBsaXRlcmFsIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICR3aGF0CiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkZWF0V2hpdGVzcGFjZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGl0ZXJhbCgkd2hhdCwgJGVhdFdoaXRlc3BhY2UgPSBudWxsKQogICAgewogICAgICAgIGlmICghIGlzc2V0KCRlYXRXaGl0ZXNwYWNlKSkgewogICAgICAgICAgICAkZWF0V2hpdGVzcGFjZSA9ICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQ7CiAgICAgICAgfQoKICAgICAgICAkbGVuID0gc3RybGVuKCR3aGF0KTsKCiAgICAgICAgaWYgKHN1YnN0cigkdGhpcy0+YnVmZmVyLCAkdGhpcy0+Y291bnQsICRsZW4pID09PSAkd2hhdCkgewogICAgICAgICAgICAkdGhpcy0+Y291bnQgKz0gJGxlbjsKCiAgICAgICAgICAgIGlmICgkZWF0V2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPndoaXRlc3BhY2UoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXRjaCBzb21lIHdoaXRlc3BhY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHdoaXRlc3BhY2UoKQogICAgewogICAgICAgICRnb3RXaGl0ZSA9IGZhbHNlOwoKICAgICAgICB3aGlsZSAocHJlZ19tYXRjaChzZWxmOjokd2hpdGVQYXR0ZXJuLCAkdGhpcy0+YnVmZmVyLCAkbSwgbnVsbCwgJHRoaXMtPmNvdW50KSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJG1bMV0pICYmIGVtcHR5KCR0aGlzLT5jb21tZW50c1NlZW5bJHRoaXMtPmNvdW50XSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hcHBlbmRDb21tZW50KFtUeXBlOjpUX0NPTU1FTlQsICRtWzFdXSk7CgogICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1lbnRzU2VlblskdGhpcy0+Y291bnRdID0gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPmNvdW50ICs9IHN0cmxlbigkbVswXSk7CiAgICAgICAgICAgICRnb3RXaGl0ZSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGdvdFdoaXRlOwogICAgfQoKICAgIC8qKgogICAgICogQXBwZW5kIGNvbW1lbnQgdG8gY3VycmVudCBibG9jawogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkY29tbWVudAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwZW5kQ29tbWVudCgkY29tbWVudCkKICAgIHsKICAgICAgICAkY29tbWVudFsxXSA9IHN1YnN0cihwcmVnX3JlcGxhY2UoWycvXlxzKy9tJywgJy9eKC4pL20nXSwgWycnLCAnIFwxJ10sICRjb21tZW50WzFdKSwgMSk7CgogICAgICAgICR0aGlzLT5lbnYtPmNvbW1lbnRzW10gPSAkY29tbWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIEFwcGVuZCBzdGF0ZW1lbnQgdG8gY3VycmVudCBibG9jawogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgICRzdGF0ZW1lbnQKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRwb3MKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFwcGVuZCgkc3RhdGVtZW50LCAkcG9zID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICBsaXN0KCRsaW5lLCAkY29sdW1uKSA9ICR0aGlzLT5nZXRTb3VyY2VQb3NpdGlvbigkcG9zKTsKCiAgICAgICAgICAgICRzdGF0ZW1lbnRbc2VsZjo6U09VUkNFX0xJTkVdICAgPSAkbGluZTsKICAgICAgICAgICAgJHN0YXRlbWVudFtzZWxmOjpTT1VSQ0VfQ09MVU1OXSA9ICRjb2x1bW47CiAgICAgICAgICAgICRzdGF0ZW1lbnRbc2VsZjo6U09VUkNFX0lOREVYXSAgPSAkdGhpcy0+c291cmNlSW5kZXg7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZW52LT5jaGlsZHJlbltdID0gJHN0YXRlbWVudDsKCiAgICAgICAgJGNvbW1lbnRzID0gJHRoaXMtPmVudi0+Y29tbWVudHM7CgogICAgICAgIGlmIChjb3VudCgkY29tbWVudHMpKSB7CiAgICAgICAgICAgICR0aGlzLT5lbnYtPmNoaWxkcmVuID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmVudi0+Y2hpbGRyZW4sICRjb21tZW50cyk7CiAgICAgICAgICAgICR0aGlzLT5lbnYtPmNvbW1lbnRzID0gW107CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBsYXN0IGNoaWxkIHdhcyBhcHBlbmRlZAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbGFzdCgpCiAgICB7CiAgICAgICAgJGkgPSBjb3VudCgkdGhpcy0+ZW52LT5jaGlsZHJlbikgLSAxOwoKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmVudi0+Y2hpbGRyZW5bJGldKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVudi0+Y2hpbGRyZW5bJGldOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIG1lZGlhIHF1ZXJ5IGxpc3QKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbWVkaWFRdWVyeUxpc3QoJiRvdXQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZW5lcmljTGlzdCgkb3V0LCAnbWVkaWFRdWVyeScsICcsJywgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgbWVkaWEgcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbWVkaWFRdWVyeSgmJG91dCkKICAgIHsKICAgICAgICAkZXhwcmVzc2lvbnMgPSBudWxsOwogICAgICAgICRwYXJ0cyA9IFtdOwoKICAgICAgICBpZiAoKCR0aGlzLT5saXRlcmFsKCdvbmx5JykgJiYgKCRvbmx5ID0gdHJ1ZSkgfHwgJHRoaXMtPmxpdGVyYWwoJ25vdCcpICYmICgkbm90ID0gdHJ1ZSkgfHwgdHJ1ZSkgJiYKICAgICAgICAgICAgJHRoaXMtPm1peGVkS2V5d29yZCgkbWVkaWFUeXBlKQogICAgICAgICkgewogICAgICAgICAgICAkcHJvcCA9IFtUeXBlOjpUX01FRElBX1RZUEVdOwoKICAgICAgICAgICAgaWYgKGlzc2V0KCRvbmx5KSkgewogICAgICAgICAgICAgICAgJHByb3BbXSA9IFtUeXBlOjpUX0tFWVdPUkQsICdvbmx5J107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkbm90KSkgewogICAgICAgICAgICAgICAgJHByb3BbXSA9IFtUeXBlOjpUX0tFWVdPUkQsICdub3QnXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG1lZGlhID0gW1R5cGU6OlRfTElTVCwgJycsIFtdXTsKCiAgICAgICAgICAgIGZvcmVhY2ggKChhcnJheSkgJG1lZGlhVHlwZSBhcyAkdHlwZSkgewogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICRtZWRpYVsyXVtdID0gJHR5cGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRtZWRpYVsyXVtdID0gW1R5cGU6OlRfS0VZV09SRCwgJHR5cGVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkcHJvcFtdICA9ICRtZWRpYTsKICAgICAgICAgICAgJHBhcnRzW10gPSAkcHJvcDsKICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkcGFydHMpIHx8ICR0aGlzLT5saXRlcmFsKCdhbmQnKSkgewogICAgICAgICAgICAkdGhpcy0+Z2VuZXJpY0xpc3QoJGV4cHJlc3Npb25zLCAnbWVkaWFFeHByZXNzaW9uJywgJ2FuZCcsIGZhbHNlKTsKCiAgICAgICAgICAgIGlmIChpc19hcnJheSgkZXhwcmVzc2lvbnMpKSB7CiAgICAgICAgICAgICAgICAkcGFydHMgPSBhcnJheV9tZXJnZSgkcGFydHMsICRleHByZXNzaW9uc1syXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRvdXQgPSAkcGFydHM7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgbWVkaWEgZXhwcmVzc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBtZWRpYUV4cHJlc3Npb24oJiRvdXQpCiAgICB7CiAgICAgICAgJHMgPSAkdGhpcy0+c2VlaygpOwogICAgICAgICR2YWx1ZSA9IG51bGw7CgogICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnKCcpICYmCiAgICAgICAgICAgICR0aGlzLT5leHByZXNzaW9uKCRmZWF0dXJlKSAmJgogICAgICAgICAgICAoJHRoaXMtPmxpdGVyYWwoJzonKSAmJiAkdGhpcy0+ZXhwcmVzc2lvbigkdmFsdWUpIHx8IHRydWUpICYmCiAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCcpJykKICAgICAgICApIHsKICAgICAgICAgICAgJG91dCA9IFtUeXBlOjpUX01FRElBX0VYUFJFU1NJT04sICRmZWF0dXJlXTsKCiAgICAgICAgICAgIGlmICgkdmFsdWUpIHsKICAgICAgICAgICAgICAgICRvdXRbXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGFyZ3VtZW50IHZhbHVlcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhcmdWYWx1ZXMoJiRvdXQpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5nZW5lcmljTGlzdCgkbGlzdCwgJ2FyZ1ZhbHVlJywgJywnLCBmYWxzZSkpIHsKICAgICAgICAgICAgJG91dCA9ICRsaXN0WzJdOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBhcmd1bWVudCB2YWx1ZQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhcmdWYWx1ZSgmJG91dCkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CgogICAgICAgICRrZXl3b3JkID0gbnVsbDsKCiAgICAgICAgaWYgKCEgJHRoaXMtPnZhcmlhYmxlKCRrZXl3b3JkKSB8fCAhICR0aGlzLT5saXRlcmFsKCc6JykpIHsKICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwogICAgICAgICAgICAka2V5d29yZCA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmdlbmVyaWNMaXN0KCR2YWx1ZSwgJ2V4cHJlc3Npb24nKSkgewogICAgICAgICAgICAkb3V0ID0gWyRrZXl3b3JkLCAkdmFsdWUsIGZhbHNlXTsKICAgICAgICAgICAgJHMgPSAkdGhpcy0+c2VlaygpOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCcuLi4nKSkgewogICAgICAgICAgICAgICAgJG91dFsyXSA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgY29tbWEgc2VwYXJhdGVkIHZhbHVlIGxpc3QKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbHVlTGlzdCgmJG91dCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdlbmVyaWNMaXN0KCRvdXQsICdzcGFjZUxpc3QnLCAnLCcpOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2Ugc3BhY2Ugc2VwYXJhdGVkIHZhbHVlIGxpc3QKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc3BhY2VMaXN0KCYkb3V0KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2VuZXJpY0xpc3QoJG91dCwgJ2V4cHJlc3Npb24nKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGdlbmVyaWMgbGlzdAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgICAkb3V0CiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHBhcnNlSXRlbQogICAgICogQHBhcmFtIHN0cmluZyAgICRkZWxpbQogICAgICogQHBhcmFtIGJvb2xlYW4gICRmbGF0dGVuCiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZW5lcmljTGlzdCgmJG91dCwgJHBhcnNlSXRlbSwgJGRlbGltID0gJycsICRmbGF0dGVuID0gdHJ1ZSkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CiAgICAgICAgJGl0ZW1zID0gW107CgogICAgICAgIHdoaWxlICgkdGhpcy0+JHBhcnNlSXRlbSgkdmFsdWUpKSB7CiAgICAgICAgICAgICRpdGVtc1tdID0gJHZhbHVlOwoKICAgICAgICAgICAgaWYgKCRkZWxpbSkgewogICAgICAgICAgICAgICAgaWYgKCEgJHRoaXMtPmxpdGVyYWwoJGRlbGltKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY291bnQoJGl0ZW1zKSA9PT0gMCkgewogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYXR0ZW4gJiYgY291bnQoJGl0ZW1zKSA9PT0gMSkgewogICAgICAgICAgICAkb3V0ID0gJGl0ZW1zWzBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvdXQgPSBbVHlwZTo6VF9MSVNULCAkZGVsaW0sICRpdGVtc107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGV4cHJlc3Npb24KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZXhwcmVzc2lvbigmJG91dCkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CgogICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnKCcpKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnKScpKSB7CiAgICAgICAgICAgICAgICAkb3V0ID0gW1R5cGU6OlRfTElTVCwgJycsIFtdXTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0aGlzLT52YWx1ZUxpc3QoJG91dCkgJiYgJHRoaXMtPmxpdGVyYWwoJyknKSAmJiAkb3V0WzBdID09PSBUeXBlOjpUX0xJU1QpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPm1hcCgkb3V0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWUoJGxocykpIHsKICAgICAgICAgICAgJG91dCA9ICR0aGlzLT5leHBIZWxwZXIoJGxocywgMCk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGxlZnQtaGFuZCBzaWRlIG9mIHN1YmV4cHJlc3Npb24KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAkbGhzCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkbWluUAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGV4cEhlbHBlcigkbGhzLCAkbWluUCkKICAgIHsKICAgICAgICAkb3BlcmF0b3JzID0gc2VsZjo6JG9wZXJhdG9yUGF0dGVybjsKCiAgICAgICAgJHNzID0gJHRoaXMtPnNlZWsoKTsKICAgICAgICAkd2hpdGVCZWZvcmUgPSBpc3NldCgkdGhpcy0+YnVmZmVyWyR0aGlzLT5jb3VudCAtIDFdKSAmJgogICAgICAgICAgICBjdHlwZV9zcGFjZSgkdGhpcy0+YnVmZmVyWyR0aGlzLT5jb3VudCAtIDFdKTsKCiAgICAgICAgd2hpbGUgKCR0aGlzLT5tYXRjaCgkb3BlcmF0b3JzLCAkbSwgZmFsc2UpICYmIHNlbGY6OiRwcmVjZWRlbmNlWyRtWzFdXSA+PSAkbWluUCkgewogICAgICAgICAgICAkd2hpdGVBZnRlciA9IGlzc2V0KCR0aGlzLT5idWZmZXJbJHRoaXMtPmNvdW50XSkgJiYKICAgICAgICAgICAgICAgIGN0eXBlX3NwYWNlKCR0aGlzLT5idWZmZXJbJHRoaXMtPmNvdW50XSk7CiAgICAgICAgICAgICR2YXJBZnRlciA9IGlzc2V0KCR0aGlzLT5idWZmZXJbJHRoaXMtPmNvdW50XSkgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5idWZmZXJbJHRoaXMtPmNvdW50XSA9PT0gJyQnOwoKICAgICAgICAgICAgJHRoaXMtPndoaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICRvcCA9ICRtWzFdOwoKICAgICAgICAgICAgLy8gZG9uJ3QgdHVybiBuZWdhdGl2ZSBudW1iZXJzIGludG8gZXhwcmVzc2lvbnMKICAgICAgICAgICAgaWYgKCRvcCA9PT0gJy0nICYmICR3aGl0ZUJlZm9yZSAmJiAhICR3aGl0ZUFmdGVyICYmICEgJHZhckFmdGVyKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEgJHRoaXMtPnZhbHVlKCRyaHMpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gcGVlayBhbmQgc2VlIGlmIHJocyBiZWxvbmdzIHRvIG5leHQgb3BlcmF0b3IKICAgICAgICAgICAgaWYgKCR0aGlzLT5wZWVrKCRvcGVyYXRvcnMsICRuZXh0KSAmJiBzZWxmOjokcHJlY2VkZW5jZVskbmV4dFsxXV0gPiBzZWxmOjokcHJlY2VkZW5jZVskb3BdKSB7CiAgICAgICAgICAgICAgICAkcmhzID0gJHRoaXMtPmV4cEhlbHBlcigkcmhzLCBzZWxmOjokcHJlY2VkZW5jZVskbmV4dFsxXV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbGhzID0gW1R5cGU6OlRfRVhQUkVTU0lPTiwgJG9wLCAkbGhzLCAkcmhzLCAkdGhpcy0+aW5QYXJlbnMsICR3aGl0ZUJlZm9yZSwgJHdoaXRlQWZ0ZXJdOwogICAgICAgICAgICAkc3MgPSAkdGhpcy0+c2VlaygpOwogICAgICAgICAgICAkd2hpdGVCZWZvcmUgPSBpc3NldCgkdGhpcy0+YnVmZmVyWyR0aGlzLT5jb3VudCAtIDFdKSAmJgogICAgICAgICAgICAgICAgY3R5cGVfc3BhY2UoJHRoaXMtPmJ1ZmZlclskdGhpcy0+Y291bnQgLSAxXSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkc3MpOwoKICAgICAgICByZXR1cm4gJGxoczsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIHZhbHVlCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbHVlKCYkb3V0KQogICAgewogICAgICAgICRzID0gJHRoaXMtPnNlZWsoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdub3QnLCBmYWxzZSkgJiYgJHRoaXMtPndoaXRlc3BhY2UoKSAmJiAkdGhpcy0+dmFsdWUoJGlubmVyKSkgewogICAgICAgICAgICAkb3V0ID0gW1R5cGU6OlRfVU5BUlksICdub3QnLCAkaW5uZXIsICR0aGlzLT5pblBhcmVuc107CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCdub3QnLCBmYWxzZSkgJiYgJHRoaXMtPnBhcmVuVmFsdWUoJGlubmVyKSkgewogICAgICAgICAgICAkb3V0ID0gW1R5cGU6OlRfVU5BUlksICdub3QnLCAkaW5uZXIsICR0aGlzLT5pblBhcmVuc107CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCcrJykgJiYgJHRoaXMtPnZhbHVlKCRpbm5lcikpIHsKICAgICAgICAgICAgJG91dCA9IFtUeXBlOjpUX1VOQVJZLCAnKycsICRpbm5lciwgJHRoaXMtPmluUGFyZW5zXTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwoKICAgICAgICAvLyBuZWdhdGlvbgogICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnLScsIGZhbHNlKSAmJgogICAgICAgICAgICAoJHRoaXMtPnZhcmlhYmxlKCRpbm5lcikgfHwKICAgICAgICAgICAgJHRoaXMtPnVuaXQoJGlubmVyKSB8fAogICAgICAgICAgICAkdGhpcy0+cGFyZW5WYWx1ZSgkaW5uZXIpKQogICAgICAgICkgewogICAgICAgICAgICAkb3V0ID0gW1R5cGU6OlRfVU5BUlksICctJywgJGlubmVyLCAkdGhpcy0+aW5QYXJlbnNdOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgIGlmICgkdGhpcy0+cGFyZW5WYWx1ZSgkb3V0KSB8fAogICAgICAgICAgICAkdGhpcy0+aW50ZXJwb2xhdGlvbigkb3V0KSB8fAogICAgICAgICAgICAkdGhpcy0+dmFyaWFibGUoJG91dCkgfHwKICAgICAgICAgICAgJHRoaXMtPmNvbG9yKCRvdXQpIHx8CiAgICAgICAgICAgICR0aGlzLT51bml0KCRvdXQpIHx8CiAgICAgICAgICAgICR0aGlzLT5zdHJpbmcoJG91dCkgfHwKICAgICAgICAgICAgJHRoaXMtPmZ1bmMoJG91dCkgfHwKICAgICAgICAgICAgJHRoaXMtPnByb2dpZCgkb3V0KQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+a2V5d29yZCgka2V5d29yZCkpIHsKICAgICAgICAgICAgaWYgKCRrZXl3b3JkID09PSAnbnVsbCcpIHsKICAgICAgICAgICAgICAgICRvdXQgPSBbVHlwZTo6VF9OVUxMXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRvdXQgPSBbVHlwZTo6VF9LRVlXT1JELCAka2V5d29yZF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgcGFyZW50aGVzaXplZCB2YWx1ZQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwYXJlblZhbHVlKCYkb3V0KQogICAgewogICAgICAgICRzID0gJHRoaXMtPnNlZWsoKTsKCiAgICAgICAgJGluUGFyZW5zID0gJHRoaXMtPmluUGFyZW5zOwoKICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJygnKSkgewogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJyknKSkgewogICAgICAgICAgICAgICAgJG91dCA9IFtUeXBlOjpUX0xJU1QsICcnLCBbXV07CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5pblBhcmVucyA9IHRydWU7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmV4cHJlc3Npb24oJGV4cCkgJiYgJHRoaXMtPmxpdGVyYWwoJyknKSkgewogICAgICAgICAgICAgICAgJG91dCA9ICRleHA7CiAgICAgICAgICAgICAgICAkdGhpcy0+aW5QYXJlbnMgPSAkaW5QYXJlbnM7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5pblBhcmVucyA9ICRpblBhcmVuczsKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlICJwcm9naWQ6IgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwcm9naWQoJiRvdXQpCiAgICB7CiAgICAgICAgJHMgPSAkdGhpcy0+c2VlaygpOwoKICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ3Byb2dpZDonLCBmYWxzZSkgJiYKICAgICAgICAgICAgJHRoaXMtPm9wZW5TdHJpbmcoJygnLCAkZm4pICYmCiAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCcoJykKICAgICAgICApIHsKICAgICAgICAgICAgJHRoaXMtPm9wZW5TdHJpbmcoJyknLCAkYXJncywgJygnKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnKScpKSB7CiAgICAgICAgICAgICAgICAkb3V0ID0gW1R5cGU6OlRfU1RSSU5HLCAnJywgWwogICAgICAgICAgICAgICAgICAgICdwcm9naWQ6JywgJGZuLCAnKCcsICRhcmdzLCAnKScKICAgICAgICAgICAgICAgIF1dOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGZ1bmN0aW9uIGNhbGwKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZnVuYygmJGZ1bmMpCiAgICB7CiAgICAgICAgJHMgPSAkdGhpcy0+c2VlaygpOwoKICAgICAgICBpZiAoJHRoaXMtPmtleXdvcmQoJG5hbWUsIGZhbHNlKSAmJgogICAgICAgICAgICAkdGhpcy0+bGl0ZXJhbCgnKCcpCiAgICAgICAgKSB7CiAgICAgICAgICAgIGlmICgkbmFtZSA9PT0gJ2FscGhhJyAmJiAkdGhpcy0+YXJndW1lbnRMaXN0KCRhcmdzKSkgewogICAgICAgICAgICAgICAgJGZ1bmMgPSBbVHlwZTo6VF9GVU5DVElPTiwgJG5hbWUsIFtUeXBlOjpUX1NUUklORywgJycsICRhcmdzXV07CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkbmFtZSAhPT0gJ2V4cHJlc3Npb24nICYmICEgcHJlZ19tYXRjaCgnL14oLVthLXpdKy0pP2NhbGMkLycsICRuYW1lKSkgewogICAgICAgICAgICAgICAgJHNzID0gJHRoaXMtPnNlZWsoKTsKCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmFyZ1ZhbHVlcygkYXJncykgJiYgJHRoaXMtPmxpdGVyYWwoJyknKSkgewogICAgICAgICAgICAgICAgICAgICRmdW5jID0gW1R5cGU6OlRfRlVOQ1RJT05fQ0FMTCwgJG5hbWUsICRhcmdzXTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHNzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCgkdGhpcy0+b3BlblN0cmluZygnKScsICRzdHIsICcoJykgfHwgdHJ1ZSkgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCcpJykKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkYXJncyA9IFtdOwoKICAgICAgICAgICAgICAgIGlmICghIGVtcHR5KCRzdHIpKSB7CiAgICAgICAgICAgICAgICAgICAgJGFyZ3NbXSA9IFtudWxsLCBbVHlwZTo6VF9TVFJJTkcsICcnLCBbJHN0cl1dXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZnVuYyA9IFtUeXBlOjpUX0ZVTkNUSU9OX0NBTEwsICRuYW1lLCAkYXJnc107CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgZnVuY3Rpb24gY2FsbCBhcmd1bWVudCBsaXN0CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFyZ3VtZW50TGlzdCgmJG91dCkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CiAgICAgICAgJHRoaXMtPmxpdGVyYWwoJygnKTsKCiAgICAgICAgJGFyZ3MgPSBbXTsKCiAgICAgICAgd2hpbGUgKCR0aGlzLT5rZXl3b3JkKCR2YXIpKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnPScpICYmICR0aGlzLT5leHByZXNzaW9uKCRleHApKSB7CiAgICAgICAgICAgICAgICAkYXJnc1tdID0gW1R5cGU6OlRfU1RSSU5HLCAnJywgWyR2YXIgLiAnPSddXTsKICAgICAgICAgICAgICAgICRhcmcgPSAkZXhwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRhcmdzW10gPSAkYXJnOwoKICAgICAgICAgICAgaWYgKCEgJHRoaXMtPmxpdGVyYWwoJywnKSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRhcmdzW10gPSBbVHlwZTo6VF9TVFJJTkcsICcnLCBbJywgJ11dOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgJHRoaXMtPmxpdGVyYWwoJyknKSB8fCAhIGNvdW50KCRhcmdzKSkgewogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gJGFyZ3M7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgbWl4aW4vZnVuY3Rpb24gZGVmaW5pdGlvbiAgYXJndW1lbnQgbGlzdAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhcmd1bWVudERlZigmJG91dCkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CiAgICAgICAgJHRoaXMtPmxpdGVyYWwoJygnKTsKCiAgICAgICAgJGFyZ3MgPSBbXTsKCiAgICAgICAgd2hpbGUgKCR0aGlzLT52YXJpYWJsZSgkdmFyKSkgewogICAgICAgICAgICAkYXJnID0gWyR2YXJbMV0sIG51bGwsIGZhbHNlXTsKCiAgICAgICAgICAgICRzcyA9ICR0aGlzLT5zZWVrKCk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJzonKSAmJiAkdGhpcy0+Z2VuZXJpY0xpc3QoJGRlZmF1bHRWYWwsICdleHByZXNzaW9uJykpIHsKICAgICAgICAgICAgICAgICRhcmdbMV0gPSAkZGVmYXVsdFZhbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzcyA9ICR0aGlzLT5zZWVrKCk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJy4uLicpKSB7CiAgICAgICAgICAgICAgICAkc3NzID0gJHRoaXMtPnNlZWsoKTsKCiAgICAgICAgICAgICAgICBpZiAoISAkdGhpcy0+bGl0ZXJhbCgnKScpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRocm93UGFyc2VFcnJvcignLi4uIGhhcyB0byBiZSBhZnRlciB0aGUgZmluYWwgYXJndW1lbnQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkYXJnWzJdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzc3MpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHNzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGFyZ3NbXSA9ICRhcmc7CgogICAgICAgICAgICBpZiAoISAkdGhpcy0+bGl0ZXJhbCgnLCcpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCEgJHRoaXMtPmxpdGVyYWwoJyknKSkgewogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gJGFyZ3M7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgbWFwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hcCgmJG91dCkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CgogICAgICAgIGlmICghICR0aGlzLT5saXRlcmFsKCcoJykpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJGtleXMgPSBbXTsKICAgICAgICAkdmFsdWVzID0gW107CgogICAgICAgIHdoaWxlICgkdGhpcy0+Z2VuZXJpY0xpc3QoJGtleSwgJ2V4cHJlc3Npb24nKSAmJiAkdGhpcy0+bGl0ZXJhbCgnOicpICYmCiAgICAgICAgICAgICR0aGlzLT5nZW5lcmljTGlzdCgkdmFsdWUsICdleHByZXNzaW9uJykKICAgICAgICApIHsKICAgICAgICAgICAgJGtleXNbXSA9ICRrZXk7CiAgICAgICAgICAgICR2YWx1ZXNbXSA9ICR2YWx1ZTsKCiAgICAgICAgICAgIGlmICghICR0aGlzLT5saXRlcmFsKCcsJykpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoISBjb3VudCgka2V5cykgfHwgISAkdGhpcy0+bGl0ZXJhbCgnKScpKSB7CiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRvdXQgPSBbVHlwZTo6VF9NQVAsICRrZXlzLCAkdmFsdWVzXTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBjb2xvcgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb2xvcigmJG91dCkKICAgIHsKICAgICAgICAkY29sb3IgPSBbVHlwZTo6VF9DT0xPUl07CgogICAgICAgIGlmICgkdGhpcy0+bWF0Y2goJygjKFswLTlhLWZdezZ9KXwjKFswLTlhLWZdezN9KSknLCAkbSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRtWzNdKSkgewogICAgICAgICAgICAgICAgJG51bSA9IGhleGRlYygkbVszXSk7CgogICAgICAgICAgICAgICAgZm9yZWFjaCAoWzMsIDIsIDFdIGFzICRpKSB7CiAgICAgICAgICAgICAgICAgICAgJHQgPSAkbnVtICYgMHhmOwogICAgICAgICAgICAgICAgICAgICRjb2xvclskaV0gPSAkdCA8PCA0IHwgJHQ7CiAgICAgICAgICAgICAgICAgICAgJG51bSA+Pj0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRudW0gPSBoZXhkZWMoJG1bMl0pOwoKICAgICAgICAgICAgICAgIGZvcmVhY2ggKFszLCAyLCAxXSBhcyAkaSkgewogICAgICAgICAgICAgICAgICAgICRjb2xvclskaV0gPSAkbnVtICYgMHhmZjsKICAgICAgICAgICAgICAgICAgICAkbnVtID4+PSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkb3V0ID0gJGNvbG9yOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBudW1iZXIgd2l0aCB1bml0CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHVuaXQoJiR1bml0KQogICAgewogICAgICAgIGlmICgkdGhpcy0+bWF0Y2goJyhbMC05XSooXC4pP1swLTldKykoWyVhLXpBLVpdKyk/JywgJG0pKSB7CiAgICAgICAgICAgICR1bml0ID0gbmV3IE5vZGVcTnVtYmVyKCRtWzFdLCBlbXB0eSgkbVszXSkgPyAnJyA6ICRtWzNdKTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2Ugc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHN0cmluZygmJG91dCkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CgogICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnIicsIGZhbHNlKSkgewogICAgICAgICAgICAkZGVsaW0gPSAnIic7CiAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5saXRlcmFsKCInIiwgZmFsc2UpKSB7CiAgICAgICAgICAgICRkZWxpbSA9ICInIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkY29udGVudCA9IFtdOwogICAgICAgICRvbGRXaGl0ZSA9ICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQ7CiAgICAgICAgJHRoaXMtPmVhdFdoaXRlRGVmYXVsdCA9IGZhbHNlOwogICAgICAgICRoYXNJbnRlcnBvbGF0aW9uID0gZmFsc2U7CgogICAgICAgIHdoaWxlICgkdGhpcy0+bWF0Y2hTdHJpbmcoJG0sICRkZWxpbSkpIHsKICAgICAgICAgICAgaWYgKCRtWzFdICE9PSAnJykgewogICAgICAgICAgICAgICAgJGNvbnRlbnRbXSA9ICRtWzFdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJG1bMl0gPT09ICcjeycpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5jb3VudCAtPSBzdHJsZW4oJG1bMl0pOwoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+aW50ZXJwb2xhdGlvbigkaW50ZXIsIGZhbHNlKSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50W10gPSAkaW50ZXI7CiAgICAgICAgICAgICAgICAgICAgJGhhc0ludGVycG9sYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y291bnQgKz0gc3RybGVuKCRtWzJdKTsKICAgICAgICAgICAgICAgICAgICAkY29udGVudFtdID0gJyN7JzsgLy8gaWdub3JlIGl0CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkbVsyXSA9PT0gJ1xcJykgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCciJywgZmFsc2UpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRbXSA9ICRtWzJdIC4gJyInOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5saXRlcmFsKCInIiwgZmFsc2UpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRbXSA9ICRtWzJdIC4gIiciOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY29udGVudFtdID0gJG1bMl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y291bnQgLT0gc3RybGVuKCRkZWxpbSk7CiAgICAgICAgICAgICAgICBicmVhazsgLy8gZGVsaW0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmVhdFdoaXRlRGVmYXVsdCA9ICRvbGRXaGl0ZTsKCiAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCRkZWxpbSkpIHsKICAgICAgICAgICAgaWYgKCRoYXNJbnRlcnBvbGF0aW9uKSB7CiAgICAgICAgICAgICAgICAkZGVsaW0gPSAnIic7CgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNvbnRlbnQgYXMgJiRzdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHN0cmluZyA9PT0gIlxcJyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmluZyA9ICInIjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHN0cmluZyA9PT0gJ1xcIicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmluZyA9ICciJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRvdXQgPSBbVHlwZTo6VF9TVFJJTkcsICRkZWxpbSwgJGNvbnRlbnRdOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGtleXdvcmQgb3IgaW50ZXJwb2xhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBtaXhlZEtleXdvcmQoJiRvdXQpCiAgICB7CiAgICAgICAgJHBhcnRzID0gW107CgogICAgICAgICRvbGRXaGl0ZSA9ICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQ7CiAgICAgICAgJHRoaXMtPmVhdFdoaXRlRGVmYXVsdCA9IGZhbHNlOwoKICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+a2V5d29yZCgka2V5KSkgewogICAgICAgICAgICAgICAgJHBhcnRzW10gPSAka2V5OwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdGhpcy0+aW50ZXJwb2xhdGlvbigkaW50ZXIpKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICRpbnRlcjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQgPSAkb2xkV2hpdGU7CgogICAgICAgIGlmIChjb3VudCgkcGFydHMpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+ZWF0V2hpdGVEZWZhdWx0KSB7CiAgICAgICAgICAgICR0aGlzLT53aGl0ZXNwYWNlKCk7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gJHBhcnRzOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGFuIHVuYm91bmRlZCBzdHJpbmcgc3RvcHBlZCBieSAkZW5kCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZW5kCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvdXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5lc3RpbmdPcGVuCiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcGVuU3RyaW5nKCRlbmQsICYkb3V0LCAkbmVzdGluZ09wZW4gPSBudWxsKQogICAgewogICAgICAgICRvbGRXaGl0ZSA9ICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQ7CiAgICAgICAgJHRoaXMtPmVhdFdoaXRlRGVmYXVsdCA9IGZhbHNlOwoKICAgICAgICAkcGF0dCA9ICcoLio/KShbXCciXXwjXHt8JyAuICR0aGlzLT5wcmVnUXVvdGUoJGVuZCkgLiAnfCcgLiBzZWxmOjokY29tbWVudFBhdHRlcm4gLiAnKSc7CgogICAgICAgICRuZXN0aW5nTGV2ZWwgPSAwOwoKICAgICAgICAkY29udGVudCA9IFtdOwoKICAgICAgICB3aGlsZSAoJHRoaXMtPm1hdGNoKCRwYXR0LCAkbSwgZmFsc2UpKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkbVsxXSkgJiYgJG1bMV0gIT09ICcnKSB7CiAgICAgICAgICAgICAgICAkY29udGVudFtdID0gJG1bMV07CgogICAgICAgICAgICAgICAgaWYgKCRuZXN0aW5nT3BlbikgewogICAgICAgICAgICAgICAgICAgICRuZXN0aW5nTGV2ZWwgKz0gc3Vic3RyX2NvdW50KCRtWzFdLCAkbmVzdGluZ09wZW4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkdG9rID0gJG1bMl07CgogICAgICAgICAgICAkdGhpcy0+Y291bnQtPSBzdHJsZW4oJHRvayk7CgogICAgICAgICAgICBpZiAoJHRvayA9PT0gJGVuZCAmJiAhICRuZXN0aW5nTGV2ZWwtLSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgoJHRvayA9PT0gIiciIHx8ICR0b2sgPT09ICciJykgJiYgJHRoaXMtPnN0cmluZygkc3RyKSkgewogICAgICAgICAgICAgICAgJGNvbnRlbnRbXSA9ICRzdHI7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0b2sgPT09ICcjeycgJiYgJHRoaXMtPmludGVycG9sYXRpb24oJGludGVyKSkgewogICAgICAgICAgICAgICAgJGNvbnRlbnRbXSA9ICRpbnRlcjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkY29udGVudFtdID0gJHRvazsKICAgICAgICAgICAgJHRoaXMtPmNvdW50Kz0gc3RybGVuKCR0b2spOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmVhdFdoaXRlRGVmYXVsdCA9ICRvbGRXaGl0ZTsKCiAgICAgICAgaWYgKGNvdW50KCRjb250ZW50KSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyB0cmltIHRoZSBlbmQKICAgICAgICBpZiAoaXNfc3RyaW5nKGVuZCgkY29udGVudCkpKSB7CiAgICAgICAgICAgICRjb250ZW50W2NvdW50KCRjb250ZW50KSAtIDFdID0gcnRyaW0oZW5kKCRjb250ZW50KSk7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gW1R5cGU6OlRfU1RSSU5HLCAnJywgJGNvbnRlbnRdOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlciBpbnRlcnBvbGF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgJG91dAogICAgICogQHBhcmFtIGJvb2xlYW4gJGxvb2tXaGl0ZSBzYXZlIGluZm9ybWF0aW9uIGFib3V0IHdoaXRlc3BhY2UgYmVmb3JlIGFuZCBhZnRlcgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaW50ZXJwb2xhdGlvbigmJG91dCwgJGxvb2tXaGl0ZSA9IHRydWUpCiAgICB7CiAgICAgICAgJG9sZFdoaXRlID0gJHRoaXMtPmVhdFdoaXRlRGVmYXVsdDsKICAgICAgICAkdGhpcy0+ZWF0V2hpdGVEZWZhdWx0ID0gdHJ1ZTsKCiAgICAgICAgJHMgPSAkdGhpcy0+c2VlaygpOwoKICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJyN7JykgJiYgJHRoaXMtPnZhbHVlTGlzdCgkdmFsdWUpICYmICR0aGlzLT5saXRlcmFsKCd9JywgZmFsc2UpKSB7CiAgICAgICAgICAgIGlmICgkbG9va1doaXRlKSB7CiAgICAgICAgICAgICAgICAkbGVmdCA9IHByZWdfbWF0Y2goJy9ccy8nLCAkdGhpcy0+YnVmZmVyWyRzIC0gMV0pID8gJyAnIDogJyc7CiAgICAgICAgICAgICAgICAkcmlnaHQgPSBwcmVnX21hdGNoKCcvXHMvJywgJHRoaXMtPmJ1ZmZlclskdGhpcy0+Y291bnRdKSA/ICcgJzogJyc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbGVmdCA9ICRyaWdodCA9IGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkb3V0ID0gW1R5cGU6OlRfSU5URVJQT0xBVEUsICR2YWx1ZSwgJGxlZnQsICRyaWdodF07CiAgICAgICAgICAgICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQgPSAkb2xkV2hpdGU7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmVhdFdoaXRlRGVmYXVsdCkgewogICAgICAgICAgICAgICAgJHRoaXMtPndoaXRlc3BhY2UoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CiAgICAgICAgJHRoaXMtPmVhdFdoaXRlRGVmYXVsdCA9ICRvbGRXaGl0ZTsKCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgcHJvcGVydHkgbmFtZSAoYXMgYW4gYXJyYXkgb2YgcGFydHMgb3IgYSBzdHJpbmcpCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHByb3BlcnR5TmFtZSgmJG91dCkKICAgIHsKICAgICAgICAkcGFydHMgPSBbXTsKCiAgICAgICAgJG9sZFdoaXRlID0gJHRoaXMtPmVhdFdoaXRlRGVmYXVsdDsKICAgICAgICAkdGhpcy0+ZWF0V2hpdGVEZWZhdWx0ID0gZmFsc2U7CgogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5pbnRlcnBvbGF0aW9uKCRpbnRlcikpIHsKICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJGludGVyOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdGhpcy0+a2V5d29yZCgkdGV4dCkpIHsKICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHRleHQ7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGNvdW50KCRwYXJ0cykgPT09IDAgJiYgJHRoaXMtPm1hdGNoKCdbOi4jXScsICRtLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgIC8vIGNzcyBoYWNrcwogICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkbVswXTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5lYXRXaGl0ZURlZmF1bHQgPSAkb2xkV2hpdGU7CgogICAgICAgIGlmIChjb3VudCgkcGFydHMpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIG1hdGNoIGNvbW1lbnQgaGFjawogICAgICAgIGlmIChwcmVnX21hdGNoKAogICAgICAgICAgICBzZWxmOjokd2hpdGVQYXR0ZXJuLAogICAgICAgICAgICAkdGhpcy0+YnVmZmVyLAogICAgICAgICAgICAkbSwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgJHRoaXMtPmNvdW50CiAgICAgICAgKSkgewogICAgICAgICAgICBpZiAoISBlbXB0eSgkbVswXSkpIHsKICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJG1bMF07CiAgICAgICAgICAgICAgICAkdGhpcy0+Y291bnQgKz0gc3RybGVuKCRtWzBdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPndoaXRlc3BhY2UoKTsgLy8gZ2V0IGFueSBleHRyYSB3aGl0ZXNwYWNlCgogICAgICAgICRvdXQgPSBbVHlwZTo6VF9TVFJJTkcsICcnLCAkcGFydHNdOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGNvbW1hIHNlcGFyYXRlZCBzZWxlY3RvciBsaXN0CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNlbGVjdG9ycygmJG91dCkKICAgIHsKICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CiAgICAgICAgJHNlbGVjdG9ycyA9IFtdOwoKICAgICAgICB3aGlsZSAoJHRoaXMtPnNlbGVjdG9yKCRzZWwpKSB7CiAgICAgICAgICAgICRzZWxlY3RvcnNbXSA9ICRzZWw7CgogICAgICAgICAgICBpZiAoISAkdGhpcy0+bGl0ZXJhbCgnLCcpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgd2hpbGUgKCR0aGlzLT5saXRlcmFsKCcsJykpIHsKICAgICAgICAgICAgICAgIDsgLy8gaWdub3JlIGV4dHJhCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChjb3VudCgkc2VsZWN0b3JzKSA9PT0gMCkgewogICAgICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gJHNlbGVjdG9yczsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBzZWxlY3RvciBsaXN0CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNlbGVjdG9yKCYkb3V0KQogICAgewogICAgICAgICRzZWxlY3RvciA9IFtdOwoKICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bWF0Y2goJ1s+K35dKycsICRtKSkgewogICAgICAgICAgICAgICAgJHNlbGVjdG9yW10gPSBbJG1bMF1dOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdGhpcy0+c2VsZWN0b3JTaW5nbGUoJHBhcnQpKSB7CiAgICAgICAgICAgICAgICAkc2VsZWN0b3JbXSA9ICRwYXJ0OwogICAgICAgICAgICAgICAgJHRoaXMtPm1hdGNoKCdccysnLCAkbSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0aGlzLT5tYXRjaCgnXC9bXlwvXStcLycsICRtKSkgewogICAgICAgICAgICAgICAgJHNlbGVjdG9yW10gPSBbJG1bMF1dOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvdW50KCRzZWxlY3RvcikgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJG91dCA9ICRzZWxlY3RvcjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIHRoZSBwYXJ0cyB0aGF0IG1ha2UgdXAgYSBzZWxlY3RvcgogICAgICoKICAgICAqIHtAaW50ZXJuYWwKICAgICAqICAgICBkaXZbeWVzPW5vXSNzb21ldGhpbmcuaGVsbG8ud29ybGQ6bnRoLWNoaWxkKC0ybisxKSVwbGFjZWhvbGRlcgogICAgICogfX0KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc2VsZWN0b3JTaW5nbGUoJiRvdXQpCiAgICB7CiAgICAgICAgJG9sZFdoaXRlID0gJHRoaXMtPmVhdFdoaXRlRGVmYXVsdDsKICAgICAgICAkdGhpcy0+ZWF0V2hpdGVEZWZhdWx0ID0gZmFsc2U7CgogICAgICAgICRwYXJ0cyA9IFtdOwoKICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJyonLCBmYWxzZSkpIHsKICAgICAgICAgICAgJHBhcnRzW10gPSAnKic7CiAgICAgICAgfQoKICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgIC8vIHNlZSBpZiB3ZSBjYW4gc3RvcCBlYXJseQogICAgICAgICAgICBpZiAoJHRoaXMtPm1hdGNoKCdccypbeyxdJywgJG0pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y291bnQtLTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcyA9ICR0aGlzLT5zZWVrKCk7CgogICAgICAgICAgICAvLyBzZWxmCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnJicsIGZhbHNlKSkgewogICAgICAgICAgICAgICAgJHBhcnRzW10gPSBDb21waWxlcjo6JHNlbGZTZWxlY3RvcjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJy4nLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJy4nOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdGhpcy0+bGl0ZXJhbCgnfCcsIGZhbHNlKSkgewogICAgICAgICAgICAgICAgJHBhcnRzW10gPSAnfCc7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0aGlzLT5tYXRjaCgnXFxcXFxTJywgJG0pKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICRtWzBdOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGZvciBrZXlmcmFtZXMKICAgICAgICAgICAgaWYgKCR0aGlzLT51bml0KCR1bml0KSkgewogICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkdW5pdDsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRoaXMtPmtleXdvcmQoJG5hbWUpKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICRuYW1lOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdGhpcy0+aW50ZXJwb2xhdGlvbigkaW50ZXIpKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICRpbnRlcjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJyUnLCBmYWxzZSkgJiYgJHRoaXMtPnBsYWNlaG9sZGVyKCRwbGFjZWhvbGRlcikpIHsKICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJyUnOwogICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkcGxhY2Vob2xkZXI7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCcjJywgZmFsc2UpKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICcjJzsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBhIHBzZXVkbyBzZWxlY3RvcgogICAgICAgICAgICBpZiAoJHRoaXMtPm1hdGNoKCc6Oj8nLCAkbSkgJiYgJHRoaXMtPm1peGVkS2V5d29yZCgkbmFtZVBhcnRzKSkgewogICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkbVswXTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkbmFtZVBhcnRzIGFzICRzdWIpIHsKICAgICAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICRzdWI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHNzID0gJHRoaXMtPnNlZWsoKTsKCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJygnKSAmJgogICAgICAgICAgICAgICAgICAgICgkdGhpcy0+b3BlblN0cmluZygnKScsICRzdHIsICcoJykgfHwgdHJ1ZSkgJiYKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGl0ZXJhbCgnKScpCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICcoJzsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCEgZW1wdHkoJHN0cikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkc3RyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHBhcnRzW10gPSAnKSc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzcyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5zZWVrKCRzKTsKCiAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSBzZWxlY3RvcgogICAgICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJ1snKSAmJgogICAgICAgICAgICAgICAoJHRoaXMtPm9wZW5TdHJpbmcoJ10nLCAkc3RyLCAnWycpIHx8IHRydWUpICYmCiAgICAgICAgICAgICAgICR0aGlzLT5saXRlcmFsKCddJykKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICdbJzsKCiAgICAgICAgICAgICAgICBpZiAoISBlbXB0eSgkc3RyKSkgewogICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHN0cjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICddJzsKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnNlZWsoJHMpOwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZWF0V2hpdGVEZWZhdWx0ID0gJG9sZFdoaXRlOwoKICAgICAgICBpZiAoY291bnQoJHBhcnRzKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gJHBhcnRzOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGEgdmFyaWFibGUKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gdmFyaWFibGUoJiRvdXQpCiAgICB7CiAgICAgICAgJHMgPSAkdGhpcy0+c2VlaygpOwoKICAgICAgICBpZiAoJHRoaXMtPmxpdGVyYWwoJyQnLCBmYWxzZSkgJiYgJHRoaXMtPmtleXdvcmQoJG5hbWUpKSB7CiAgICAgICAgICAgICRvdXQgPSBbVHlwZTo6VF9WQVJJQUJMRSwgJG5hbWVdOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vlaygkcyk7CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGEga2V5d29yZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICR3b3JkCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkZWF0V2hpdGVzcGFjZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24ga2V5d29yZCgmJHdvcmQsICRlYXRXaGl0ZXNwYWNlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPm1hdGNoKAogICAgICAgICAgICAkdGhpcy0+dXRmOAogICAgICAgICAgICAgICAgPyAnKChbXHBMXHdfXC1cKiEiXCddfFtcXFxcXS4pKFtccExcd1wtXyJcJ118W1xcXFxdLikqKScKICAgICAgICAgICAgICAgIDogJygoW1x3X1wtXCohIlwnXXxbXFxcXF0uKShbXHdcLV8iXCddfFtcXFxcXS4pKiknLAogICAgICAgICAgICAkbSwKICAgICAgICAgICAgJGVhdFdoaXRlc3BhY2UKICAgICAgICApKSB7CiAgICAgICAgICAgICR3b3JkID0gJG1bMV07CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGEgcGxhY2Vob2xkZXIKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwbGFjZWhvbGRlcgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGxhY2Vob2xkZXIoJiRwbGFjZWhvbGRlcikKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPm1hdGNoKAogICAgICAgICAgICAkdGhpcy0+dXRmOAogICAgICAgICAgICAgICAgPyAnKFtccExcd1wtX10rfCNbe11bJF1bXHBMXHdcLV9dK1t9XSknCiAgICAgICAgICAgICAgICA6ICcoW1x3XC1fXSt8I1t7XVskXVtcd1wtX10rW31dKScsCiAgICAgICAgICAgICRtCiAgICAgICAgKSkgewogICAgICAgICAgICAkcGxhY2Vob2xkZXIgPSAkbVsxXTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgYSB1cmwKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG91dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gdXJsKCYkb3V0KQogICAgewogICAgICAgIGlmICgkdGhpcy0+bWF0Y2goJyh1cmxcKFxzKihbIlwnXT8pKFteKV0rKVwyXHMqXCkpJywgJG0pKSB7CiAgICAgICAgICAgICRvdXQgPSBbVHlwZTo6VF9TVFJJTkcsICcnLCBbJ3VybCgnIC4gJG1bMl0gLiAkbVszXSAuICRtWzJdIC4gJyknXV07CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN1bWUgYW4gZW5kIG9mIHN0YXRlbWVudCBkZWxpbWl0ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuZCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5saXRlcmFsKCc7JykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmNvdW50ID09PSBzdHJsZW4oJHRoaXMtPmJ1ZmZlcikgfHwgJHRoaXMtPmJ1ZmZlclskdGhpcy0+Y291bnRdID09PSAnfScpIHsKICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgZW5kIG9mIGZpbGUgb3IgYSBjbG9zaW5nIGJsb2NrIG5leHQgdGhlbiB3ZSBkb24ndCBuZWVkIGEgOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFN0cmlwIGFzc2lnbm1lbnQgZmxhZyBmcm9tIHRoZSBsaXN0CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzdHJpcEFzc2lnbm1lbnRGbGFnKCYkdmFsdWUpCiAgICB7CiAgICAgICAgJHRva2VuID0gJiR2YWx1ZTsKCiAgICAgICAgZm9yICgkdG9rZW4gPSAmJHZhbHVlOyAkdG9rZW5bMF0gPT09IFR5cGU6OlRfTElTVCAmJiAoJHMgPSBjb3VudCgkdG9rZW5bMl0pKTsgJHRva2VuID0gJiRsYXN0Tm9kZSkgewogICAgICAgICAgICAkbGFzdE5vZGUgPSAmJHRva2VuWzJdWyRzIC0gMV07CgogICAgICAgICAgICBpZiAoJGxhc3ROb2RlWzBdID09PSBUeXBlOjpUX0tFWVdPUkQgJiYgaW5fYXJyYXkoJGxhc3ROb2RlWzFdLCBbJyFkZWZhdWx0JywgJyFnbG9iYWwnXSkpIHsKICAgICAgICAgICAgICAgIGFycmF5X3BvcCgkdG9rZW5bMl0pOwoKICAgICAgICAgICAgICAgICR0b2tlbiA9ICR0aGlzLT5mbGF0dGVuTGlzdCgkdG9rZW4pOwoKICAgICAgICAgICAgICAgIHJldHVybiAkbGFzdE5vZGVbMV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFN0cmlwIG9wdGlvbmFsIGZsYWcgZnJvbSBzZWxlY3RvciBsaXN0CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzZWxlY3RvcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc3RyaXBPcHRpb25hbEZsYWcoJiRzZWxlY3RvcnMpCiAgICB7CiAgICAgICAgJG9wdGlvbmFsID0gZmFsc2U7CgogICAgICAgICRzZWxlY3RvciA9IGVuZCgkc2VsZWN0b3JzKTsKICAgICAgICAkcGFydCA9IGVuZCgkc2VsZWN0b3IpOwoKICAgICAgICBpZiAoJHBhcnQgPT09IFsnIW9wdGlvbmFsJ10pIHsKICAgICAgICAgICAgYXJyYXlfcG9wKCRzZWxlY3RvcnNbY291bnQoJHNlbGVjdG9ycykgLSAxXSk7CgogICAgICAgICAgICAkb3B0aW9uYWwgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvcHRpb25hbDsKICAgIH0KCiAgICAvKioKICAgICAqIFR1cm4gbGlzdCBvZiBsZW5ndGggMSBpbnRvIHZhbHVlIHR5cGUKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZmxhdHRlbkxpc3QoJHZhbHVlKQogICAgewogICAgICAgIGlmICgkdmFsdWVbMF0gPT09IFR5cGU6OlRfTElTVCAmJiBjb3VudCgkdmFsdWVbMl0pID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZmxhdHRlbkxpc3QoJHZhbHVlWzJdWzBdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICoKICAgICAqIHtAaW50ZXJuYWwKICAgICAqICAgICBhZHZhbmNlIGNvdW50ZXIgdG8gbmV4dCBvY2N1cnJlbmNlIG9mICR3aGF0CiAgICAgKiAgICAgJHVudGlsIC0gZG9uJ3QgaW5jbHVkZSAkd2hhdCBpbiBhZHZhbmNlCiAgICAgKiAgICAgJGFsbG93TmV3bGluZSwgaWYgc3RyaW5nLCB3aWxsIGJlIHVzZWQgYXMgdmFsaWQgY2hhciBzZXQKICAgICAqIH19CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiB0bygkd2hhdCwgJiRvdXQsICR1bnRpbCA9IGZhbHNlLCAkYWxsb3dOZXdsaW5lID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKGlzX3N0cmluZygkYWxsb3dOZXdsaW5lKSkgewogICAgICAgICAgICAkdmFsaWRDaGFycyA9ICRhbGxvd05ld2xpbmU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHZhbGlkQ2hhcnMgPSAkYWxsb3dOZXdsaW5lID8gJy4nIDogIlteXG5dIjsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5tYXRjaCgnKCcgLiAkdmFsaWRDaGFycyAuICcqPyknIC4gJHRoaXMtPnByZWdRdW90ZSgkd2hhdCksICRtLCAhICR1bnRpbCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR1bnRpbCkgewogICAgICAgICAgICAkdGhpcy0+Y291bnQgLT0gc3RybGVuKCR3aGF0KTsgLy8gZ2l2ZSBiYWNrICR3aGF0CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gJG1bMV07CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNob3coKQogICAgewogICAgICAgIGlmICgkdGhpcy0+cGVlaygiKC4qPykoXG58JCkiLCAkbSwgJHRoaXMtPmNvdW50KSkgewogICAgICAgICAgICByZXR1cm4gJG1bMV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBRdW90ZSByZWd1bGFyIGV4cHJlc3Npb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3aGF0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBwcmVnUXVvdGUoJHdoYXQpCiAgICB7CiAgICAgICAgcmV0dXJuIHByZWdfcXVvdGUoJHdoYXQsICcvJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeHRyYWN0IGxpbmUgbnVtYmVycyBmcm9tIGJ1ZmZlcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ1ZmZlcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RMaW5lTnVtYmVycygkYnVmZmVyKQogICAgewogICAgICAgICR0aGlzLT5zb3VyY2VQb3NpdGlvbnMgPSBbMCA9PiAwXTsKICAgICAgICAkcHJldiA9IDA7CgogICAgICAgIHdoaWxlICgoJHBvcyA9IHN0cnBvcygkYnVmZmVyLCAiXG4iLCAkcHJldikpICE9PSBmYWxzZSkgewogICAgICAgICAgICAkdGhpcy0+c291cmNlUG9zaXRpb25zW10gPSAkcG9zOwogICAgICAgICAgICAkcHJldiA9ICRwb3MgKyAxOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnNvdXJjZVBvc2l0aW9uc1tdID0gc3RybGVuKCRidWZmZXIpOwoKICAgICAgICBpZiAoc3Vic3RyKCRidWZmZXIsIC0xKSAhPT0gIlxuIikgewogICAgICAgICAgICAkdGhpcy0+c291cmNlUG9zaXRpb25zW10gPSBzdHJsZW4oJGJ1ZmZlcikgKyAxOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCBzb3VyY2UgbGluZSBudW1iZXIgYW5kIGNvbHVtbiAoZ2l2ZW4gY2hhcmFjdGVyIHBvc2l0aW9uIGluIHRoZSBidWZmZXIpCiAgICAgKgogICAgICogQHBhcmFtIGludGVnZXIgJHBvcwogICAgICoKICAgICAqIEByZXR1cm4gaW50ZWdlcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFNvdXJjZVBvc2l0aW9uKCRwb3MpCiAgICB7CiAgICAgICAgJGxvdyA9IDA7CiAgICAgICAgJGhpZ2ggPSBjb3VudCgkdGhpcy0+c291cmNlUG9zaXRpb25zKTsKCiAgICAgICAgd2hpbGUgKCRsb3cgPCAkaGlnaCkgewogICAgICAgICAgICAkbWlkID0gKGludCkgKCgkaGlnaCArICRsb3cpIC8gMik7CgogICAgICAgICAgICBpZiAoJHBvcyA8ICR0aGlzLT5zb3VyY2VQb3NpdGlvbnNbJG1pZF0pIHsKICAgICAgICAgICAgICAgICRoaWdoID0gJG1pZCAtIDE7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRwb3MgPj0gJHRoaXMtPnNvdXJjZVBvc2l0aW9uc1skbWlkICsgMV0pIHsKICAgICAgICAgICAgICAgICRsb3cgPSAkbWlkICsgMTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gWyRtaWQgKyAxLCAkcG9zIC0gJHRoaXMtPnNvdXJjZVBvc2l0aW9uc1skbWlkXV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRsb3cgKyAxLCAkcG9zIC0gJHRoaXMtPnNvdXJjZVBvc2l0aW9uc1skbG93XV07CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlIGludGVybmFsIGVuY29kaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2F2ZUVuY29kaW5nKCkKICAgIHsKICAgICAgICBpZiAoaW5pX2dldCgnbWJzdHJpbmcuZnVuY19vdmVybG9hZCcpICYgMikgewogICAgICAgICAgICAkdGhpcy0+ZW5jb2RpbmcgPSBtYl9pbnRlcm5hbF9lbmNvZGluZygpOwoKICAgICAgICAgICAgbWJfaW50ZXJuYWxfZW5jb2RpbmcoJ2lzby04ODU5LTEnKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXN0b3JlIGludGVybmFsIGVuY29kaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzdG9yZUVuY29kaW5nKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuY29kaW5nKSB7CiAgICAgICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCR0aGlzLT5lbmNvZGluZyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Server.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCnVzZSBMZWFmb1xTY3NzUGhwXENvbXBpbGVyOwp1c2UgTGVhZm9cU2Nzc1BocFxFeGNlcHRpb25cU2VydmVyRXhjZXB0aW9uOwp1c2UgTGVhZm9cU2Nzc1BocFxWZXJzaW9uOwoKLyoqCiAqIFNlcnZlcgogKgogKiBAYXV0aG9yIExlYWYgQ29yY29yYW4gPGxlYWZvdEBnbWFpbC5jb20+CiAqLwpjbGFzcyBTZXJ2ZXIKewogICAgLyoqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgcHJpdmF0ZSAkc2hvd0Vycm9yc0FzQ1NTOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkZGlyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkY2FjaGVEaXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFxMZWFmb1xTY3NzUGhwXENvbXBpbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJHNjc3M7CgogICAgLyoqCiAgICAgKiBKb2luIHBhdGggY29tcG9uZW50cwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxlZnQgIFBhdGggY29tcG9uZW50LCBsZWZ0IG9mIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyaWdodCBQYXRoIGNvbXBvbmVudCwgcmlnaHQgb2YgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gam9pbigkbGVmdCwgJHJpZ2h0KQogICAgewogICAgICAgIHJldHVybiBydHJpbSgkbGVmdCwgJy9cXCcpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIGx0cmltKCRyaWdodCwgJy9cXCcpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IG5hbWUgb2YgcmVxdWVzdGVkIC5zY3NzIGZpbGUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpbnB1dE5hbWUoKQogICAgewogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlIGlzc2V0KCRfR0VUWydwJ10pOgogICAgICAgICAgICAgICAgcmV0dXJuICRfR0VUWydwJ107CiAgICAgICAgICAgIGNhc2UgaXNzZXQoJF9TRVJWRVJbJ1BBVEhfSU5GTyddKToKICAgICAgICAgICAgICAgIHJldHVybiAkX1NFUlZFUlsnUEFUSF9JTkZPJ107CiAgICAgICAgICAgIGNhc2UgaXNzZXQoJF9TRVJWRVJbJ0RPQ1VNRU5UX1VSSSddKToKICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdHIoJF9TRVJWRVJbJ0RPQ1VNRU5UX1VSSSddLCBzdHJsZW4oJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10pKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgcGF0aCB0byByZXF1ZXN0ZWQgLnNjc3MgZmlsZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmaW5kSW5wdXQoKQogICAgewogICAgICAgIGlmICgoJGlucHV0ID0gJHRoaXMtPmlucHV0TmFtZSgpKQogICAgICAgICAgICAmJiBzdHJwb3MoJGlucHV0LCAnLi4nKSA9PT0gZmFsc2UKICAgICAgICAgICAgJiYgc3Vic3RyKCRpbnB1dCwgLTUpID09PSAnLnNjc3MnCiAgICAgICAgKSB7CiAgICAgICAgICAgICRuYW1lID0gJHRoaXMtPmpvaW4oJHRoaXMtPmRpciwgJGlucHV0KTsKCiAgICAgICAgICAgIGlmIChpc19maWxlKCRuYW1lKSAmJiBpc19yZWFkYWJsZSgkbmFtZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHBhdGggdG8gY2FjaGVkIC5jc3MgZmlsZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjYWNoZU5hbWUoJGZuYW1lKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+am9pbigkdGhpcy0+Y2FjaGVEaXIsIG1kNSgkZm5hbWUpIC4gJy5jc3MnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBwYXRoIHRvIG1ldGEgZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBtZXRhZGF0YU5hbWUoJG91dCkKICAgIHsKICAgICAgICByZXR1cm4gJG91dCAuICcubWV0YSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciAuc2NzcyBmaWxlIG5lZWRzIHRvIGJlIHJlLWNvbXBpbGVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG91dCAgT3V0cHV0IHBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV0YWcgRVRhZwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGNvbXBpbGUgcmVxdWlyZWQuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBuZWVkc0NvbXBpbGUoJG91dCwgJiRldGFnKQogICAgewogICAgICAgIGlmICghIGlzX2ZpbGUoJG91dCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkbXRpbWUgPSBmaWxlbXRpbWUoJG91dCk7CgogICAgICAgICRtZXRhZGF0YU5hbWUgPSAkdGhpcy0+bWV0YWRhdGFOYW1lKCRvdXQpOwoKICAgICAgICBpZiAoaXNfcmVhZGFibGUoJG1ldGFkYXRhTmFtZSkpIHsKICAgICAgICAgICAgJG1ldGFkYXRhID0gdW5zZXJpYWxpemUoZmlsZV9nZXRfY29udGVudHMoJG1ldGFkYXRhTmFtZSkpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJG1ldGFkYXRhWydpbXBvcnRzJ10gYXMgJGltcG9ydCA9PiAkb3JpZ2luYWxNdGltZSkgewogICAgICAgICAgICAgICAgJGN1cnJlbnRNdGltZSA9IGZpbGVtdGltZSgkaW1wb3J0KTsKCiAgICAgICAgICAgICAgICBpZiAoJGN1cnJlbnRNdGltZSAhPT0gJG9yaWdpbmFsTXRpbWUgfHwgJGN1cnJlbnRNdGltZSA+ICRtdGltZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkbWV0YVZhcnMgPSBjcmMzMihzZXJpYWxpemUoJHRoaXMtPnNjc3MtPmdldFZhcmlhYmxlcygpKSk7CgogICAgICAgICAgICBpZiAoJG1ldGFWYXJzICE9PSAkbWV0YWRhdGFbJ3ZhcnMnXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRldGFnID0gJG1ldGFkYXRhWydldGFnJ107CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBJZi1Nb2RpZmllZC1TaW5jZSBoZWFkZXIgZnJvbSBjbGllbnQgcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldElmTW9kaWZpZWRTaW5jZUhlYWRlcigpCiAgICB7CiAgICAgICAgJG1vZGlmaWVkU2luY2UgPSBudWxsOwoKICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfSUZfTU9ESUZJRURfU0lOQ0UnXSkpIHsKICAgICAgICAgICAgJG1vZGlmaWVkU2luY2UgPSAkX1NFUlZFUlsnSFRUUF9JRl9NT0RJRklFRF9TSU5DRSddOwoKICAgICAgICAgICAgaWYgKGZhbHNlICE9PSAoJHNlbWljb2xvblBvcyA9IHN0cnBvcygkbW9kaWZpZWRTaW5jZSwgJzsnKSkpIHsKICAgICAgICAgICAgICAgICRtb2RpZmllZFNpbmNlID0gc3Vic3RyKCRtb2RpZmllZFNpbmNlLCAwLCAkc2VtaWNvbG9uUG9zKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRtb2RpZmllZFNpbmNlOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IElmLU5vbmUtTWF0Y2ggaGVhZGVyIGZyb20gY2xpZW50IHJlcXVlc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRJZk5vbmVNYXRjaEhlYWRlcigpCiAgICB7CiAgICAgICAgJG5vbmVNYXRjaCA9IG51bGw7CgogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9JRl9OT05FX01BVENIJ10pKSB7CiAgICAgICAgICAgICRub25lTWF0Y2ggPSAkX1NFUlZFUlsnSFRUUF9JRl9OT05FX01BVENIJ107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5vbmVNYXRjaDsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBpbGUgLnNjc3MgZmlsZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluICBJbnB1dCBwYXRoICguc2NzcykKICAgICAqIEBwYXJhbSBzdHJpbmcgJG91dCBPdXRwdXQgcGF0aCAoLmNzcykKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb21waWxlKCRpbiwgJG91dCkKICAgIHsKICAgICAgICAkc3RhcnQgICA9IG1pY3JvdGltZSh0cnVlKTsKICAgICAgICAkY3NzICAgICA9ICR0aGlzLT5zY3NzLT5jb21waWxlKGZpbGVfZ2V0X2NvbnRlbnRzKCRpbiksICRpbik7CiAgICAgICAgJGVsYXBzZWQgPSByb3VuZCgobWljcm90aW1lKHRydWUpIC0gJHN0YXJ0KSwgNCk7CgogICAgICAgICR2ICAgID0gVmVyc2lvbjo6VkVSU0lPTjsKICAgICAgICAkdCAgICA9IGRhdGUoJ3InKTsKICAgICAgICAkY3NzICA9ICIvKiBjb21waWxlZCBieSBzY3NzcGhwICR2IG9uICR0ICgke2VsYXBzZWR9cykgKi9cblxuIiAuICRjc3M7CiAgICAgICAgJGV0YWcgPSBtZDUoJGNzcyk7CgogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRvdXQsICRjc3MpOwogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKAogICAgICAgICAgICAkdGhpcy0+bWV0YWRhdGFOYW1lKCRvdXQpLAogICAgICAgICAgICBzZXJpYWxpemUoWwogICAgICAgICAgICAgICAgJ2V0YWcnICAgID0+ICRldGFnLAogICAgICAgICAgICAgICAgJ2ltcG9ydHMnID0+ICR0aGlzLT5zY3NzLT5nZXRQYXJzZWRGaWxlcygpLAogICAgICAgICAgICAgICAgJ3ZhcnMnICAgID0+IGNyYzMyKHNlcmlhbGl6ZSgkdGhpcy0+c2Nzcy0+Z2V0VmFyaWFibGVzKCkpKSwKICAgICAgICAgICAgXSkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gWyRjc3MsICRldGFnXTsKICAgIH0KCiAgICAvKioKICAgICAqIEZvcm1hdCBlcnJvciBhcyBhIHBzZXVkby1lbGVtZW50IGluIENTUwogICAgICoKICAgICAqIEBwYXJhbSBcRXhjZXB0aW9uICRlcnJvcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVFcnJvckNTUyhcRXhjZXB0aW9uICRlcnJvcikKICAgIHsKICAgICAgICAkbWVzc2FnZSA9IHN0cl9yZXBsYWNlKAogICAgICAgICAgICBbIiciLCAiXG4iXSwKICAgICAgICAgICAgWyJcXCciLCAiXFxBIl0sCiAgICAgICAgICAgICRlcnJvci0+Z2V0ZmlsZSgpIC4gIjpcblxuIiAuICRlcnJvci0+Z2V0TWVzc2FnZSgpCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICJib2R5IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgICAgICAgICAgICAgICBodG1sOmFmdGVyIHsKICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJyRtZXNzYWdlJzsKICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vOwogICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICAgICAgICAgICAgfSI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW5kZXIgZXJyb3JzIGFzIGEgcHNldWRvLWVsZW1lbnQgd2l0aGluIHZhbGlkIENTUywgZGlzcGxheWluZyB0aGUgZXJyb3JzIG9uIGFueQogICAgICogcGFnZSB0aGF0IGluY2x1ZGVzIHRoaXMgQ1NTLgogICAgICoKICAgICAqIEBwYXJhbSBib29sZWFuICRzaG93CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaG93RXJyb3JzQXNDU1MoJHNob3cgPSB0cnVlKQogICAgewogICAgICAgICR0aGlzLT5zaG93RXJyb3JzQXNDU1MgPSAkc2hvdzsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBpbGUgLnNjc3MgZmlsZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluICBJbnB1dCBmaWxlICguc2NzcykKICAgICAqIEBwYXJhbSBzdHJpbmcgJG91dCBPdXRwdXQgZmlsZSAoLmNzcykgb3B0aW9uYWwKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xib29sCiAgICAgKgogICAgICogQHRocm93cyBcTGVhZm9cU2Nzc1BocFxFeGNlcHRpb25cU2VydmVyRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlRmlsZSgkaW4sICRvdXQgPSBudWxsKQogICAgewogICAgICAgIGlmICghIGlzX3JlYWRhYmxlKCRpbikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZlckV4Y2VwdGlvbignbG9hZCBlcnJvcjogZmFpbGVkIHRvIGZpbmQgJyAuICRpbik7CiAgICAgICAgfQoKICAgICAgICAkcGkgPSBwYXRoaW5mbygkaW4pOwoKICAgICAgICAkdGhpcy0+c2Nzcy0+YWRkSW1wb3J0UGF0aCgkcGlbJ2Rpcm5hbWUnXSAuICcvJyk7CgogICAgICAgICRjb21waWxlZCA9ICR0aGlzLT5zY3NzLT5jb21waWxlKGZpbGVfZ2V0X2NvbnRlbnRzKCRpbiksICRpbik7CgogICAgICAgIGlmICgkb3V0ICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBmaWxlX3B1dF9jb250ZW50cygkb3V0LCAkY29tcGlsZWQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjb21waWxlZDsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGZpbGUgbmVlZCBjb21waWxpbmcKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbiAgSW5wdXQgZmlsZSAoLnNjc3MpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXQgT3V0cHV0IGZpbGUgKC5jc3MpCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja2VkQ29tcGlsZSgkaW4sICRvdXQpCiAgICB7CiAgICAgICAgaWYgKCEgaXNfZmlsZSgkb3V0KSB8fCBmaWxlbXRpbWUoJGluKSA+IGZpbGVtdGltZSgkb3V0KSkgewogICAgICAgICAgICAkdGhpcy0+Y29tcGlsZUZpbGUoJGluLCAkb3V0KTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGlsZSByZXF1ZXN0ZWQgc2NzcyBhbmQgc2VydmUgY3NzLiAgT3V0cHV0cyBIVFRQIHJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNhbHQgUHJlZml4IGEgc3RyaW5nIHRvIHRoZSBmaWxlbmFtZSBmb3IgY3JlYXRpbmcgdGhlIGNhY2hlIG5hbWUgaGFzaAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VydmUoJHNhbHQgPSAnJykKICAgIHsKICAgICAgICAkcHJvdG9jb2wgPSBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BST1RPQ09MJ10pCiAgICAgICAgICAgID8gJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddCiAgICAgICAgICAgIDogJ0hUVFAvMS4wJzsKCiAgICAgICAgaWYgKCRpbnB1dCA9ICR0aGlzLT5maW5kSW5wdXQoKSkgewogICAgICAgICAgICAkb3V0cHV0ID0gJHRoaXMtPmNhY2hlTmFtZSgkc2FsdCAuICRpbnB1dCk7CiAgICAgICAgICAgICRldGFnID0gJG5vbmVNYXRjaCA9IHRyaW0oJHRoaXMtPmdldElmTm9uZU1hdGNoSGVhZGVyKCksICciJyk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPm5lZWRzQ29tcGlsZSgkb3V0cHV0LCAkZXRhZykpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgbGlzdCgkY3NzLCAkZXRhZykgPSAkdGhpcy0+Y29tcGlsZSgkaW5wdXQsICRvdXRwdXQpOwoKICAgICAgICAgICAgICAgICAgICAkbGFzdE1vZGlmaWVkID0gZ21kYXRlKCdELCBkIE0gWSBIOmk6cycsIGZpbGVtdGltZSgkb3V0cHV0KSkgLiAnIEdNVCc7CgogICAgICAgICAgICAgICAgICAgIGhlYWRlcignTGFzdC1Nb2RpZmllZDogJyAuICRsYXN0TW9kaWZpZWQpOwogICAgICAgICAgICAgICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L2NzcycpOwogICAgICAgICAgICAgICAgICAgIGhlYWRlcignRVRhZzogIicgLiAkZXRhZyAuICciJyk7CgogICAgICAgICAgICAgICAgICAgIGVjaG8gJGNzczsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnNob3dFcnJvcnNBc0NTUykgewogICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9jc3MnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJHRoaXMtPmNyZWF0ZUVycm9yQ1NTKCRlKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIoJHByb3RvY29sIC4gJyA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L3BsYWluJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdQYXJzZSBlcnJvcjogJyAuICRlLT5nZXRNZXNzYWdlKCkgLiAiXG4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGhlYWRlcignWC1TQ1NTLUNhY2hlOiB0cnVlJyk7CiAgICAgICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L2NzcycpOwogICAgICAgICAgICBoZWFkZXIoJ0VUYWc6ICInIC4gJGV0YWcgLiAnIicpOwoKICAgICAgICAgICAgaWYgKCRldGFnID09PSAkbm9uZU1hdGNoKSB7CiAgICAgICAgICAgICAgICBoZWFkZXIoJHByb3RvY29sIC4gJyAzMDQgTm90IE1vZGlmaWVkJyk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbW9kaWZpZWRTaW5jZSA9ICR0aGlzLT5nZXRJZk1vZGlmaWVkU2luY2VIZWFkZXIoKTsKICAgICAgICAgICAgJG10aW1lID0gZmlsZW10aW1lKCRvdXRwdXQpOwoKICAgICAgICAgICAgaWYgKHN0cnRvdGltZSgkbW9kaWZpZWRTaW5jZSkgPT09ICRtdGltZSkgewogICAgICAgICAgICAgICAgaGVhZGVyKCRwcm90b2NvbCAuICcgMzA0IE5vdCBNb2RpZmllZCcpOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGxhc3RNb2RpZmllZCAgPSBnbWRhdGUoJ0QsIGQgTSBZIEg6aTpzJywgJG10aW1lKSAuICcgR01UJzsKICAgICAgICAgICAgaGVhZGVyKCdMYXN0LU1vZGlmaWVkOiAnIC4gJGxhc3RNb2RpZmllZCk7CgogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCRvdXRwdXQpOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaGVhZGVyKCRwcm90b2NvbCAuICcgNDA0IE5vdCBGb3VuZCcpOwogICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L3BsYWluJyk7CgogICAgICAgICR2ID0gVmVyc2lvbjo6VkVSU0lPTjsKICAgICAgICBlY2hvICIvKiBJTlBVVCBOT1QgRk9VTkQgc2NzcyAkdiAqL1xuIjsKICAgIH0KCiAgICAvKioKICAgICAqIEJhc2VkIG9uIGV4cGxpY2l0IGlucHV0L291dHB1dCBmaWxlcyBkb2VzIGEgZnVsbCBjaGFuZ2UgY2hlY2sgb24gY2FjaGUgYmVmb3JlIGNvbXBpbGluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkaW4KICAgICAqIEBwYXJhbSBzdHJpbmcgICRvdXQKICAgICAqIEBwYXJhbSBib29sZWFuICRmb3JjZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIENvbXBpbGVkIENTUyByZXN1bHRzCiAgICAgKgogICAgICogQHRocm93cyBcTGVhZm9cU2Nzc1BocFxFeGNlcHRpb25cU2VydmVyRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja2VkQ2FjaGVkQ29tcGlsZSgkaW4sICRvdXQsICRmb3JjZSA9IGZhbHNlKQogICAgewogICAgICAgIGlmICghIGlzX2ZpbGUoJGluKSB8fCAhIGlzX3JlYWRhYmxlKCRpbikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZlckV4Y2VwdGlvbignSW52YWxpZCBvciB1bnJlYWRhYmxlIGlucHV0IGZpbGUgc3BlY2lmaWVkLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzX2Rpcigkb3V0KSB8fCAhIGlzX3dyaXRhYmxlKGZpbGVfZXhpc3RzKCRvdXQpID8gJG91dCA6IGRpcm5hbWUoJG91dCkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2ZXJFeGNlcHRpb24oJ0ludmFsaWQgb3IgdW53cml0YWJsZSBvdXRwdXQgZmlsZSBzcGVjaWZpZWQuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZvcmNlIHx8ICR0aGlzLT5uZWVkc0NvbXBpbGUoJG91dCwgJGV0YWcpKSB7CiAgICAgICAgICAgIGxpc3QoJGNzcywgJGV0YWcpID0gJHRoaXMtPmNvbXBpbGUoJGluLCAkb3V0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY3NzID0gZmlsZV9nZXRfY29udGVudHMoJG91dCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNzczsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgJGRpciAgICAgIFJvb3QgZGlyZWN0b3J5IHRvIC5zY3NzIGZpbGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAkY2FjaGVEaXIgQ2FjaGUgZGlyZWN0b3J5CiAgICAgKiBAcGFyYW0gXExlYWZvXFNjc3NQaHBcQ29tcGlsZXJ8bnVsbCAkc2NzcyAgICAgU0NTUyBjb21waWxlciBpbnN0YW5jZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRpciwgJGNhY2hlRGlyID0gbnVsbCwgJHNjc3MgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5kaXIgPSAkZGlyOwoKICAgICAgICBpZiAoISBpc3NldCgkY2FjaGVEaXIpKSB7CiAgICAgICAgICAgICRjYWNoZURpciA9ICR0aGlzLT5qb2luKCRkaXIsICdzY3NzX2NhY2hlJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y2FjaGVEaXIgPSAkY2FjaGVEaXI7CgogICAgICAgIGlmICghIGlzX2RpcigkdGhpcy0+Y2FjaGVEaXIpKSB7CiAgICAgICAgICAgIG1rZGlyKCR0aGlzLT5jYWNoZURpciwgMDc1NSwgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISBpc3NldCgkc2NzcykpIHsKICAgICAgICAgICAgJHNjc3MgPSBuZXcgQ29tcGlsZXIoKTsKICAgICAgICAgICAgJHNjc3MtPnNldEltcG9ydFBhdGhzKCR0aGlzLT5kaXIpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnNjc3MgPSAkc2NzczsKICAgICAgICAkdGhpcy0+c2hvd0Vycm9yc0FzQ1NTID0gZmFsc2U7CgogICAgICAgIGlmICghIGluaV9nZXQoJ2RhdGUudGltZXpvbmUnKSkgewogICAgICAgICAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdVVEMnKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHNlcnZlIGNvbXBpbGVkIHNjc3MKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFJvb3QgcGF0aAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlcnZlRnJvbSgkcGF0aCkKICAgIHsKICAgICAgICAkc2VydmVyID0gbmV3IHNlbGYoJHBhdGgpOwogICAgICAgICRzZXJ2ZXItPnNlcnZlKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Type.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCi8qKgogKiBCbG9jay9ub2RlIHR5cGVzCiAqCiAqIEBhdXRob3IgQW50aG9uIFBhbmcgPGFudGhvbi5wYW5nQGdtYWlsLmNvbT4KICovCmNsYXNzIFR5cGUKewogICAgY29uc3QgVF9BU1NJR04gPSAnYXNzaWduJzsKICAgIGNvbnN0IFRfQVRfUk9PVCA9ICdhdC1yb290JzsKICAgIGNvbnN0IFRfQkxPQ0sgPSAnYmxvY2snOwogICAgY29uc3QgVF9CUkVBSyA9ICdicmVhayc7CiAgICBjb25zdCBUX0NIQVJTRVQgPSAnY2hhcnNldCc7CiAgICBjb25zdCBUX0NPTE9SID0gJ2NvbG9yJzsKICAgIGNvbnN0IFRfQ09NTUVOVCA9ICdjb21tZW50JzsKICAgIGNvbnN0IFRfQ09OVElOVUUgPSAnY29udGludWUnOwogICAgY29uc3QgVF9DT05UUk9MID0gJ2NvbnRyb2wnOwogICAgY29uc3QgVF9ERUJVRyA9ICdkZWJ1Zyc7CiAgICBjb25zdCBUX0RJUkVDVElWRSA9ICdkaXJlY3RpdmUnOwogICAgY29uc3QgVF9FQUNIID0gJ2VhY2gnOwogICAgY29uc3QgVF9FTFNFID0gJ2Vsc2UnOwogICAgY29uc3QgVF9FTFNFSUYgPSAnZWxzZWlmJzsKICAgIGNvbnN0IFRfRVJST1IgPSAnZXJyb3InOwogICAgY29uc3QgVF9FWFBSRVNTSU9OID0gJ2V4cCc7CiAgICBjb25zdCBUX0VYVEVORCA9ICdleHRlbmQnOwogICAgY29uc3QgVF9GT1IgPSAnZm9yJzsKICAgIGNvbnN0IFRfRlVOQ1RJT04gPSAnZnVuY3Rpb24nOwogICAgY29uc3QgVF9GVU5DVElPTl9DQUxMID0gJ2ZuY2FsbCc7CiAgICBjb25zdCBUX0hTTCA9ICdoc2wnOwogICAgY29uc3QgVF9JRiA9ICdpZic7CiAgICBjb25zdCBUX0lNUE9SVCA9ICdpbXBvcnQnOwogICAgY29uc3QgVF9JTkNMVURFID0gJ2luY2x1ZGUnOwogICAgY29uc3QgVF9JTlRFUlBPTEFURSA9ICdpbnRlcnBvbGF0ZSc7CiAgICBjb25zdCBUX0lOVEVSUE9MQVRFRCA9ICdpbnRlcnBvbGF0ZWQnOwogICAgY29uc3QgVF9LRVlXT1JEID0gJ2tleXdvcmQnOwogICAgY29uc3QgVF9MSVNUID0gJ2xpc3QnOwogICAgY29uc3QgVF9NQVAgPSAnbWFwJzsKICAgIGNvbnN0IFRfTUVESUEgPSAnbWVkaWEnOwogICAgY29uc3QgVF9NRURJQV9FWFBSRVNTSU9OID0gJ21lZGlhRXhwJzsKICAgIGNvbnN0IFRfTUVESUFfVFlQRSA9ICdtZWRpYVR5cGUnOwogICAgY29uc3QgVF9NRURJQV9WQUxVRSA9ICdtZWRpYVZhbHVlJzsKICAgIGNvbnN0IFRfTUlYSU4gPSAnbWl4aW4nOwogICAgY29uc3QgVF9NSVhJTl9DT05URU5UID0gJ21peGluX2NvbnRlbnQnOwogICAgY29uc3QgVF9ORVNURURfUFJPUEVSVFkgPSAnbmVzdGVkcHJvcCc7CiAgICBjb25zdCBUX05PVCA9ICdub3QnOwogICAgY29uc3QgVF9OVUxMID0gJ251bGwnOwogICAgY29uc3QgVF9OVU1CRVIgPSAnbnVtYmVyJzsKICAgIGNvbnN0IFRfUkVUVVJOID0gJ3JldHVybic7CiAgICBjb25zdCBUX1JPT1QgPSAncm9vdCc7CiAgICBjb25zdCBUX1NDU1NQSFBfSU1QT1JUX09OQ0UgPSAnc2Nzc3BocC1pbXBvcnQtb25jZSc7CiAgICBjb25zdCBUX1NFTEYgPSAnc2VsZic7CiAgICBjb25zdCBUX1NUUklORyA9ICdzdHJpbmcnOwogICAgY29uc3QgVF9VTkFSWSA9ICd1bmFyeSc7CiAgICBjb25zdCBUX1ZBUklBQkxFID0gJ3Zhcic7CiAgICBjb25zdCBUX1dBUk4gPSAnd2Fybic7CiAgICBjb25zdCBUX1dISUxFID0gJ3doaWxlJzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Util.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCnVzZSBMZWFmb1xTY3NzUGhwXEJhc2VcUmFuZ2U7CgovKioKICogVXRpbHRpZXMKICoKICogQGF1dGhvciBBbnRob24gUGFuZyA8YW50aG9uLnBhbmdAZ21haWwuY29tPgogKi8KY2xhc3MgVXRpbAp7CiAgICAvKioKICAgICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGZhbGxzIHdpdGhpbiBgcmFuZ2VgIChpbmNsdXNpdmUpLCBsZWF2aW5nCiAgICAgKiByb29tIGZvciBzbGlnaHQgZmxvYXRpbmctcG9pbnQgZXJyb3JzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgIFRoZSBuYW1lIG9mIHRoZSB2YWx1ZS4gVXNlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KICAgICAqIEBwYXJhbSBSYW5nZSAgJHJhbmdlIFJhbmdlIG9mIHZhbHVlcy4KICAgICAqIEBwYXJhbSBhcnJheSAgJHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHVuaXQgIFRoZSB1bml0IG9mIHRoZSB2YWx1ZS4gVXNlZCBpbiBlcnJvciByZXBvcnRpbmcuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBgdmFsdWVgIGFkanVzdGVkIHRvIGZhbGwgd2l0aGluIHJhbmdlLCBpZiBpdCB3YXMgb3V0c2lkZSBieSBhIGZsb2F0aW5nLXBvaW50IG1hcmdpbi4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja1JhbmdlKCRuYW1lLCBSYW5nZSAkcmFuZ2UsICR2YWx1ZSwgJHVuaXQgPSAnJykKICAgIHsKICAgICAgICAkdmFsID0gJHZhbHVlWzFdOwogICAgICAgICRncmFjZSA9IG5ldyBSYW5nZSgtMC4wMDAwMSwgMC4wMDAwMSk7CgogICAgICAgIGlmICgkcmFuZ2UtPmluY2x1ZGVzKCR2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRncmFjZS0+aW5jbHVkZXMoJHZhbCAtICRyYW5nZS0+Zmlyc3QpKSB7CiAgICAgICAgICAgIHJldHVybiAkcmFuZ2UtPmZpcnN0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRncmFjZS0+aW5jbHVkZXMoJHZhbCAtICRyYW5nZS0+bGFzdCkpIHsKICAgICAgICAgICAgcmV0dXJuICRyYW5nZS0+bGFzdDsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCIkbmFtZSB7JHZhbH0gbXVzdCBiZSBiZXR3ZWVuIHskcmFuZ2UtPmZpcnN0fSBhbmQgeyRyYW5nZS0+bGFzdH0kdW5pdCIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/preprocessors/ScssPHP/scssphp/src/Version.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNDU1NQSFAKICoKICogQGNvcHlyaWdodCAyMDEyLTIwMTUgTGVhZiBDb3Jjb3JhbgogKgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKgogKiBAbGluayBodHRwOi8vbGVhZm8uZ2l0aHViLmlvL3Njc3NwaHAKICovCgpuYW1lc3BhY2UgTGVhZm9cU2Nzc1BocDsKCi8qKgogKiBTQ1NTUEhQIHZlcnNpb24KICoKICogQGF1dGhvciBMZWFmIENvcmNvcmFuIDxsZWFmb3RAZ21haWwuY29tPgogKi8KY2xhc3MgVmVyc2lvbgp7CiAgICBjb25zdCBWRVJTSU9OID0gJ3YwLjYuMyc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/templates/preferences.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CjxoMT57JG1vZC0+TGFuZygncHJlZmVyZW5jZXMnKX08L2gxPgoKeyRmb3JtX3N0YXJ0fQoKCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+CgkJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgoJCQk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iLz4KCQk8L3A+Cgk8L2Rpdj4KCgoJPGZpZWxkc2V0PgoJCTxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2Nzc19wcmVwcm9jZXNzb3InKX08L2xlZ2VuZD4KCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4KCQkJCTxsYWJlbD57JG1vZC0+TGFuZygnY2hvb3NlX3ByZXByb2Nlc3NvcicpfTo8L2xhYmVsPgoJCQkJPGJyPjxicj4KCQkJPC9wPgoKCgoJCQkJe2ZvcmVhY2ggZnJvbT0kcHJlcHJvY2Vzc29ycyBpdGVtPXByZXByb2Nlc3NvciBrZXk9ZGlyfQoKCgkJCQkJPGxhYmVsIGNsYXNzPSJwcmVwcm9jZXNzb3IgY19mdWxsIj4KCgkJCQkJCTxkaXYgY2xhc3M9ImlucHV0X3JhZGlvIGdyaWRfMiI+CgkJCQkJCQk8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InskYWN0aW9uaWR9cHJlcHJvY2Vzc29yIiB2YWx1ZT0ieyRkaXJ9IiB7aWYgJGN1cnJlbnRfcHJlcHJvY2Vzc29yIGVxICRkaXJ9Y2hlY2tlZHsvaWZ9PgoJCQkJCQk8L2Rpdj4KCgkJCQkJCXtpZiBpc3NldCgkcHJlcHJvY2Vzc29yLT5sb2dvKSBhbmQgIWVtcHR5KCRwcmVwcm9jZXNzb3ItPmxvZ28pfQoJCQkJCQkJPGRpdiBjbGFzcz0ibG9nbyBncmlkXzIiPgoJCQkJCQkJCTxpbWcgc3JjPSJ7JG1vZC0+R2V0TW9kdWxlVVJMUGF0aCgpfS9wcmVwcm9jZXNzb3JzL3skZGlyfS97JHByZXByb2Nlc3Nvci0+bG9nb30iPgoJCQkJCQkJPC9kaXY+CgkJCQkJCXsvaWZ9CgoJCQkJCQk8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiBncmlkX3tpZiBpc3NldCgkcHJlcHJvY2Vzc29yLT5sb2dvKSBhbmQgIWVtcHR5KCRwcmVwcm9jZXNzb3ItPmxvZ28pfTh7ZWxzZX0xMHsvaWZ9Ij4KCQkJCQkJCTxoMj57JHByZXByb2Nlc3Nvci0+ZnJpZW5kbHlfbmFtZX08L2gyPgoJCQkJCQkJPHA+CgkJCQkJCQkJeyRwcmVwcm9jZXNzb3ItPmRlc2NyaXB0aW9ufSAtIEJ5IDxhIGhyZWY9InskcHJlcHJvY2Vzc29yLT53ZWJzaXRlfSI+PGVtPnskcHJlcHJvY2Vzc29yLT5hdXRob3J9PC9lbT48L2E+CgoJCQkJCQkJCXtpZiAhZW1wdHkoJHByZXByb2Nlc3Nvci0+bm90ZSl9CgkJCQkJCQkJCTxicj48c3Ryb25nPnskbW9kLT5MYW5nKCdub3RlJyl9PC9zdHJvbmc+IHskcHJlcHJvY2Vzc29yLT5ub3RlfQoJCQkJCQkJCXsvaWZ9CgkJCQkJCQk8L3A+CgoKCgoJCQkJCQk8L2Rpdj4KCgoJCQkJCTwvbGFiZWw+CgoJCQkJey9mb3JlYWNofQoKCQk8L2Rpdj4KCgk8L2ZpZWxkc2V0PiB7KkVuZCBwcmUgcHJvY2Vzc29yKn0KCgoJPGZpZWxkc2V0PgoJCTxsZWdlbmQ+eyRtb2QtPkxhbmcoJ29wdGlvbnMnKX08L2xlZ2VuZD4KCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4KCQkJCTxsYWJlbCBmb3I9J2ltcG9ydF9kaXJzJz57JG1vZC0+TGFuZygnaW1wb3J0X2RpcnMnKX08L2xhYmVsPgoJCQk8L3A+CgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9J3skYWN0aW9uaWR9aW1wb3J0X2RpcnMnIGlkPSdpbXBvcnRfZGlycycgdmFsdWU9J3skaW1wb3J0X2RpcnN9Jz4KCQkJPC9wPgoJCTwvZGl2PgoKCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQk8cCBjbGFzcz0icGFnZXRleHQiPgoJCQkJPGxhYmVsPnskbW9kLT5MYW5nKCdtaW5pZnknKX08L2xhYmVsPgoJCQk8L3A+CgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQkJPGxhYmVsIGZvcj0nbWluaWZ5Jz4KCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSd7JGFjdGlvbmlkfW1pbmlmeScgdmFsdWU9JzAnPgoJCQkJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0neyRhY3Rpb25pZH1taW5pZnknIGlkPSdtaW5pZnknIHZhbHVlPScxJyB7aWYgJG1pbmlmeX1jaGVja2VkPSJjaGVja2VkInsvaWZ9PgoKCQkJCQl7JG1vZC0+TGFuZygnbWluaWZ5X2xhYmVsJyl9CgkJCQk8L2xhYmVsPgoJCQk8L3A+CgkJPC9kaXY+CgoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+CgkJCQk8bGFiZWw+eyRtb2QtPkxhbmcoJ2dlbmVyYXRlX3NvdXJjZW1hcCcpfTwvbGFiZWw+CgkJCTwvcD4KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+CgkJCQk8bGFiZWwgZm9yPSdnZW5lcmF0ZV9zb3VyY2VtYXAnPgoJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9J3skYWN0aW9uaWR9Z2VuZXJhdGVfc291cmNlbWFwJyB2YWx1ZT0nMCc+CgkJCQkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSd7JGFjdGlvbmlkfWdlbmVyYXRlX3NvdXJjZW1hcCcgaWQ9J2dlbmVyYXRlX3NvdXJjZW1hcCcgdmFsdWU9JzEnIHtpZiAkZ2VuZXJhdGVfc291cmNlbWFwfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0+CgoJCQkJCXskbW9kLT5MYW5nKCdnZW5lcmF0ZV9zb3VyY2VtYXBfbGFiZWwnKX0KCQkJCTwvbGFiZWw+CgkJCTwvcD4KCQk8L2Rpdj4KCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4KCQkJCTxsYWJlbD5BdXRvcHJlZml4ZXI8L2xhYmVsPgoJCQk8L3A+CgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQkJPGxhYmVsIGZvcj0ndXNlX2F1dG9wcmVmaXhlcic+CgkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0neyRhY3Rpb25pZH11c2VfYXV0b3ByZWZpeGVyJyB2YWx1ZT0nMCc+CgkJCQkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSd7JGFjdGlvbmlkfXVzZV9hdXRvcHJlZml4ZXInIGlkPSd1c2VfYXV0b3ByZWZpeGVyJyB2YWx1ZT0nMScge2lmICR1c2VfYXV0b3ByZWZpeGVyfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0+CgoJCQkJCXskbW9kLT5MYW5nKCd1c2VfYXV0b3ByZWZpeGVyJyl9CgkJCQk8L2xhYmVsPgoJCQk8L3A+CgkJPC9kaXY+CgoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+CgkJCQk8bGFiZWwgZm9yPSdhdXRvcHJlZml4ZXJfYnJvd3NlcnMnPnskbW9kLT5MYW5nKCdhdXRvcHJlZml4ZXJfYnJvd3NlcnMnKX08L2xhYmVsPgoJCQk8L3A+CgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCQkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9J3skYWN0aW9uaWR9YXV0b3ByZWZpeGVyX2Jyb3dzZXJzJyBpZD0nYXV0b3ByZWZpeGVyX2Jyb3dzZXJzJyB2YWx1ZT0neyRhdXRvcHJlZml4ZXJfYnJvd3NlcnN9Jz4KCQkJPC9wPgoJCTwvZGl2PgoKCTwvZmllbGRzZXQ+CgoKCgoKCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+CgkJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgoJCQk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iLz4KCQk8L3A+Cgk8L2Rpdj4KCgoKeyRmb3JtX2VuZH0K]]></data>
	</file>
</module>
